From nobody Thu Apr 9 10:33:23 2026 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 D68F03D6CC3 for ; Mon, 9 Mar 2026 15:02:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773068523; cv=none; b=CgHQDJ3XZ0T5RVahJtuf5Ia29nUiA/DnN3UwMSh1kBR9uizKwAnj0qxUC94nOunLb7rptKloOWeq7VvmE2RY/4w2kP0RBOdJR4/A0lCLyxzZAujQODZUTRuqC5ewbTBYyrV0yNYx6LatVi/PNJA4DDMhalXr5dG86UqQLkvz5o4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773068523; c=relaxed/simple; bh=CCo9MsLBz35ddFk/kftRSVSKC9JPYu1XSXPfUzfG2uU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qtVL8RBZI2KuJduU+s0inpEMKNEFzcMBB81bsEco0lRR8mMM4DqZzTYoMmCSzMLveLGZjibuGKg9S5CEwrM3jMk07bWOLtaIpklAP5QDAM69IAHF7tIUqMCv30FQhK9HgLPf3cuWnjn6Z8AZ3XiabGC9J2vV1EThWbKSHFEgZDY= 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=I6lw2OOm; arc=none smtp.client-ip=209.85.167.46 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="I6lw2OOm" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5a1443780c4so2012475e87.0 for ; Mon, 09 Mar 2026 08:02:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773068520; x=1773673320; 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=f6YS8feCy/AcjUOl+x13VpxVJ8Kgr7ClPZ1jb91K/I0=; b=I6lw2OOmWOLWIpm5yencf3ula5osWOB1yuNlNXKgtu2FJFE+y9+8UIstk/3h5b7LJv o7ob/WsLIWXPEColFZ1Z4YR7OkQn4I1X8VuRwv95Xnxml6jVzycCmYrS4vy7Y/E1qRF4 Rjct6k0/roCGnxoXOzddB0hQOyY85V/hbtmzc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773068520; x=1773673320; 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=f6YS8feCy/AcjUOl+x13VpxVJ8Kgr7ClPZ1jb91K/I0=; b=qT4UJLt6iUNDuFaaonOrh8Kg8EJvoTqyRDO9mYUlFrPaMjKXkQJSwBKzeH3wOYwcc7 4w78pssemHI9cjfefymrGYu/Bql1+y6REzkupXfEy37ognyd3Um+xZXy6EQ/H0ta0vES VphLFbrmkW0RFFZKPuRgw+t4VfQGxFH+5DbeLAiShUchwGwtZogeb+Su3vB13rajxbnm nCgIaeEnjYUXGLVFPpnaiLzWMOg7LOi+N4OwArMtYY0aRHzpmDMXtyPJHP/yOw7AjAW2 cF7CJlqbvXvVwYLgvIw99g5XCQdUcPez/6q/etmQB5d7rWlixyw9BhZQicF2f4O4tgqv YpLA== X-Forwarded-Encrypted: i=1; AJvYcCUTvapU549nXr4PMWHsk6bLMnKUtCMBQwQ/prpImzI+6XVB6ynkJxiuN6sO6M2bNNucZpXYLdFv+gNjlzc=@vger.kernel.org X-Gm-Message-State: AOJu0YxK1WYgNmvaDPnnvwgOSu87wWVysdln0zjmKTLzsQEilqfMpTG+ mAyCfUwPUPYoBzIBGHddiDroRxnKJ4ALpq5+e+uQG52z1sLFcRgP8ugpKGroVV8fWg== X-Gm-Gg: ATEYQzyeVOJbXGKE51L8ZbkKLawI4D56oy/3Q5phVlVMgKxEk0SRqsq2/55A+s/djUN rjocP2KoR77A5VUFJSsX/GOPPUkyUz8aCHn0/JBALEr6f7YHP8hMWHI1q9Iivne7gY42CaR8DeJ 0kIYkuNep1IXazqBjQBmr/MDxyJvtgsgqo1eKBG9AEOozFRyAMzIsOyss3okvBXQZpc+HsoWoIa MoJJj3lRwxeFOMr/cFNqGz/MpCTZRBhS1yA5llLyz/TTGIIreCZeyTblmxs0tj1+5e2FULvJUVI Fg7myOCrxlZUWHjACl6lpPmG3yo5cydlz75gddOpIExz2BSpL0cCexMSNh1AtNbDe31hHxA6/zL lUZfgRKpbZDkr9HnPrtck5HIUaPpHSEsKdx7ZUIGjhwfJGQLU6VyqU6XgRdU4rAQFFpO6eISstz pYLMUGtB23/P6A0deIcVDW/8k00Gr9eU3/q0toQooUBtxkc4IJShym2KlA2AydCTamsuJBoEI38 Q== X-Received: by 2002:a05:6512:308b:b0:5a1:1941:18ad with SMTP id 2adb3069b0e04-5a131e381d3mr5383026e87.0.1773068519891; Mon, 09 Mar 2026 08:01:59 -0700 (PDT) Received: from ribalda.c.googlers.com (27.69.88.34.bc.googleusercontent.com. [34.88.69.27]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a13d08cc0dsm2138003e87.80.2026.03.09.08.01.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 08:01:58 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 09 Mar 2026 15:01:54 +0000 Subject: [PATCH 1/3] media: uvcvideo: Enable VB2_DMABUF for metadata stream 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: <20260309-uvc-metadata-dmabuf-v1-1-fc8b87bd29c5@chromium.org> References: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> In-Reply-To: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Yunke Cao , Ricardo Ribalda , stable@vger.kernel.org X-Mailer: b4 0.14.3 The UVC driver has two video streams, one for the frames and another one for the metadata. Both streams share most of the codebase, but only the data stream declares support for DMABUF transfer mode. I have tried the DMABUF transfer mode with CONFIG_DMABUF_HEAPS_SYSTEM and the frames looked correct. This patch announces the support for DMABUF for the metadata stream. This is useful for apps/HALs that only want to support DMABUF. Cc: stable@vger.kernel.org Fixes: 088ead2552458 ("media: uvcvideo: Add a metadata device node") Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_queue.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_= queue.c index 8b8f44b4a045..0eddd4f872ca 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -243,7 +243,7 @@ int uvc_queue_init(struct uvc_video_queue *queue, enum = v4l2_buf_type type) int ret; =20 queue->queue.type =3D type; - queue->queue.io_modes =3D VB2_MMAP | VB2_USERPTR; + queue->queue.io_modes =3D VB2_MMAP | VB2_USERPTR | VB2_DMABUF; queue->queue.drv_priv =3D queue; queue->queue.buf_struct_size =3D sizeof(struct uvc_buffer); queue->queue.mem_ops =3D &vb2_vmalloc_memops; @@ -256,7 +256,6 @@ int uvc_queue_init(struct uvc_video_queue *queue, enum = v4l2_buf_type type) queue->queue.ops =3D &uvc_meta_queue_qops; break; default: - queue->queue.io_modes |=3D VB2_DMABUF; queue->queue.ops =3D &uvc_queue_qops; break; } --=20 2.53.0.473.g4a7958ca14-goog From nobody Thu Apr 9 10:33:23 2026 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) (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 9C0D23D7D75 for ; Mon, 9 Mar 2026 15:02:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773068525; cv=none; b=d6CwugG7ZqCRpq3K8c4O1t8zAQOxMS+Ybb2uqFT4lsCvh+04r4nLLWXN2CmIzmjqGKg08IkHJTQmypZ9bhmNc8PH5x9aIiPEBCutDLEacndvSfBzhnYfqsRsf0oRzTvZAS1DFnnO0bX2HLcxiCcmTFDR81KRKvh6F/SOIiZj3Qo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773068525; c=relaxed/simple; bh=Mbnl3Jwma6KlozGox42tvgiZ/pjcufu4g8XidqPCjB4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y6mwOWWumwUZYOpFx6HPMYmujml7Ohn6UbeppqmrIDJ+U7A40ctbyLGNZioTqMeX3uVr+Y7GBUukUbvF9uUbfIcf5Jy1h2eOHxvixJHSDn0ic3EgvjuzZfb2eIzYYWzR+rQ66XNbsXjBqCP1nVxeYSpDw2Emot6ZXkTer0SHzn0= 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=L1TKGnBr; arc=none smtp.client-ip=209.85.167.41 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="L1TKGnBr" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-5a131870b72so4974628e87.1 for ; Mon, 09 Mar 2026 08:02:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773068522; x=1773673322; 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=2Xis2x/y+lKGsadnAZDtI5Q0MzAKh0Sv2udI9oFCdCA=; b=L1TKGnBrwWKYVtv1l2Xq9Driew8ys+3lbs+BINcpmePlXQ+QGKgM0mFfOtWU25HHhl YoXgRc5l+72jraWmZsenSLN+HsJRhJoHFFwNs1zs+elNh9ffbRpl8bR+zaGO3S09QLRD tk58/qdZNs6GTVoGpMIJtnvQTmffqqF4TCfDY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773068522; x=1773673322; 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=2Xis2x/y+lKGsadnAZDtI5Q0MzAKh0Sv2udI9oFCdCA=; b=bvjM+8AYyuKzd2tbShDkT1J08XAEq61NDunz+sBGIt7DIm26izXZT5Z+v5FSgGiyJa PCa/XjaA2L9rpheOdzHXIRinBogYkscuBSJF0i9Yu2Fxd/RVu3LHzaQ6aEIA1yhJPXNn C8mmONVxIYfLdGlNNWHDnRKJkLWEOOytzD/W5QW2d/Ozlwypl5W7nYrNUoM79eBAU0Te cvEPZtAV/kcv0qiIou+ELprzlRYC48WuL8W1GlHXTPZRnhsRxk1GBmSzAQFZue/GHjT6 gmo5EJWEqApaynJjFP/2EA3RFahagYOa941UOjH6uKuPMSSZ/H2QOH/YJnhGVnkkV61g w+zQ== X-Forwarded-Encrypted: i=1; AJvYcCXytSrplquwxBpeOKZER1WUD3WSGehPSRp+NLOsOpp3kjmUF5JjCaK3ziUqUzdX9SCj5v7hlKNSZON/8II=@vger.kernel.org X-Gm-Message-State: AOJu0YzFr3AbcldW0zA3koIBX4EeQFSF2thvox0LHzs/O7u1mm8aPP6x 0AYWMWowQYkz7+LaWHIIA4tiLVCrUncV2ATmzJG4bx6s5aOcc6cnu5cLjJVnGxTGNg== X-Gm-Gg: ATEYQzxgZvNDQ6Psiil4J67UNUBFyqZBoVNqNK9MmYVnSzyB5wzg+jtPJQMORRsxTqM wf53VQP1017DjynOgXA/cSJFq6N3WLDrpK52nAx7XRuqSt0k2UsQCEZfei2xAYGDs/u55isZJQX JZy3yly1RfZPhto7JnNvP0q6WJ6pNa6ZYGN3acRhGZdEjJQ9K1AqZmgBg+S5l9DVJgCp2gV/iii U0NUMpuq++5ATu8nM4gWPb3G8dAYqSb+sUZu/m9kEdiNFkcxpwPDczDocIaGX0w1KMz2deUG5XR y8s9SjBUJtkZhMwnHngG/ng1VsXEQlerVhmYdL20BCjHSvrkOgJeibtEQrV8DoDgXCDxgEhZb4v 6ItTqVPEPQ/4zUmUuSJa4Xg18puFe9zTfEhHfBrUi7MkKZ9cMBizygzODidadr1WX8UC5ZLfhIj DbMBVQwHpAyv99MENrxknSEb73Dlk3VaEB3B/0p2nDgqnjfHsTq1wdjK19GO8sPJQUxra1DJMnR jzwdGw7+Vfw X-Received: by 2002:a05:6512:3d0c:b0:5a1:3d83:5253 with SMTP id 2adb3069b0e04-5a13d83544cmr3752809e87.25.1773068520612; Mon, 09 Mar 2026 08:02:00 -0700 (PDT) Received: from ribalda.c.googlers.com (27.69.88.34.bc.googleusercontent.com. [34.88.69.27]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a13d08cc0dsm2138003e87.80.2026.03.09.08.02.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 08:02:00 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 09 Mar 2026 15:01:55 +0000 Subject: [PATCH 2/3] media: uvcvideo: uvc_queue_to_stream(): Support meta queues 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: <20260309-uvc-metadata-dmabuf-v1-2-fc8b87bd29c5@chromium.org> References: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> In-Reply-To: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Yunke Cao , Ricardo Ribalda X-Mailer: b4 0.14.3 The stream data structure has two queues: the metadata and the data queues, but uvc_queue_to_stream() only supports the data queue. If we pass the metadata queue the function will return an invalid pointer. This patch add a parameter to the function to explicitly tell the function which queue are we using. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_isight.c | 3 ++- drivers/media/usb/uvc/uvc_queue.c | 13 ++++++------- drivers/media/usb/uvc/uvcvideo.h | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_isight.c b/drivers/media/usb/uvc/uvc= _isight.c index 43cda5e760a3..ea9dc31dfbad 100644 --- a/drivers/media/usb/uvc/uvc_isight.c +++ b/drivers/media/usb/uvc/uvc_isight.c @@ -41,7 +41,8 @@ static int isight_decode(struct uvc_video_queue *queue, s= truct uvc_buffer *buf, 0xde, 0xad, 0xfa, 0xce }; =20 - struct uvc_streaming *stream =3D uvc_queue_to_stream(queue); + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue, + V4L2_BUF_TYPE_VIDEO_CAPTURE); unsigned int maxlen, nbytes; u8 *mem; int is_header =3D 0; diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_= queue.c index 0eddd4f872ca..68ed2883edb2 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -78,7 +78,7 @@ static int uvc_queue_setup(struct vb2_queue *vq, unsigned int sizes[], struct device *alloc_devs[]) { struct uvc_video_queue *queue =3D vb2_get_drv_priv(vq); - struct uvc_streaming *stream; + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue, vq->type); unsigned int size; =20 switch (vq->type) { @@ -87,7 +87,6 @@ static int uvc_queue_setup(struct vb2_queue *vq, break; =20 default: - stream =3D uvc_queue_to_stream(queue); size =3D stream->ctrl.dwMaxVideoFrameSize; break; } @@ -113,7 +112,7 @@ static int uvc_buffer_prepare(struct vb2_buffer *vb) =20 if (vb->type =3D=3D V4L2_BUF_TYPE_VIDEO_OUTPUT && vb2_get_plane_payload(vb, 0) > vb2_plane_size(vb, 0)) { - uvc_dbg(uvc_queue_to_stream(queue)->dev, CAPTURE, + uvc_dbg(uvc_queue_to_stream(queue, vb->type)->dev, CAPTURE, "[E] Bytes used out of bounds\n"); return -EINVAL; } @@ -160,7 +159,7 @@ static void uvc_buffer_finish(struct vb2_buffer *vb) { struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct uvc_video_queue *queue =3D vb2_get_drv_priv(vb->vb2_queue); - struct uvc_streaming *stream =3D uvc_queue_to_stream(queue); + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue, vb->type); struct uvc_buffer *buf =3D uvc_vbuf_to_buffer(vbuf); =20 if (vb->state =3D=3D VB2_BUF_STATE_DONE) @@ -170,7 +169,7 @@ static void uvc_buffer_finish(struct vb2_buffer *vb) static int uvc_start_streaming_video(struct vb2_queue *vq, unsigned int co= unt) { struct uvc_video_queue *queue =3D vb2_get_drv_priv(vq); - struct uvc_streaming *stream =3D uvc_queue_to_stream(queue); + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue, vq->type); int ret; =20 lockdep_assert_irqs_enabled(); @@ -197,11 +196,11 @@ static int uvc_start_streaming_video(struct vb2_queue= *vq, unsigned int count) static void uvc_stop_streaming_video(struct vb2_queue *vq) { struct uvc_video_queue *queue =3D vb2_get_drv_priv(vq); - struct uvc_streaming *stream =3D uvc_queue_to_stream(queue); + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue, vq->type); =20 lockdep_assert_irqs_enabled(); =20 - uvc_video_stop_streaming(uvc_queue_to_stream(queue)); + uvc_video_stop_streaming(stream); =20 uvc_pm_put(stream->dev); =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 8480d65ecb85..9b4849fda12f 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -703,8 +703,10 @@ static inline int uvc_queue_streaming(struct uvc_video= _queue *queue) } =20 static inline struct uvc_streaming * -uvc_queue_to_stream(struct uvc_video_queue *queue) +uvc_queue_to_stream(struct uvc_video_queue *queue, unsigned int type) { + if (type =3D=3D V4L2_BUF_TYPE_META_CAPTURE) + return container_of(queue, struct uvc_streaming, meta.queue); return container_of(queue, struct uvc_streaming, queue); } =20 --=20 2.53.0.473.g4a7958ca14-goog From nobody Thu Apr 9 10:33:23 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 EE4053D9042 for ; Mon, 9 Mar 2026 15:02:05 +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=1773068527; cv=none; b=Gx4UhTu5UF9eB38qGLd5swL2zNAZIFQjdgMWmvv6okOA9i9krdQx1Bt2rCH3NaXFyBLGem6fQxYDSpLRNC0b0uTtpGkOMDI640MvW8R+VCA2HuXK7IHTucRr4J+QC1ivJJ9dWj+3Vxi3JZDLRArC7Dy5O442+SnXj0xb6HuxJ7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773068527; c=relaxed/simple; bh=6LoRF89adZl3+0KVlBqmiPP6LmyEY1jYDGy+QTcVaRI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p9rlMUDmdYRRPqz6zJ0KycbilapI2aUd0/YFM5F0UIzrJmmjocDMcwIoh47vZcNSxa56D+wDeesUcddUqsYI0SgGvgPjsK7HLenUGy5KEDxNQHz6EesyCQMVIL37Pu9ZzuRfOskuh0IVfy8S/zy6uA9GdRQZQHiJ1En8QlJiMvI= 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=URtOH1lS; 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="URtOH1lS" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5a0ff30b240so6149568e87.0 for ; Mon, 09 Mar 2026 08:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773068524; x=1773673324; 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=JIDXL9V6/SrviwhwYQrzl7fDB/7gN0o280/N3Q4UFFk=; b=URtOH1lSDO8C//dKcBwPGfajes4bd1Slrh24uLrV+C/uZTLuf850GGmRRX7iUyOkM6 1anFUIBX7lJjcb0hVH99ZN/bd7VbYLgvy3yVa0XtG1k6VS42b8xPsYX1KftvYNk/D0WP 52fl5DXzd6rzv4/cVNwb2nGXrannrnOyufk0Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773068524; x=1773673324; 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=JIDXL9V6/SrviwhwYQrzl7fDB/7gN0o280/N3Q4UFFk=; b=RE5iQiaMPNPzV3KmgiFUg0ZZ4A78KA++X+Jof5z0OfLCn5KTlJw6iPilyU/pv4shuS rLO94O1goQWJD/KVZVh9ZkVjRgimyIt0VcA11jbvqpLXGKqBPQ08QQDsngYbj5Y/6tAe 9x3AZZeRwssY5kHQLO9GNNyJqxFIRLII3gNJx0C9i1qVSCeJf+pZpwYx5Dx/LdvBubr6 ukFqfSwLjCvlzQ3b0BmrjSW8XQp9K/qPQKpmQdz2sPe8S4ROnhFDjYUKjpjh+40agFNj Y69zDA7ADnr1+aopBAr0o10dopDyMzP3BdYUsR/31yjQDbQ3/MXpR88ysSe4nm5ReCMc egeg== X-Forwarded-Encrypted: i=1; AJvYcCUHVu0KFQ5PmWhIquS/KJPLaDozkptqBDQfmEyJVxZ97l2CCbuDXOIpwLBwH7AG2iY/RVF0eCfNqO8I5FU=@vger.kernel.org X-Gm-Message-State: AOJu0Yxuhxmt4M7fsbaMu5yUf9vzPxbgnff6Uf3GRmZCJsuf6cvF1pDp XLixcenBy+cRJBuYVARtDeFY/jAG2uvFknWyJzBxEjxzOYoea3nvWlN/PMisd60uLA== X-Gm-Gg: ATEYQzwn2HetBnhLRUjEL4vzwUc5gvX4IvDy/SiasWS4G8AEUPnnUneoDy0nVmssm4T ShpdhfKpxCleGt+pD/XSqwR7lPHddyYTLXmrXiqX60y1ErYNT6rJzWu6FEOOSTqRhgjlfoW074G CCjkyxcx0Ch4isu31tyXmN253U1/GdYSyfMPeQPiC3LVoiKkKuxukyyyev1TEQXcq0DlmESs26i nBb1rQ9IsrICYLp6Oh6aNmN2wWpxxt69xBC/g/Hr1R78e8tV2bwT9YNWIWWLH5wuV8PWXwv8MNE dfyWEs28yy+19QTamkT1CGEMJ1T0YoTgerrIjdMTKNDDt2GDNqJ538ztb3e6pfQvMomvXrNOUzq Z7rJYx9T9e0LywZtCzlL4PMlKyaIds7nbfUnihqj6sARjH1KDpOPdBLpeNlQZ2w9loHLDxYYbQf xFQHJh9MHL46wEJKvK3FaXBNBW+m+6MD/e8EFKhn2q5w+a5LBGoOeqKkDg8lnBuOGc9S6IPLmKa A== X-Received: by 2002:a05:6512:3048:b0:5a1:3fff:5e91 with SMTP id 2adb3069b0e04-5a13fff5ff9mr2566909e87.20.1773068522497; Mon, 09 Mar 2026 08:02:02 -0700 (PDT) Received: from ribalda.c.googlers.com (27.69.88.34.bc.googleusercontent.com. [34.88.69.27]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a13d08cc0dsm2138003e87.80.2026.03.09.08.02.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 08:02:00 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 09 Mar 2026 15:01:56 +0000 Subject: [PATCH 3/3] media: uvcvideo: Allow userspace to increase the meta buffersize 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: <20260309-uvc-metadata-dmabuf-v1-3-fc8b87bd29c5@chromium.org> References: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> In-Reply-To: <20260309-uvc-metadata-dmabuf-v1-0-fc8b87bd29c5@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Yunke Cao , Ricardo Ribalda X-Mailer: b4 0.14.3 Now we have the metadata size hardcoded to 10 KiB, this is a value that works fine for bulk cameras or frames with no extra metadata. But not for all usecases. We have seen some cameras that produce more metadata per frame. Eg: Frame 1 captured (Bytes: 11154) Frame 2 captured (Bytes: 11616) Frame 3 captured (Bytes: 11374) Frame 4 captured (Bytes: 11132) Frame 5 captured (Bytes: 11594) Frame 6 captured (Bytes: 11352) Frame 7 captured (Bytes: 11110) Frame 8 captured (Bytes: 11572) Frame 9 captured (Bytes: 11308) When this happens, the driver (correctly) marks the metadata as ERROR. This patch let userspace set bigger buffersize via S_FMT. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_metadata.c | 9 +++++++-- drivers/media/usb/uvc/uvc_queue.c | 2 +- drivers/media/usb/uvc/uvcvideo.h | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/u= vc_metadata.c index 0a906ae3f971..9de8aba1229e 100644 --- a/drivers/media/usb/uvc/uvc_metadata.c +++ b/drivers/media/usb/uvc/uvc_metadata.c @@ -50,7 +50,7 @@ static int uvc_meta_v4l2_get_format(struct file *file, vo= id *priv, return -EINVAL; =20 fmt->dataformat =3D stream->meta.format; - fmt->buffersize =3D UVC_METADATA_BUF_SIZE; + fmt->buffersize =3D stream->meta.buffersize; =20 return 0; } @@ -63,6 +63,7 @@ static int uvc_meta_v4l2_try_format(struct file *file, vo= id *priv, struct uvc_device *dev =3D stream->dev; struct v4l2_meta_format *fmt =3D &format->fmt.meta; u32 fmeta =3D V4L2_META_FMT_UVC; + u32 buffersize; =20 if (format->type !=3D vfh->vdev->queue->type) return -EINVAL; @@ -74,10 +75,12 @@ static int uvc_meta_v4l2_try_format(struct file *file, = void *priv, } } =20 + buffersize =3D max(UVC_METADATA_BUF_MIN_SIZE, fmt->buffersize); + memset(fmt, 0, sizeof(*fmt)); =20 fmt->dataformat =3D fmeta; - fmt->buffersize =3D UVC_METADATA_BUF_SIZE; + fmt->buffersize =3D buffersize; =20 return 0; } @@ -103,6 +106,7 @@ static int uvc_meta_v4l2_set_format(struct file *file, = void *priv, return -EBUSY; =20 stream->meta.format =3D fmt->dataformat; + stream->meta.buffersize =3D fmt->buffersize; =20 return 0; } @@ -229,6 +233,7 @@ int uvc_meta_register(struct uvc_streaming *stream) struct uvc_video_queue *queue =3D &stream->meta.queue; =20 stream->meta.format =3D V4L2_META_FMT_UVC; + stream->meta.buffersize =3D UVC_METADATA_BUF_MIN_SIZE; =20 return uvc_register_video_device(dev, stream, queue, V4L2_BUF_TYPE_META_CAPTURE, diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_= queue.c index 68ed2883edb2..89206f761006 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -83,7 +83,7 @@ static int uvc_queue_setup(struct vb2_queue *vq, =20 switch (vq->type) { case V4L2_BUF_TYPE_META_CAPTURE: - size =3D UVC_METADATA_BUF_SIZE; + size =3D stream->meta.buffersize; break; =20 default: diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 9b4849fda12f..5ba698d2a23d 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -409,7 +409,7 @@ struct uvc_stats_stream { unsigned int max_sof; /* Maximum STC.SOF value */ }; =20 -#define UVC_METADATA_BUF_SIZE 10240 +#define UVC_METADATA_BUF_MIN_SIZE 10240 =20 /** * struct uvc_copy_op: Context structure to schedule asynchronous memcpy @@ -482,6 +482,7 @@ struct uvc_streaming { struct { struct uvc_video_queue queue; u32 format; + u32 buffersize; } meta; =20 /* Context data used by the bulk completion handler. */ --=20 2.53.0.473.g4a7958ca14-goog