From nobody Tue Jun 16 02:37:07 2026 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) (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 7FE893E3C6B for ; Wed, 15 Apr 2026 16:00:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776268805; cv=none; b=bzfabmVrAW6WvVzyzj0xuVi+68tAIxXrK5tUUhOms8jL4v3TSCUlfS1JRUTNx+3v0DB0xUFzJ3JmGw40XaUt71qeTKE3rfbFKfyA9iPOdvmLHgGdgoSA59jMLqFcjF3xW1G4pNJTMo4bap8n6eLy8l3Su/Rv7a/MFVujYAf8Dic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776268805; c=relaxed/simple; bh=bZDr22NN2iZqQw4Om81Z4JS6DXre6UyaxvybpH7wtYY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r326Rz3kXNh5+1iWggCukmIE5Iz3NhpJbaPpa22Y9ztYkbPLdahABcacg0rFwbBIo+SrF9cI4G5BQcH2ZwVOccCtr3fijnIOkr0NjOMlkMLn2PIgDKnVf53BQi+hXUNVSoYRVo8zLgxZiUAJoNYPGcvENyNeVw2MITO+1wuPYkQ= 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=oGuW7A14; arc=none smtp.client-ip=209.85.208.170 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="oGuW7A14" Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-38c620f1699so73984611fa.0 for ; Wed, 15 Apr 2026 09:00:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1776268802; x=1776873602; 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=lHZQFjksRdXwK8frm/erkjYO22S9wiIjEh2bp+EQ8v4=; b=oGuW7A145Uw1I45zhZzzo91mkAtHfSAJTFNxgkdwhPQP/iU1fQ7GC2IL55kLmnJW9S 1Vi7ykd3H9Y3P2x+GhgcOrcHon3pkxTEHyRR2nm/e4H6o8B/ou1fqDDKvjJQJMgFmzlN Or788vXbw3lpN8cS2CXLcVZP4IDnZ8E2NaUn4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776268802; x=1776873602; 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=lHZQFjksRdXwK8frm/erkjYO22S9wiIjEh2bp+EQ8v4=; b=dpXLfo5zNP1yIbccgiqSR9bkEwsOIROTxAyJhoHXR02YzQZtbrmye8LAyB4lgp36rN lB3DrG0mFk168HmGclLgCFLqE9u/Jgg8fviYpJoDJHqFTj0wGqBRI8gt2dxyOywyjkAO 6LIm70MAPD5B7aRMQENgNlwJk2yNxytMDhN4rkpPsXyUlP5kvw/kMWCsO4AU/u2GIy4u sOx/H4/9xM/BErNsX66dG0/Ihw0qEL9Iek7grTRA6mU+iUdvbnCk833BCiauw9Yn5ktq wVc4T4rp2vdoS8ZVo1CtkHNHT+Hes2lOxqmPC0I4SQ+2Od9QhjzyVe5UfCTxBcM0y4vf Vg5g== X-Forwarded-Encrypted: i=1; AFNElJ8DlL00L0RZQP1zcI4+Kh9fDVXTD3rTVTOZRC4Yr+F0T7D5A7BckNiP9FWQBLfH/5Dh406Hq/QgBSPkqco=@vger.kernel.org X-Gm-Message-State: AOJu0Yw6zQ4idHyqh1piQUssmKWgnvbNxyrhhqzT9KaI+q1PAayWN6xW xEZod7M+Uh/h9mgngRqOZMyBU7RtzCL/ZVIAdrb9qzlbrSaXDKjPElnfKaAElCHVUQ== X-Gm-Gg: AeBDievKiyUCxax0MbKWdH4uLKvqh+GPgpon2q+P2+PDO2qQzGelvBQ0xLnPPj5R1eI 6W41gSdlQAa2R0RNMEqyOZ6yjUEfmO6mtT8R2fSkfo2x1Nf0EpC9RRN6bC6P/9kxLqMWZ6ziR8m K8/XLFU8y1y/4BOOImwtoswcH/K+EYCbdq8enyBTeEGyvvtbnAjqxSWe5V4QbzEHzxHEfHoxlGt V4p5CSU4aPiC4XN2S1AT9ocX35Lbj1vrwiZhFgZk0Uucmxhvb+GELMrgfozQsBPm+S48K6Qe7eY GjDSj4IPL6uLg1bKIwRinkZB9TrHVV0NiB+PwPz/d3Bl5/2DrAO+PuN5fH8+BugW2PjuwKwAciL cQmOOuDjx1KzP9lGlMq1qs6km2rmpZm52BEJORQ8sBwhc81ty9zRMUHmVF3VajATb9DtcMH3rhS foRvSHA17e+vMNWNB5gri2RkDEDTMmKuk4Hz95RBSVYkrhkuiVf2ofaoszfRnDLyfnP3f41xiPW xeGbk0= X-Received: by 2002:a2e:bc26:0:b0:38e:8216:13f9 with SMTP id 38308e7fff4ca-38e8225584amr43479661fa.26.1776268801702; Wed, 15 Apr 2026 09:00:01 -0700 (PDT) Received: from ribalda.c.googlers.com (52.163.228.35.bc.googleusercontent.com. [35.228.163.52]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38e9ea096desm4664531fa.18.2026.04.15.09.00.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 09:00:00 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 15 Apr 2026 15:59:57 +0000 Subject: [PATCH 1/2] media: uvcvideo: Do not open code uvc_queue_get_current_buffer 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: <20260415-uvc-meta-partial-v1-1-a0acc79a6300@chromium.org> References: <20260415-uvc-meta-partial-v1-0-a0acc79a6300@chromium.org> In-Reply-To: <20260415-uvc-meta-partial-v1-0-a0acc79a6300@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.3 Do not re-implement uvc_queue_get_current_buffer() logic inside uvc_video_complete(), just call the function. Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_video.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 40c76c051da2..4feb3699f520 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1693,7 +1693,6 @@ static void uvc_video_complete(struct urb *urb) struct vb2_queue *vb2_qmeta =3D stream->meta.queue.vdev.queue; struct uvc_buffer *buf =3D NULL; struct uvc_buffer *buf_meta =3D NULL; - unsigned long flags; int ret; =20 switch (urb->status) { @@ -1719,13 +1718,8 @@ static void uvc_video_complete(struct urb *urb) =20 buf =3D uvc_queue_get_current_buffer(queue); =20 - if (vb2_qmeta) { - spin_lock_irqsave(&qmeta->irqlock, flags); - if (!list_empty(&qmeta->irqqueue)) - buf_meta =3D list_first_entry(&qmeta->irqqueue, - struct uvc_buffer, queue); - spin_unlock_irqrestore(&qmeta->irqlock, flags); - } + if (vb2_qmeta) + buf_meta =3D uvc_queue_get_current_buffer(qmeta); =20 /* Re-initialise the URB async work. */ uvc_urb->async_operations =3D 0; --=20 2.54.0.rc1.513.gad8abe7a5a-goog From nobody Tue Jun 16 02:37:07 2026 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (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 076973E3D87 for ; Wed, 15 Apr 2026 16:00:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776268806; cv=none; b=W5qgtAHVKi+Wje7BCEy3BX9t4KdsYCejWY3HV5AmCx7z2egu5cD+NHq8oHR0NPRIWJ6lUmQsYj1HxlxKpVMkfgn1RvrEtNKm+0pG+MO7swH9RHx94fkAw8lawEzuKK8JqTu1pDu7VdSZ0htJ9VFIq9hIjERt2CMwDek6SQdmf2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776268806; c=relaxed/simple; bh=jklYbyXx8JhUeH0SfLpxUiKznxG0dRUU6oUylTpfc+w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fsgikZhFy79Z/nPpaO518Cos69jZduTe58JkQZteY6wpUS5x1Gd8KogR7DYeaIxXX/5+XF89dxzYXxeXLMH9sz9fkWut5bdOhLS1nLGPxCOiAy1g85oLIaDHt9CgDs4jOpnVqYHwzQVeHSv9QCTHFPTTaYOCCOA88RWDbHPt00M= 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=hTRt9sEF; arc=none smtp.client-ip=209.85.167.49 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="hTRt9sEF" Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-59e4a04f059so6676769e87.2 for ; Wed, 15 Apr 2026 09:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1776268803; x=1776873603; 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=5gSe32++HvJCWSVHq7jVTGcbaloZh98EdgzMuL+sZWM=; b=hTRt9sEF4qHxUmnrPywD5Kuon+3vQEdNiYB+/FRKKB2bf0Zi5WQChXA61hz49yA/P6 zABWvK6+HPZFtqfzmoT79YD3ucdJEREckb6bQZDHwUtNIyGfbFicB3gbpDq66pMOTNED ub3HnllubvqxnMPz5t42p2NSvHDa1BF81/Olw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776268803; x=1776873603; 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=5gSe32++HvJCWSVHq7jVTGcbaloZh98EdgzMuL+sZWM=; b=DiHBUwAYCKf93vrD4/c8tNHt+aseod/fQ0OQLInR/x+x+Q4Oe31OVB08Rgugbrg52g gXQBfv5rx/Leq9DRthe7EcgJV/OMkMTkDnA+Ho9l43K0IE3t94rjq0+aTfBpRPk2uSN8 JE0e6d2+Bws8bWXt0WomKVaf3XS7kpJO5366ijQE6KntTBpMdYkxoYv3GHLiTjBqReyX aCqPfuiG9yW/gaBSJ7w6L0gB5BuXkRRAPwQnYHLin5DrFqFmnnhpj8iPiBgzQ80fcTcn Azfi9hH/EBflhh+oeWLrtvmeuJ5Dp0oIfkztNUquQqXNLEGPhU13nVxarbJIHGW3nXzk GqWg== X-Forwarded-Encrypted: i=1; AFNElJ+9+1oKTv76omBGdnWBMqc9FTtaLZ7Jo0GOgbgkiaXLCsurvmKLi/WSv5l09D7zBJvJKO0Extm7OCA2Tvs=@vger.kernel.org X-Gm-Message-State: AOJu0YyMUHPG7qQYDrnaf4LOVoGLde8ojEC77L3f6gnkne9yc6zU+fjw ELkXrUJnzFsQgvL+JFYFA3vYugF6vXvzsW8Un38OWaOMgi6VKrNM/L6zgI7ksYzgKg== X-Gm-Gg: AeBDietvqSrdVGLzuF6i15k7t33SK8Cvw+FTfdihnY+Q9kC+2NBC7LKIwwOxTRxuTSq IxfQupR5Fr0O69mxUE+3dw/PJFkuRAKP07jgyofp65dyy+wgm75iz7YCYrXj/jW6jYYoyG6wol5 0FkRMZNDxNKo2Ep5E6py45jMpFwXcChRZrlC71oy7ySq59wnF1y/MCtm+QJkFmCN5nbNqZM0UIC nug1u6OgrIvOfNKkPr0wqPW7u/tR8CMw+dti9ebat6t0jFi2J6w9LqiBtX/m6RUS9rqnr5qqhtm 6RMmKcwjIjclXi+M9laWq6xiZzJjdgVCXMgQOdIsXoPplxRXXy+j4b5qN217ZJrF5ZEseS0cF++ MBH8GeFXXBvcCM/d0p6oIwgFnBU+VqHtWkuQTVJ6GPqBDknzvZEHugu5VXkr6zHKTHy2VUQCw0c GnYoW9391ZaAkEpi38KS2vf7xieTJuxj/mL7pf+QPKGlMY7ryLpVpDYiUSDf+e4PlJVuHMaMwNM d3P5XU= X-Received: by 2002:a05:6512:138e:b0:5a2:b3dd:7a63 with SMTP id 2adb3069b0e04-5a3efb4160dmr6917816e87.10.1776268803105; Wed, 15 Apr 2026 09:00:03 -0700 (PDT) Received: from ribalda.c.googlers.com (52.163.228.35.bc.googleusercontent.com. [35.228.163.52]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38e9ea096desm4664531fa.18.2026.04.15.09.00.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 09:00:02 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 15 Apr 2026 15:59:58 +0000 Subject: [PATCH 2/2] media: uvcvideo: Avoid partial metadata buffers 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: <20260415-uvc-meta-partial-v1-2-a0acc79a6300@chromium.org> References: <20260415-uvc-meta-partial-v1-0-a0acc79a6300@chromium.org> In-Reply-To: <20260415-uvc-meta-partial-v1-0-a0acc79a6300@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.3 If the metadata queue that is empty receives a new buffer while we are in the middle of processing a frame, the first metadata buffer will contain partial information. Avoid this by tracking the state of the metadata buffer and making sure that it is in sync with the data buffer. Now that we are at it, simplify the code a bit by not getting a metadata buffer if there is no data buffer ready. Fixes: 088ead255245 ("media: uvcvideo: Add a metadata device node") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 4feb3699f520..f339d6d19a39 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1517,6 +1517,8 @@ static void uvc_video_next_buffers(struct uvc_streami= ng *stream, *meta_buf); } *video_buf =3D uvc_queue_next_buffer(&stream->queue, *video_buf); + if (*video_buf && *meta_buf) + (*meta_buf)->state =3D UVC_BUF_STATE_ACTIVE; } =20 static void uvc_video_decode_isoc(struct uvc_urb *uvc_urb, @@ -1718,9 +1720,23 @@ static void uvc_video_complete(struct urb *urb) =20 buf =3D uvc_queue_get_current_buffer(queue); =20 - if (vb2_qmeta) + if (buf && vb2_qmeta) buf_meta =3D uvc_queue_get_current_buffer(qmeta); =20 + /* + * Avoid partial metadata buffers, by making sure that the data buffer + * and metadata buffer state is in sync. + * + * A new (QUEUED) buffer is only allowed to become ACTIVE if we are also + * at the start of a new data buffer. + */ + if (buf_meta && buf_meta->state =3D=3D UVC_BUF_STATE_QUEUED) { + if (buf->state !=3D UVC_BUF_STATE_QUEUED) + buf_meta =3D NULL; + else + buf_meta->state =3D UVC_BUF_STATE_ACTIVE; + } + /* Re-initialise the URB async work. */ uvc_urb->async_operations =3D 0; =20 --=20 2.54.0.rc1.513.gad8abe7a5a-goog