From nobody Fri Apr 3 22:29:48 2026 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D54943A9DAB for ; Mon, 23 Mar 2026 13:10:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271446; cv=none; b=WEPWnsSbb3f+yfPyUpM3qcKLASAa4lScllVOmn91odi1CJv2mI9wVib57XBbD7WY1NgCxJc9u2sTHK1cGX3ErXhsGSLHk///uqsbcCy9pJZdvEPHyrNjR/NlTNrDFlMQes+MlatZdIINtH2JtCA66cEUWYEWVVNGM7XAPs182y0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271446; c=relaxed/simple; bh=F309xMOsoYAt3en3fSULuoIwejw2mSILjG/RfAGmen4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jAWa/FbFIo5cdyAZYkyeDgzUsfmiYpP2/wZNQOBh98aAZPmTo2WDGWqKhKFmF/+4ewTDEKo/n7ca7+36Mznbv7T6I5khN5XQScpPgD2zhhc0BDWCjxz21Gf2itQLfm+n9QGX6KPxRFUFSgnjrx8swDUcBZX5zFRiMVYB9nZ+kDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=W4FNoOAJ; arc=none smtp.client-ip=209.85.167.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="W4FNoOAJ" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5a126c8aab9so3194817e87.0 for ; Mon, 23 Mar 2026 06:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271443; x=1774876243; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HU1BwRIgJwIonvocfX7YrDLQqPhrL3H19ZNgFff0aO0=; b=W4FNoOAJ/P0Lqq2IBz7ZOYmRaw0OnlX+2bnVbZuT/rz/SQJcXnvcfGUD8juIyFrFk/ pyB+TI2yaLKYEuSzlpaNnIixlGchvsF/Dk2S5JCfPAtKQ25ZE0qDsuaXBfuuCvjdu9VI THwN41llnsIXDmr42wpnsjWFSPKkC9XhFyFsM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271443; x=1774876243; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=HU1BwRIgJwIonvocfX7YrDLQqPhrL3H19ZNgFff0aO0=; b=OfMmgMjnt6G+98BekQRZD+UDi7RkaEILjg7lIwUKo3bDinLmMgKvhM1/z89MXKliEE 1BkQOwrRj9GU63F23EJIPXPfkB95/JfWE8jyeqq1MdD5p+a428kAyGiclFKg5zo2zvjF McDt72/uCcT2pyNwiPodQz0jfGdJFO8j9j+0/ixFKxT8OEvBn+dKsq2Dypzz+pnHKmfq VWZTYwLl4NJJtWdCgZ+UOvSv4QhbfH7zD3Tr+kZBgE+ghJS/mB0YclKNhRJA1RvLJj0L B+7YZm9zBwQVf5Dk2NicyKeBdhlvNH0o7ZTXEboJSbntSNnFFZUFrXlybZycxIp4ZgZi 3Cww== X-Forwarded-Encrypted: i=1; AJvYcCUut3SpaS+QXFocklz/wZXazFW3x4NfNSNGwwpqTpVV9UL0PsTrxMpNSzvMNKuLfGUoUU+eHoGqka60upI=@vger.kernel.org X-Gm-Message-State: AOJu0YxYjadXG6R/TVTOH6/geAEUORm2Zr7RVfGliLguHwPTsxrTS0Qs MBkuAGpQP64Mm8jxfxKi/ofZgQh/u5ze6An4hI6KVd8+y/aRJqhbIaXrYIweXTsiog== X-Gm-Gg: ATEYQzwlqMhWOJEv9zNvMt2Ivp5ENYUcNfblnd5KkwVDHzpJKtIMIQKAB5Y6Hh1x8HL Oq92UCKWn6ctUv1DuJVvtZO90yDXDnUaZN9hVYBYLdXrtDodYzhYWeFuX4kIQvCUjqQjikOKmh2 shn8pOhOHow6yZ+hpCAK0u/kkhpUvN2gFfikqvxjhgjvoT5+VBF8OwSOwIu2TxdXBJEUvc7CEVv 0LwYgwcnlLv8Ru9fsrhNNYYXaKqkkzVnmNexUDfrx7CYfygWDADX5GFRAa2RCRzHjRaSZgj/Qqc r0RCpKT0D53o1VzY3TywoHPoRtlsyBcfYwpaonYWi9sWemHKXzPJEApaz9WEW+54To+FfR0h2I1 HRNWDJz0+nrHzS0U+8Q7k+aDQPYcbWwZBzLQ8d2cs7bD4qtVM9Hn5MdkXRIZp/F9ufGJ+618bJv a78jiyL3BQC1jwWKyq9IN21hDlyfS0LXt1jlJX+NUMbeLYKIJDtCmb6EF15AIM1bsoTmdrJnm50 GRvoSc= X-Received: by 2002:a05:6512:3781:20b0:5a2:8637:8189 with SMTP id 2adb3069b0e04-5a2863781a0mr2777613e87.23.1774271443002; Mon, 23 Mar 2026 06:10:43 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:42 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:31 +0000 Subject: [PATCH 4/4] media: uvcvideo: Do not add clock samples with small sof delta Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260323-uvc-hwtimestamp-v1-4-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org X-Mailer: b4 0.14.3 Some UVC 1.1 cameras running in fast isochronous mode tend to spam the USB host with a lot of empty packets. These packets contain clock information and are added to the clock buffer but do not add any accuracy to the calculation. In fact, it is quite the opposite, in our calculations, only the first and the last timestamp is used, and we only have 32 slots. Ignore the samples that will produce less than MIN_HW_TIMESTAMP_DIFF data. Fixes: 141270bd95d4 ("media: uvcvideo: Refactor clock circular buffer") Cc: stable@vger.kernel.org Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index dcbc0941ffe6..e1a4e84d6841 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -544,6 +544,19 @@ static void uvc_video_clock_add_sample(struct uvc_cloc= k *clock, spin_unlock_irqrestore(&clock->lock, flags); } =20 +static inline u16 sof_diff(u16 a, u16 b) +{ + u32 aux; + + a &=3D 2047; + b &=3D 2047; + if (a >=3D b) + return a - b; + + aux =3D a + 2048; + return (u16)(aux - b); +} + static void uvc_video_clock_decode(struct uvc_streaming *stream, struct uvc_buffer *bu= f, const u8 *data, int len) @@ -664,12 +677,13 @@ uvc_video_clock_decode(struct uvc_streaming *stream, = struct uvc_buffer *buf, sample.dev_sof =3D (sample.dev_sof + stream->clock.sof_offset) & 2047; =20 /* - * To limit the amount of data, drop SCRs with an SOF identical to the + * To limit the amount of data, drop SCRs with an SOF similar to the * previous one. This filtering is also needed to support UVC 1.5, where * all the data packets of the same frame contains the same SOF. In that * case only the first one will match the host_sof. */ - if (sample.dev_sof =3D=3D stream->clock.last_sof) + if (sof_diff(sample.dev_sof, stream->clock.last_sof) <=3D + (MIN_HW_TIMESTAMP_DIFF / stream->clock.size)) return; =20 uvc_video_clock_add_sample(&stream->clock, &sample); --=20 2.53.0.959.g497ff81fa9-goog