From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (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 0CD8F17B50A for ; Wed, 28 May 2025 17:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455096; cv=none; b=L3JWz08UU6bRmFhS55oik6xibILYtP+dqRj2x+SnGGgueB/kHDRUWBGw2HRxjgyICOBA59+xaBybFdPSoSlMSSuQugO5+NPp9utPIA+Uu87csuxoSTXsLEUCJZe+ExEihe8dcem0zbGgCptC3gCBCkvbBcnigdxtOxNCNIUijLo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455096; c=relaxed/simple; bh=GiBxw+zm//U/C+YTQyovbdu6MSyJ+bZDAcgLx/2Kbzg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KF7oP80z7de9zfFEdYBriLOnZHuJOTAOyiPoU5SIZxMY9y+ciFsybGp/KVIFMEut5n3a5qo8uyHWKwObt7Ixloe3y5j9lAmmBIJPCI0GVVHDsT2WXeS4DExVngPq+UuyZTf8BhenngRxFBFyRSWttYH6+QElrMU9ygHEY3RTZy4= 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=hEioQEYj; arc=none smtp.client-ip=209.85.167.47 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="hEioQEYj" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-5533303070cso968090e87.2 for ; Wed, 28 May 2025 10:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455093; x=1749059893; 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=B3ix9DwpCMClF3M2JTkGqryLw82zMUUM9JySNSXWuyo=; b=hEioQEYj+rHQRZDZqjzH9Bftp1Av0E/CC5Ab8HjlwowUY6T0Pf78V6LKhtOontDeVT KL1AMkSKCCmuVvk+YyWYLu5d1pPBSSYIiSfqwjqeq/ewfDXnGPYoQah3sh6e3W8YUNcN GsdLtMz46mMay2HfVZn/Go9WPlcfi/bvORwxA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455093; x=1749059893; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B3ix9DwpCMClF3M2JTkGqryLw82zMUUM9JySNSXWuyo=; b=Bil3KI+r0EgEbN+fNdvStVmNLuivd8PaAwSGXAfjl9Wlmm3I5Xguit8DjHQBmZmGS1 cG5JHti344iTcjfE9ZSsuqKNAhVVAupi3w78slVcseq2N1sA3xLj9I3iNAgJEJyFrUe/ oFPrfMhvZyNNudskSPTp40PivPb+G2QbAZv6TVX6HULd8WnrPZSK+Hl7KG89Unl4shHu Qxu1vPkykymkELwYhWBx/QM//xhg5vHsBaQ3ZxIDtwDTlDVvZCL0jrWmrWC+SAS1SHFK /er8vK22Y8vcxKeDlwXRXi/HlmS+q4sg/jZJmdYzfNUXa0ktnRYOxiVMHTGwf1deSazm z7Jw== X-Forwarded-Encrypted: i=1; AJvYcCW/XD3Oow+YHLvXh90rD9VKqbRnpaW5NfKtN1quYK/YC9jMfRt8H4kqnximvQ6RKubZeerdzOETqAGvYtw=@vger.kernel.org X-Gm-Message-State: AOJu0YxUb2y3xeyg8u7lFOU6kOArJoinXjr+r5/1KL2qbUpe/Lj3PY8V +nUaXhCiI8FeENStGulcF88EXkLJBsXAM/RALrmPUkdYM6iPJe+lToeVsQJwZbFPFQ== X-Gm-Gg: ASbGncubM+rtt4h58R0zNxVJkFbTJolFwNMJJziXBg1ec6gjHxz9Ru+R0BHRwHZS7Wo MPinKcVAKDj2BwmlHlr5Flo+dY8DEIGN9geWnS3xMKWgvzVJi7t55nOlkLbYEPePXPPUdDukhnN aZPhFxf2tnz+F6oJnOCRIWR9jN6JkMnjxOjw3BtoExeTe9a/0mwVKdzJSI0u5VPmtGQZV+OStHV NH704V+H0Zfj3CzNiqqiZFFOulYU5mNxsaadg+6sqr8CG8oc/v+ipwxssO+4nAVYfUDnGNRS4d9 Q15dlhE29ok4ZysrlUD5fBxql7IZRL8dR/vXtVQNdI/vzY7xYA8tFTNVeo8TW/OBtxsHV3J0YE2 nJtyfOsRH1JZZqJrd6LRpu0YNUQ== X-Google-Smtp-Source: AGHT+IG8Ik02jUgFA76IfXTO5TiYpbVuuWGX8ycRq2oZO4GvQe/uL9xzy0M7+OF/XwRGSYiVVuG2tA== X-Received: by 2002:a05:6512:31cd:b0:553:34b7:5731 with SMTP id 2adb3069b0e04-55334b7581bmr712001e87.3.1748455093108; Wed, 28 May 2025 10:58:13 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:12 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:57:56 +0000 Subject: [PATCH 1/9] media: uvcvideo: Refactor uvc_queue_streamon 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: <20250528-uvc-grannular-invert-v1-1-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 Do uvc_pm_get before we call uvc_queue_streamon. Although the current code is correct, uvc_ioctl_streamon is allways called after uvc_pm_get, this change makes the code more resiliant to future changes. Suggested-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart Link: https://lore.kernel.org/r/20250509-uvc-followup-v1-2-73bcde30d2b5@chr= omium.org Signed-off-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 668a4e9d772c6d91f045ca75e2744b3a6c69da6b..862b4e34e5b629cf324479a9bb5= 9ebe8784ccd5d 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -853,15 +853,16 @@ static int uvc_ioctl_streamon(struct file *file, void= *fh, if (handle->is_streaming) return 0; =20 - ret =3D uvc_queue_streamon(&stream->queue, type); + ret =3D uvc_pm_get(stream->dev); if (ret) return ret; =20 - ret =3D uvc_pm_get(stream->dev); + ret =3D uvc_queue_streamon(&stream->queue, type); if (ret) { - uvc_queue_streamoff(&stream->queue, type); + uvc_pm_put(stream->dev); return ret; } + handle->is_streaming =3D true; =20 return 0; --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) (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 7C36128B4F0 for ; Wed, 28 May 2025 17:58:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455097; cv=none; b=cYvKf0eMbJgKJFcI8XP1Co1XibhAgaiSEyOLDjf2ZF2tOM8RoRAeWzh5dJTh6dEPAot0oDzOkP1aV7x6vI/RmWe4X3IyJPwUivKEtCPdUOyz0RExTAGUtuV7nlqIvAP/mWefhp2NAzpIT+IEqBGef81Hh4lj933baegv+wRO7wc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455097; c=relaxed/simple; bh=B0jNGSufNvPJuCam1LbtuPADRfe/FotYKW4NrWm/oXQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HFViTSBEEN7W32nQa7Fnb34EB9lFbG0f0gtqDUNoHiX94lZTITRyW6hu7AXdQ0OFQo89qH5q7UBxCX8pZCp5u4bUA7CdGqNk1M1HPc1F1ZWi36CEETr6Ajj4f5jKcSrPY1VSyBcirr/pBM3/kSbn9Q3pbTCMYr6HdMGGvI6t5A8= 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=R4bOeQyY; arc=none smtp.client-ip=209.85.167.53 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="R4bOeQyY" Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-553280c345cso22523e87.0 for ; Wed, 28 May 2025 10:58:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455093; x=1749059893; 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=ZuqigEavLUIFRcdMGWtAXF6BHoROJfpc2OWkY3rCm9o=; b=R4bOeQyYUuNLTp0YCbwEKuNm5OnjTvnhLt1Ql4cgb6qEHX/Ylp4IXy1cnbIZHJg+BE MYz+KRHzxTCSi7bwgaux4QrwcQLw4nJ5S8wuaY4d4AYbPDhFVwhjBEWpBcDbwTiJsMIv F7s+euQi2VxiwIYzGp21+52LWugrbg31D4gDk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455093; x=1749059893; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZuqigEavLUIFRcdMGWtAXF6BHoROJfpc2OWkY3rCm9o=; b=jVOGraIyKKWpWjG6bFZbf9dybnWxdSvjy3PwZAR3x/t3Z+uMwedMvh+CWcYyyB4T/x A8Ngsr8oIK7xHupsqqC6CHZx92hLlC36Ywc68wwP0eJVeLAcMDObJjaIHtoMwpOBxfZE cJnQYobSmoVwBfP6UD0Jhu3fkIGiA5uJe3ZKYIUi7fyj1yqm+DKpWETUsohet0v8rkD6 MoPnZ7auTa8kbqh+FEykoxUM39u4LdcQs2PclF5Uz8mZC/FsDjep8n12dHAzAvt6duYT qDCfpiQGLHqYIK6yWR7/++w/u7L/kPWscaevu3m/gkNH8Z/ROZzsi2kkCi+grQ/jNhxj KcAg== X-Forwarded-Encrypted: i=1; AJvYcCUac52iq4QsBuYEWN1qz7vB5xlggNHUJVsC3O2X6j3Qa4t51/k1lwELlhclsG3HBfciqGsXthF2d4++T2c=@vger.kernel.org X-Gm-Message-State: AOJu0YyKdXv1gPv5rZ2ftKSSKbooUpWVIK0sM6cN+rpWQIjB9o5w7zuP fMF3Gs6H22wHI5u479raEr4puVs/VdcZ6QwJfzZBDGkOQpenQvErAWXv3xG1HlDa9A== X-Gm-Gg: ASbGnct1ek/hu8PNfCF5CxyKNAIdF4pWoI9SWsdFu2tBVUZpZKowwHfKg3yTHmCOXbS xRVJmAyL7UExIxporRAdzSSYm1DWYH9E1zRy4tIIMAddsPzkFt1X1Xy4dtQZOaocjEI1cKQOG7g CtSlGxfgMnbEQZQsI3Hrl6MBg6GWKczM2vJvspFu/hMyQPeByvn9evIWRfrxbASIwkiQ8sDhzW6 bYRgSH9U9YGqWeDfrWoTv3wt5tdeLlWUlALlbIJPvxXIZ9PeDOts/1TeSYOShqy+bg8EyuXakrt K+au2WUJkuBrmWQ7/q3c+N3nec7jDTH2OJGFFp0AgoVuJDIsUfwYRBlYGEpiQ4o5aT2tSANxHYp 7XwN1jTo44S7gXH7ddqAUqnD8oQ== X-Google-Smtp-Source: AGHT+IGtfA2QUrrwfNGeJ51zXmyU21n4oPCCQEdOZj56bSgqq99gARUJkrRoMcxAFmVr9Wh8ebDDmg== X-Received: by 2002:a05:6512:3da7:b0:553:2e10:a79e with SMTP id 2adb3069b0e04-5532e10a9ebmr1533023e87.14.1748455093493; Wed, 28 May 2025 10:58:13 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:13 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:57:57 +0000 Subject: [PATCH 2/9] media: uvcvideo: Refactor uvc_v4l2_compat_ioctl32 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: <20250528-uvc-grannular-invert-v1-2-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 Declaring a variable for doing automatic cleanup is not a very common pattern. Replace the cleanup macro with manual cleanup to make the code simpler. Suggested-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart Link: https://lore.kernel.org/r/20250509-uvc-followup-v1-3-73bcde30d2b5@chr= omium.org Signed-off-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 862b4e34e5b629cf324479a9bb59ebe8784ccd5d..1abdf1ea39956bbbadd3f166f37= bdac518068648 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1382,11 +1382,9 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu= _control_query *kp, #define UVCIOC_CTRL_MAP32 _IOWR('u', 0x20, struct uvc_xu_control_mapping32) #define UVCIOC_CTRL_QUERY32 _IOWR('u', 0x21, struct uvc_xu_control_query32) =20 -DEFINE_FREE(uvc_pm_put, struct uvc_device *, if (_T) uvc_pm_put(_T)) static long uvc_v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) { - struct uvc_device *uvc_device __free(uvc_pm_put) =3D NULL; struct uvc_fh *handle =3D file->private_data; union { struct uvc_xu_control_mapping xmap; @@ -1399,38 +1397,38 @@ static long uvc_v4l2_compat_ioctl32(struct file *fi= le, if (ret) return ret; =20 - uvc_device =3D handle->stream->dev; - switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); if (ret) - return ret; + break; ret =3D uvc_ioctl_xu_ctrl_map(handle->chain, &karg.xmap); if (ret) - return ret; + break; ret =3D uvc_v4l2_put_xu_mapping(&karg.xmap, up); if (ret) - return ret; - + break; break; =20 case UVCIOC_CTRL_QUERY32: ret =3D uvc_v4l2_get_xu_query(&karg.xqry, up); if (ret) - return ret; + break; ret =3D uvc_xu_ctrl_query(handle->chain, &karg.xqry); if (ret) - return ret; + break; ret =3D uvc_v4l2_put_xu_query(&karg.xqry, up); if (ret) - return ret; + break; break; =20 default: - return -ENOIOCTLCMD; + ret =3D -ENOIOCTLCMD; + break; } =20 + uvc_pm_put(handle->stream->dev); + return ret; } #endif --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 6DBD628E561 for ; Wed, 28 May 2025 17:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; cv=none; b=PujTInOCA6d8kOF6Z44yupRMD0vRKp8zY5J1I9f1AbYkcT3uU9cjavBRuy5tX9NmjdfTsgdJddyFWuTFqixn+twsjN9xydFWgHlIxuEMB+Gk/UARspqL2xcJ4ChQxSiWhN3oadOSo1ULecAXQkNXRZbt23qMQU6MTAAJqPpOg4s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; c=relaxed/simple; bh=GOnwR2KJtqAeiJqyC79f3wFIo2SjRh/wiltLqAHylcg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SIJnxxtDKlFMMdPare22L7OfS5pE033kgFAo2QQotBxEWrBxhajm1N9VBoHKYMc/DZeJ+mcxlmxM1u1hEyO+VqKqg8XZ4C6QtD7XoqQRQDWRLv4GPXwmyUo6z8MfpQwvW8xg/g/zE/rzYhkA9OJHmaQU9UIMa3ML47pa3WQT9NY= 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=h2Ye3kdL; arc=none smtp.client-ip=209.85.167.48 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="h2Ye3kdL" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-553233211d3so4532570e87.2 for ; Wed, 28 May 2025 10:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455094; x=1749059894; 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=r6ZdFC6Ythz4loEfSX3UpFuPzlbXiWvOPTc7vSzbMBg=; b=h2Ye3kdL1LBa+d3VGn/M+StemtXTdugv48DROSytFM7R9yf0Bjh/MK3alYDVSpGINa h0Wog2+/5NYZRxOYU/XosCkBH9EE+L++TZ52IxOJK8nRldkyKe1x3UFix22lbQL+WDe6 2TeoYfPjQIuj/GExXMiwO1qc5mIolT0rkJJFo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455094; x=1749059894; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=r6ZdFC6Ythz4loEfSX3UpFuPzlbXiWvOPTc7vSzbMBg=; b=UrfyGAF0AIRLF5xZDLOz+jibpY2JNK9d5rLeHSkl5Pqvb/rU/BheE1tLkeK5Z1Fuvl xifQyl0w+wFkmFPsl+a8m2Fl/Dyuna2ULgARE1IN5+CKdoqMEgb+kiv81pKjHveNcOPq iOUpBb9TfewaJ/YwSxt9Wbr7PM4xvRvPi6txGnyLa2+uirIkwfEe6okz8BJbou4ZZVX/ mlNPO/T3vSUxBO0ONP/KUGo46oHqcVVypKdXweRgm6NOagw+cRlLpOXCBybufWMJGLlg 48LbodbhJl+irxQuW1Mv+52zO1lLblNXTscG9ZAbQwiY65fhqNLdtjhGHL1hfEhf4Qx4 96JQ== X-Forwarded-Encrypted: i=1; AJvYcCWLBvuhJM/J7i2twUd7ssYfaBdZTq5maLBulvMHI4haONw5zYjV62FZbewPzqIJ/BwplhgdV7Pfbf+50rE=@vger.kernel.org X-Gm-Message-State: AOJu0YzWEdso+UOmBmCwMJ8OTQwBoUlbgkxn0gdOFR2cYmHNJPoaGS68 WLDLQXylouQWrpozMNon9STMA+nPObkOayfFVs+Q0BNTDNCCyja2euDN3uqZmpSsbQ== X-Gm-Gg: ASbGnctS1LJjCb0CfuJ8J6xTDOYWNJKRVP/YZimpjnciVieBSP0uk9XESXSGBeULyqI HfL3hdx7LdluCBFavwZzxBAV/DvSd+Z5dEk/+WD4BGsO7d84U2e0/kEtkuSmwiSQnv44mA2/Vnf sPhD8pASbtzf4NxX/5z/fOhKBVUx3wM5B/Mw/nbTSq1a/ymuJxBoYFR4vyF1BDa4k++7ThnFk5s Y5gzWHpLs8hahzZyJqDcjwBRK9Pq0Cbyvz/uGqoIKY5AT4xDQhelySDyUkQ1xnpI5JNoQE23aSU 6MwIANDZQgRy3rxlNeaCiIzkGtb+OkM+Txh35GH2d5l9+SieIGqHxrzNtz2iW7POxQyRuAwSFFt D8uZGjNcpb/zor8fTFay4reyjzg== X-Google-Smtp-Source: AGHT+IFwdhuUJxjYc3nOaPs2RVUFqHfbZ+dZLYDziM2t3vXZ14MxYKMFE3UeBWd/ByHWSWGU/BmNQA== X-Received: by 2002:a05:6512:4150:b0:552:20e1:ee25 with SMTP id 2adb3069b0e04-55220e1ef6amr3142014e87.55.1748455094273; Wed, 28 May 2025 10:58:14 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:13 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:57:58 +0000 Subject: [PATCH 3/9] media: uvcvideo: Use vb2 ioctl and fop helpers 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: <20250528-uvc-grannular-invert-v1-3-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , Hans Verkuil , Hans de Goede X-Mailer: b4 0.14.2 From: Hans Verkuil When uvc was written the vb2 ioctl and file operation helpers didn't exist. This patch switches uvc over to those helpers, which removes a lot of boilerplatecode and simplifies VIDIOC_G/S_PRIORITY handling and allows us to drop the 'privileges' scheme, since that's now handled inside the vb2 helpers. This makes it possible for uvc to fix the v4l2-compliance streaming tests: warn: v4l2-test-formats.cpp(1075): Could not set fmt2 This patch introduces a change on behavior on the uvcdriver to be aligned with the rest of the subsystem. Now S_INPUT, S_PARM and S_FORMAT do no gran exclusive ownership of the device. Reviewed-by: Hans de Goede Signed-off-by: Hans Verkuil Co-developed-by: Ricardo Ribalda Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_driver.c | 34 +---- drivers/media/usb/uvc/uvc_metadata.c | 8 +- drivers/media/usb/uvc/uvc_queue.c | 143 -------------------- drivers/media/usb/uvc/uvc_v4l2.c | 251 +++----------------------------= ---- drivers/media/usb/uvc/uvcvideo.h | 37 +----- 5 files changed, 30 insertions(+), 443 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index da24a655ab68cc0957762f2b67387677c22224d1..4eeedab93b90939fc4c925012a1= 8b7d018ade39f 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1725,7 +1725,6 @@ static struct uvc_video_chain *uvc_alloc_chain(struct= uvc_device *dev) INIT_LIST_HEAD(&chain->entities); mutex_init(&chain->ctrl_mutex); chain->dev =3D dev; - v4l2_prio_init(&chain->prio); =20 return chain; } @@ -1958,31 +1957,7 @@ static void uvc_unregister_video(struct uvc_device *= dev) if (!video_is_registered(&stream->vdev)) continue; =20 - /* - * For stream->vdev we follow the same logic as: - * vb2_video_unregister_device(). - */ - - /* 1. Take a reference to vdev */ - get_device(&stream->vdev.dev); - - /* 2. Ensure that no new ioctls can be called. */ - video_unregister_device(&stream->vdev); - - /* 3. Wait for old ioctls to finish. */ - mutex_lock(&stream->mutex); - - /* 4. Stop streaming. */ - uvc_queue_release(&stream->queue); - - mutex_unlock(&stream->mutex); - - put_device(&stream->vdev.dev); - - /* - * For stream->meta.vdev we can directly call: - * vb2_video_unregister_device(). - */ + vb2_video_unregister_device(&stream->vdev); vb2_video_unregister_device(&stream->meta.vdev); =20 /* @@ -2029,7 +2004,8 @@ int uvc_register_video_device(struct uvc_device *dev, vdev->fops =3D fops; vdev->ioctl_ops =3D ioctl_ops; vdev->release =3D uvc_release; - vdev->prio =3D &stream->chain->prio; + vdev->queue =3D &queue->queue; + vdev->lock =3D &queue->mutex; if (type =3D=3D V4L2_BUF_TYPE_VIDEO_OUTPUT) vdev->vfl_dir =3D VFL_DIR_TX; else @@ -2399,8 +2375,8 @@ static int __uvc_resume(struct usb_interface *intf, i= nt reset) if (stream->intf =3D=3D intf) { ret =3D uvc_video_resume(stream, reset); if (ret < 0) - uvc_queue_streamoff(&stream->queue, - stream->queue.queue.type); + vb2_streamoff(&stream->queue.queue, + stream->queue.queue.type); return ret; } } diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/u= vc_metadata.c index 82de7781f5b6b70c5ba16bcba9e0741231231904..d3aab22f91cea21aefc56409924= dfa1451aec914 100644 --- a/drivers/media/usb/uvc/uvc_metadata.c +++ b/drivers/media/usb/uvc/uvc_metadata.c @@ -96,7 +96,7 @@ static int uvc_meta_v4l2_set_format(struct file *file, vo= id *fh, */ mutex_lock(&stream->mutex); =20 - if (uvc_queue_allocated(&stream->queue)) + if (vb2_is_busy(&stream->meta.queue.queue)) ret =3D -EBUSY; else stream->meta.format =3D fmt->dataformat; @@ -164,12 +164,6 @@ int uvc_meta_register(struct uvc_streaming *stream) =20 stream->meta.format =3D V4L2_META_FMT_UVC; =20 - /* - * The video interface queue uses manual locking and thus does not set - * the queue pointer. Set it manually here. - */ - vdev->queue =3D &queue->queue; - return uvc_register_video_device(dev, stream, vdev, queue, V4L2_BUF_TYPE_META_CAPTURE, &uvc_meta_fops, &uvc_meta_ioctl_ops); diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_= queue.c index 2ee142621042167c2587b6a6fdd51c1a46d31c11..72c5494dee9f46ff61072e7d293= bfaddda40e615 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -242,153 +242,10 @@ int uvc_queue_init(struct uvc_video_queue *queue, en= um v4l2_buf_type type) return 0; } =20 -void uvc_queue_release(struct uvc_video_queue *queue) -{ - mutex_lock(&queue->mutex); - vb2_queue_release(&queue->queue); - mutex_unlock(&queue->mutex); -} - -/* -----------------------------------------------------------------------= ------ - * V4L2 queue operations - */ - -int uvc_request_buffers(struct uvc_video_queue *queue, - struct v4l2_requestbuffers *rb) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_reqbufs(&queue->queue, rb); - mutex_unlock(&queue->mutex); - - return ret ? ret : rb->count; -} - -int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *bu= f) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_querybuf(&queue->queue, buf); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_create_buffers(struct uvc_video_queue *queue, - struct v4l2_create_buffers *cb) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_create_bufs(&queue->queue, cb); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_queue_buffer(struct uvc_video_queue *queue, - struct media_device *mdev, struct v4l2_buffer *buf) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_qbuf(&queue->queue, mdev, buf); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_export_buffer(struct uvc_video_queue *queue, - struct v4l2_exportbuffer *exp) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_expbuf(&queue->queue, exp); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_dequeue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *= buf, - int nonblocking) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_dqbuf(&queue->queue, buf, nonblocking); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_queue_streamon(struct uvc_video_queue *queue, enum v4l2_buf_type t= ype) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_streamon(&queue->queue, type); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_queue_streamoff(struct uvc_video_queue *queue, enum v4l2_buf_type = type) -{ - int ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_streamoff(&queue->queue, type); - mutex_unlock(&queue->mutex); - - return ret; -} - -int uvc_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *v= ma) -{ - return vb2_mmap(&queue->queue, vma); -} - -#ifndef CONFIG_MMU -unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue, - unsigned long pgoff) -{ - return vb2_get_unmapped_area(&queue->queue, 0, 0, pgoff, 0); -} -#endif - -__poll_t uvc_queue_poll(struct uvc_video_queue *queue, struct file *file, - poll_table *wait) -{ - __poll_t ret; - - mutex_lock(&queue->mutex); - ret =3D vb2_poll(&queue->queue, file, wait); - mutex_unlock(&queue->mutex); - - return ret; -} - /* -----------------------------------------------------------------------= ------ * */ =20 -/* - * Check if buffers have been allocated. - */ -int uvc_queue_allocated(struct uvc_video_queue *queue) -{ - int allocated; - - mutex_lock(&queue->mutex); - allocated =3D vb2_is_busy(&queue->queue); - mutex_unlock(&queue->mutex); - - return allocated; -} - /* * Cancel the video buffers queue. * diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1abdf1ea39956bbbadd3f166f37bdac518068648..49cc64dd7e2e737f431b9df9df6= 8921d9c543751 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -47,8 +47,6 @@ void uvc_pm_put(struct uvc_device *dev) usb_autopm_put_interface(dev->intf); } =20 -static int uvc_acquire_privileges(struct uvc_fh *handle); - static int uvc_control_add_xu_mapping(struct uvc_video_chain *chain, struct uvc_control_mapping *map, const struct uvc_xu_control_mapping *xmap) @@ -436,10 +434,6 @@ static int uvc_ioctl_s_fmt(struct file *file, void *fh, const struct uvc_frame *frame; int ret; =20 - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - if (fmt->type !=3D stream->type) return -EINVAL; =20 @@ -448,8 +442,7 @@ static int uvc_ioctl_s_fmt(struct file *file, void *fh, return ret; =20 mutex_lock(&stream->mutex); - - if (uvc_queue_allocated(&stream->queue)) { + if (vb2_is_busy(&stream->queue.queue)) { ret =3D -EBUSY; goto done; } @@ -513,10 +506,6 @@ static int uvc_ioctl_s_parm(struct file *file, void *f= h, unsigned int i; int ret; =20 - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - if (parm->type !=3D stream->type) return -EINVAL; =20 @@ -593,63 +582,6 @@ static int uvc_ioctl_s_parm(struct file *file, void *f= h, return 0; } =20 -/* ------------------------------------------------------------------------ - * Privilege management - */ - -/* - * Privilege management is the multiple-open implementation basis. The cur= rent - * implementation is completely transparent for the end-user and doesn't - * require explicit use of the VIDIOC_G_PRIORITY and VIDIOC_S_PRIORITY ioc= tls. - * Those ioctls enable finer control on the device (by making possible for= a - * user to request exclusive access to a device), but are not mature yet. - * Switching to the V4L2 priority mechanism might be considered in the fut= ure - * if this situation changes. - * - * Each open instance of a UVC device can either be in a privileged or - * unprivileged state. Only a single instance can be in a privileged state= at - * a given time. Trying to perform an operation that requires privileges w= ill - * automatically acquire the required privileges if possible, or return -E= BUSY - * otherwise. Privileges are dismissed when closing the instance or when - * freeing the video buffers using VIDIOC_REQBUFS. - * - * Operations that require privileges are: - * - * - VIDIOC_S_INPUT - * - VIDIOC_S_PARM - * - VIDIOC_S_FMT - * - VIDIOC_CREATE_BUFS - * - VIDIOC_REQBUFS - */ -static int uvc_acquire_privileges(struct uvc_fh *handle) -{ - /* Always succeed if the handle is already privileged. */ - if (handle->state =3D=3D UVC_HANDLE_ACTIVE) - return 0; - - /* Check if the device already has a privileged handle. */ - if (atomic_inc_return(&handle->stream->active) !=3D 1) { - atomic_dec(&handle->stream->active); - return -EBUSY; - } - - handle->state =3D UVC_HANDLE_ACTIVE; - return 0; -} - -static void uvc_dismiss_privileges(struct uvc_fh *handle) -{ - if (handle->state =3D=3D UVC_HANDLE_ACTIVE) - atomic_dec(&handle->stream->active); - - handle->state =3D UVC_HANDLE_PASSIVE; -} - -static int uvc_has_privileges(struct uvc_fh *handle) -{ - return handle->state =3D=3D UVC_HANDLE_ACTIVE; -} - /* ------------------------------------------------------------------------ * V4L2 file operations */ @@ -671,7 +603,6 @@ static int uvc_v4l2_open(struct file *file) v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; handle->stream =3D stream; - handle->state =3D UVC_HANDLE_PASSIVE; file->private_data =3D handle; =20 return 0; @@ -686,18 +617,11 @@ static int uvc_v4l2_release(struct file *file) =20 uvc_ctrl_cleanup_fh(handle); =20 - /* Only free resources if this is a privileged handle. */ - if (uvc_has_privileges(handle)) - uvc_queue_release(&stream->queue); - if (handle->is_streaming) uvc_pm_put(stream->dev); =20 /* Release the file handle. */ - uvc_dismiss_privileges(handle); - v4l2_fh_del(&handle->vfh); - v4l2_fh_exit(&handle->vfh); - kfree(handle); + vb2_fop_release(file); file->private_data =3D NULL; =20 return 0; @@ -753,91 +677,6 @@ static int uvc_ioctl_try_fmt(struct file *file, void *= fh, return uvc_v4l2_try_format(stream, fmt, &probe, NULL, NULL); } =20 -static int uvc_ioctl_reqbufs(struct file *file, void *fh, - struct v4l2_requestbuffers *rb) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - - mutex_lock(&stream->mutex); - ret =3D uvc_request_buffers(&stream->queue, rb); - mutex_unlock(&stream->mutex); - if (ret < 0) - return ret; - - if (ret =3D=3D 0) - uvc_dismiss_privileges(handle); - - return 0; -} - -static int uvc_ioctl_querybuf(struct file *file, void *fh, - struct v4l2_buffer *buf) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - if (!uvc_has_privileges(handle)) - return -EBUSY; - - return uvc_query_buffer(&stream->queue, buf); -} - -static int uvc_ioctl_qbuf(struct file *file, void *fh, struct v4l2_buffer = *buf) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - if (!uvc_has_privileges(handle)) - return -EBUSY; - - return uvc_queue_buffer(&stream->queue, - stream->vdev.v4l2_dev->mdev, buf); -} - -static int uvc_ioctl_expbuf(struct file *file, void *fh, - struct v4l2_exportbuffer *exp) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - if (!uvc_has_privileges(handle)) - return -EBUSY; - - return uvc_export_buffer(&stream->queue, exp); -} - -static int uvc_ioctl_dqbuf(struct file *file, void *fh, struct v4l2_buffer= *buf) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - if (!uvc_has_privileges(handle)) - return -EBUSY; - - return uvc_dequeue_buffer(&stream->queue, buf, - file->f_flags & O_NONBLOCK); -} - -static int uvc_ioctl_create_bufs(struct file *file, void *fh, - struct v4l2_create_buffers *cb) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - - return uvc_create_buffers(&stream->queue, cb); -} - static int uvc_ioctl_streamon(struct file *file, void *fh, enum v4l2_buf_type type) { @@ -845,11 +684,6 @@ static int uvc_ioctl_streamon(struct file *file, void = *fh, struct uvc_streaming *stream =3D handle->stream; int ret; =20 - if (!uvc_has_privileges(handle)) - return -EBUSY; - - guard(mutex)(&stream->mutex); - if (handle->is_streaming) return 0; =20 @@ -857,7 +691,7 @@ static int uvc_ioctl_streamon(struct file *file, void *= fh, if (ret) return ret; =20 - ret =3D uvc_queue_streamon(&stream->queue, type); + ret =3D vb2_ioctl_streamon(file, fh, type); if (ret) { uvc_pm_put(stream->dev); return ret; @@ -873,13 +707,12 @@ static int uvc_ioctl_streamoff(struct file *file, voi= d *fh, { struct uvc_fh *handle =3D fh; struct uvc_streaming *stream =3D handle->stream; + int ret; =20 - if (!uvc_has_privileges(handle)) - return -EBUSY; - - guard(mutex)(&stream->mutex); + ret =3D vb2_ioctl_streamoff(file, fh, type); + if (ret) + return ret; =20 - uvc_queue_streamoff(&stream->queue, type); if (handle->is_streaming) { handle->is_streaming =3D false; uvc_pm_put(stream->dev); @@ -962,13 +795,13 @@ static int uvc_ioctl_g_input(struct file *file, void = *fh, unsigned int *input) static int uvc_ioctl_s_input(struct file *file, void *fh, unsigned int inp= ut) { struct uvc_fh *handle =3D fh; + struct uvc_streaming *stream =3D handle->stream; struct uvc_video_chain *chain =3D handle->chain; u8 *buf; int ret; =20 - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; + if (vb2_is_busy(&stream->queue.queue)) + return -EBUSY; =20 if (chain->selector =3D=3D NULL || (chain->dev->quirks & UVC_QUIRK_IGNORE_SELECTOR_UNIT)) { @@ -1469,50 +1302,6 @@ static long uvc_v4l2_unlocked_ioctl(struct file *fil= e, return ret; } =20 -static ssize_t uvc_v4l2_read(struct file *file, char __user *data, - size_t count, loff_t *ppos) -{ - struct uvc_fh *handle =3D file->private_data; - struct uvc_streaming *stream =3D handle->stream; - - uvc_dbg(stream->dev, CALLS, "%s: not implemented\n", __func__); - return -EINVAL; -} - -static int uvc_v4l2_mmap(struct file *file, struct vm_area_struct *vma) -{ - struct uvc_fh *handle =3D file->private_data; - struct uvc_streaming *stream =3D handle->stream; - - uvc_dbg(stream->dev, CALLS, "%s\n", __func__); - - return uvc_queue_mmap(&stream->queue, vma); -} - -static __poll_t uvc_v4l2_poll(struct file *file, poll_table *wait) -{ - struct uvc_fh *handle =3D file->private_data; - struct uvc_streaming *stream =3D handle->stream; - - uvc_dbg(stream->dev, CALLS, "%s\n", __func__); - - return uvc_queue_poll(&stream->queue, file, wait); -} - -#ifndef CONFIG_MMU -static unsigned long uvc_v4l2_get_unmapped_area(struct file *file, - unsigned long addr, unsigned long len, unsigned long pgoff, - unsigned long flags) -{ - struct uvc_fh *handle =3D file->private_data; - struct uvc_streaming *stream =3D handle->stream; - - uvc_dbg(stream->dev, CALLS, "%s\n", __func__); - - return uvc_queue_get_unmapped_area(&stream->queue, pgoff); -} -#endif - const struct v4l2_ioctl_ops uvc_ioctl_ops =3D { .vidioc_g_fmt_vid_cap =3D uvc_ioctl_g_fmt, .vidioc_g_fmt_vid_out =3D uvc_ioctl_g_fmt, @@ -1525,12 +1314,13 @@ const struct v4l2_ioctl_ops uvc_ioctl_ops =3D { .vidioc_enum_fmt_vid_out =3D uvc_ioctl_enum_fmt, .vidioc_try_fmt_vid_cap =3D uvc_ioctl_try_fmt, .vidioc_try_fmt_vid_out =3D uvc_ioctl_try_fmt, - .vidioc_reqbufs =3D uvc_ioctl_reqbufs, - .vidioc_querybuf =3D uvc_ioctl_querybuf, - .vidioc_qbuf =3D uvc_ioctl_qbuf, - .vidioc_expbuf =3D uvc_ioctl_expbuf, - .vidioc_dqbuf =3D uvc_ioctl_dqbuf, - .vidioc_create_bufs =3D uvc_ioctl_create_bufs, + .vidioc_reqbufs =3D vb2_ioctl_reqbufs, + .vidioc_querybuf =3D vb2_ioctl_querybuf, + .vidioc_prepare_buf =3D vb2_ioctl_prepare_buf, + .vidioc_qbuf =3D vb2_ioctl_qbuf, + .vidioc_expbuf =3D vb2_ioctl_expbuf, + .vidioc_dqbuf =3D vb2_ioctl_dqbuf, + .vidioc_create_bufs =3D vb2_ioctl_create_bufs, .vidioc_streamon =3D uvc_ioctl_streamon, .vidioc_streamoff =3D uvc_ioctl_streamoff, .vidioc_enum_input =3D uvc_ioctl_enum_input, @@ -1557,11 +1347,10 @@ const struct v4l2_file_operations uvc_fops =3D { #ifdef CONFIG_COMPAT .compat_ioctl32 =3D uvc_v4l2_compat_ioctl32, #endif - .read =3D uvc_v4l2_read, - .mmap =3D uvc_v4l2_mmap, - .poll =3D uvc_v4l2_poll, + .mmap =3D vb2_fop_mmap, + .poll =3D vb2_fop_poll, #ifndef CONFIG_MMU - .get_unmapped_area =3D uvc_v4l2_get_unmapped_area, + .get_unmapped_area =3D vb2_fop_get_unmapped_area, #endif }; =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index b9f8eb62ba1d82ea7788cf6c10cc838a429dbc9e..3ddbf065a2cbae40ee48cb06f84= ca8f0052990c4 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -326,7 +326,10 @@ struct uvc_buffer { =20 struct uvc_video_queue { struct vb2_queue queue; - struct mutex mutex; /* Protects queue */ + struct mutex mutex; /* + * Serializes vb2_queue and + * fops + */ =20 unsigned int flags; unsigned int buf_used; @@ -349,7 +352,6 @@ struct uvc_video_chain { * uvc_fh.pending_async_ctrls */ =20 - struct v4l2_prio_state prio; /* V4L2 priority state */ u32 caps; /* V4L2 chain-wide caps */ u8 ctrl_class_bitmap; /* Bitmap of valid classes */ }; @@ -619,16 +621,10 @@ struct uvc_device { struct uvc_entity *gpio_unit; }; =20 -enum uvc_handle_state { - UVC_HANDLE_PASSIVE =3D 0, - UVC_HANDLE_ACTIVE =3D 1, -}; - struct uvc_fh { struct v4l2_fh vfh; struct uvc_video_chain *chain; struct uvc_streaming *stream; - enum uvc_handle_state state; unsigned int pending_async_ctrls; bool is_streaming; }; @@ -687,36 +683,11 @@ struct uvc_entity *uvc_entity_by_id(struct uvc_device= *dev, int id); =20 /* Video buffers queue management. */ int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type); -void uvc_queue_release(struct uvc_video_queue *queue); -int uvc_request_buffers(struct uvc_video_queue *queue, - struct v4l2_requestbuffers *rb); -int uvc_query_buffer(struct uvc_video_queue *queue, - struct v4l2_buffer *v4l2_buf); -int uvc_create_buffers(struct uvc_video_queue *queue, - struct v4l2_create_buffers *v4l2_cb); -int uvc_queue_buffer(struct uvc_video_queue *queue, - struct media_device *mdev, - struct v4l2_buffer *v4l2_buf); -int uvc_export_buffer(struct uvc_video_queue *queue, - struct v4l2_exportbuffer *exp); -int uvc_dequeue_buffer(struct uvc_video_queue *queue, - struct v4l2_buffer *v4l2_buf, int nonblocking); -int uvc_queue_streamon(struct uvc_video_queue *queue, enum v4l2_buf_type t= ype); -int uvc_queue_streamoff(struct uvc_video_queue *queue, enum v4l2_buf_type = type); void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect); struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, struct uvc_buffer *buf); struct uvc_buffer *uvc_queue_get_current_buffer(struct uvc_video_queue *qu= eue); void uvc_queue_buffer_release(struct uvc_buffer *buf); -int uvc_queue_mmap(struct uvc_video_queue *queue, - struct vm_area_struct *vma); -__poll_t uvc_queue_poll(struct uvc_video_queue *queue, struct file *file, - poll_table *wait); -#ifndef CONFIG_MMU -unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue, - unsigned long pgoff); -#endif -int uvc_queue_allocated(struct uvc_video_queue *queue); static inline int uvc_queue_streaming(struct uvc_video_queue *queue) { return vb2_is_streaming(&queue->queue); --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (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 ACAB728E570 for ; Wed, 28 May 2025 17:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455099; cv=none; b=e7qefdsgeZvhNBBxIvf6fW1OZRyd2Gh6axHT4CoD8Ou2srKNTwSJoA6iLgPdyc8xmFScFpPBHAHL0fGIeCxeexIJdvXDq0Em4SZxOy0mOxz9IA69c+rGVyeyVU/E3Xa/OaOtPv9tDWqLyQUy9hzxoPb/mXQ6Vx7TksURWxrMuGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455099; c=relaxed/simple; bh=jqykq6B/kJzsStcArhfP2exmz11fn7LB6mdjY5eqB4Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FqlP1+GZqkXaIg3h34dS15O8czQ5kFK3DUtkwua1iYEJvFxyCprVVRCmSWlQOIu2aobV5FoH4ZLccTdHJoAxQsoYMoF8rdMLR+7c1ViqEMJZVl+GLJkqnyTrFdaWSkruwbNG3pZ7iTGPzN/ToL1aiyV8uPeF021ulq07r6iDO4Y= 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=OpB4pEm8; arc=none smtp.client-ip=209.85.167.47 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="OpB4pEm8" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-551fe46934eso152214e87.1 for ; Wed, 28 May 2025 10:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455095; x=1749059895; 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=3TMQfG/b+RrG3RPI5Hk1oXSiQtb/gQB19d4Z/Tsqyas=; b=OpB4pEm8hK6RclpuKqliAbMPbxpm5fWV9gw92ejeV8ZqNPMp5pG6PEU/DJMCrY5xJu V6JQ66cFtGbpeQ6LI7pK2S1QnyC/wv4REc8b72v9dT+K+hkfuMfvZb589TkCFlBVPO62 QS8Jfy4xmxXwkCwUTKWqhImHZOlTwL5JmfE84= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455095; x=1749059895; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3TMQfG/b+RrG3RPI5Hk1oXSiQtb/gQB19d4Z/Tsqyas=; b=kbj1p2hw6jzycHO77Wys8pDVp8N4PEdtWuaTSnSx7b/Qc9d0j0gRaWVn337806U4Cu WyrIN4AgBgV0TsaY06x1rUoQqgaMSXr9qxlVmCe1Oi/4k4Q8XXH6dVkSZyagssfckcsp UKmTJRYxSPDcWfVy+Qmq4NjENzypfeLj+f9N9ww7erS4ZksAhdye12zSrLHBZJQWWTpI TZhluRPPD2Q3QjQf4p0MWMJwemfqA1LxxS0FOpY4VoN8Z4TLBP30o7X0Pe8qNUrF06hc A9FH1ewyLPdEu0GtiiJLhpHUB/wsmXkncdFz1MC+0Sc9jABu2wiU2ZnxXZu6mRSgJ5yq YNSA== X-Forwarded-Encrypted: i=1; AJvYcCUX7mFuuanYp4BOv0oEIVWsLWiflGz2XSqw3HQNtk7bawkwgIiR8+AgBJ7j4uJSW+sckPvHxu1gv29Dt30=@vger.kernel.org X-Gm-Message-State: AOJu0YyaxtPAhvaRO/9HA2GmcJnKlmaW0RucaMoGpi14dE6katDTisvJ Tym06gMY7Jt2taqy3jjeZpYmtc05C0bFR8EIQzwZTLOFUcsLEEaeLqRpaaWMqOdYGg== X-Gm-Gg: ASbGnctIiZVkSE+i+D+BsqrpyZ/R2SQA4WhtVN51WZLas755TtRmYRC3CaPzZjsRd6+ CE5Vza69nmEBTm2okmdSB3uV/VpNr4ulL7XMRYWX6201qhRodmr8/jz0UODNwgxeFpWHhgQb0ve L90SROz7zfrUuCF5jkd5O4PZmsU6YLKBLRF7BSW/+FAu7ERFjXgyZmHoLNea8m3eie0Tmjd0Xxp aDoEQe8VhxTDM70ZJwX0/0cwf9NzQuvP0z09gLNEHMIxfEkzvwwllid3H8cwb0YSc/+MhYfHRTk dd5OOIEXQJ9fvb859TT4j4UZZeoqUVWFmP1XuBr1pc/GD8MQUClmnnxVXGPhHh6MLLoLQjloEe+ 2ZXSXC/H12fUqeqL6NvdGlVj50Q== X-Google-Smtp-Source: AGHT+IHHwo3xql0dM/NDDGD2B5GCCQgwSRpZcvv2I4srv82vxwYj8aiHY3T6f0CcxKjZR6ZAHHBXAg== X-Received: by 2002:a05:6512:1314:b0:552:21db:8f5b with SMTP id 2adb3069b0e04-55335b3239emr194102e87.27.1748455094821; Wed, 28 May 2025 10:58:14 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:14 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:57:59 +0000 Subject: [PATCH 4/9] media: uvcvideo: Remove stream->is_streaming field 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: <20250528-uvc-grannular-invert-v1-4-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The is_streaming field is used by modular PM to know if the device is currently streaming or not. With the transition to vb2 and fop helpers, we can use vb2 functions for the same functionality. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 12 +++++------- drivers/media/usb/uvc/uvcvideo.h | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 49cc64dd7e2e737f431b9df9df68921d9c543751..65c708b3fb1066bf2e8f12ab7cd= f119452ad40f9 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -617,7 +617,8 @@ static int uvc_v4l2_release(struct file *file) =20 uvc_ctrl_cleanup_fh(handle); =20 - if (handle->is_streaming) + if (stream->queue.queue.owner =3D=3D file->private_data && + uvc_queue_streaming(&stream->queue)) uvc_pm_put(stream->dev); =20 /* Release the file handle. */ @@ -684,7 +685,7 @@ static int uvc_ioctl_streamon(struct file *file, void *= fh, struct uvc_streaming *stream =3D handle->stream; int ret; =20 - if (handle->is_streaming) + if (uvc_queue_streaming(&stream->queue)) return 0; =20 ret =3D uvc_pm_get(stream->dev); @@ -697,8 +698,6 @@ static int uvc_ioctl_streamon(struct file *file, void *= fh, return ret; } =20 - handle->is_streaming =3D true; - return 0; } =20 @@ -707,16 +706,15 @@ static int uvc_ioctl_streamoff(struct file *file, voi= d *fh, { struct uvc_fh *handle =3D fh; struct uvc_streaming *stream =3D handle->stream; + bool was_streaming =3D uvc_queue_streaming(&stream->queue); int ret; =20 ret =3D vb2_ioctl_streamoff(file, fh, type); if (ret) return ret; =20 - if (handle->is_streaming) { - handle->is_streaming =3D false; + if (was_streaming) uvc_pm_put(stream->dev); - } =20 return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 3ddbf065a2cbae40ee48cb06f84ca8f0052990c4..f895f690f7cdc1af942d5f3a5f1= 0e9dd1c956a35 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -626,7 +626,6 @@ struct uvc_fh { struct uvc_video_chain *chain; struct uvc_streaming *stream; unsigned int pending_async_ctrls; - bool is_streaming; }; =20 /* ------------------------------------------------------------------------ --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 B977328E5EC for ; Wed, 28 May 2025 17:58:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455099; cv=none; b=shkoupcGTq6MowcJWAxsPsmtXwrescwYTEUqfNpDvSmGOiskEwECCwCz5qbqwbmBoFeWPvnjM15XDMbYNmm6cK0VQAfx2V80ndz464NORC/epnzMpZ9FGF9Q8h0R8GFovhfcucRfyGf2asJm1Yke11B2QJgryAFQdcjG8hM7WqE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455099; c=relaxed/simple; bh=F/97iF/ItJJa7/aRxsY5F4HPpR4b4coIcvx15QKghxg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UZekwpOiAOp/ym+Bq8R956JI8/CtKbPcj7cqQj+kiNDvyuYZS3qu3Z+6gRKhiQpVn14r2FdGQOOlEBfrf8jJZpocP55d4q86HVwiY+1sduZaBAQ4Vvf1zEleWQJofInP3+yZ9kYE59iBG1DuspMw4vdk5/VOlBW1yQrjuhN38l8= 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=fUmqRmHK; arc=none smtp.client-ip=209.85.167.50 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="fUmqRmHK" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-54e7967cf67so26450e87.0 for ; Wed, 28 May 2025 10:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455096; x=1749059896; 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=AvYmz65GXYt3jp4V315G3baP5IGhVnkC1QR+lx5dgJA=; b=fUmqRmHKV2RqCT5o9rbhkOTCf1Re83wlojqzEecc1CfRpccJAPJrbj1t2FiRopbvUh Rhc4WgGGpuzj20SnDHzvSYfks0efHFub5OWsif5yITkDga1NpHWdP/G1+ottLhvxmCL7 PRpIDTWbja+anEHJZFpdRQFfHOxWsg2quxoT8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455096; x=1749059896; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AvYmz65GXYt3jp4V315G3baP5IGhVnkC1QR+lx5dgJA=; b=lZPQopRNhF6tRAmE+eOQ7PvEnGf5JeaiAt5/8tcwWlii0DqMNlRjCmhKP3uR+/SRPs AroXNfKXhuhJ864hqgs5Ea+7PukCdNv5ei2xfe3zSqnT38A0w/14+KkvJ8VFCzXIAa78 3WYttM5xzrzDaLOnCGen/QJKoAZSeqCFQ0xon+zAuIzdUaFgijdeVXHenXaMXZitCUu/ AXIxVp8uQIWX1kRvZWOj8oabtl8wKrxfAkh4bASX/l5m0temmN5hxQEsXEg8dw0exTO0 ztJtyTOWTH/KdVatEPV4IC5ivrVJfAN2oA/qOVb+1I67yZ0kpZaQfs01qCqWkWKyCbSO h/Tg== X-Forwarded-Encrypted: i=1; AJvYcCVyTRQNnED2W2TyHBiOWRE2ldHWry8bqhXGev2BllQOt2E0vYUWBtL5dMCH9QIFa0kYkfp7pkqJQTMY1Vo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9jtn7isIodkD720xckMVcW+y/wwn67Yf12V8EqGc1Fz2xU6Zd iRb0FtTpCWSi/sUKwMDWcncQbPQQeqaxFbULWcO/PSO4We1m91+k641ybXvfyPEwuw== X-Gm-Gg: ASbGncvnJ2aFFwq23DwI4w9Wnz5zI4Reh0N0lbOiyEikxjKwkAvk+X+ZSuPqqfHrYJn apn4eyMYgsN7fpBFSqtcNBl8NGR8xv2fr5ctp+cs3am92qXw1c5H5cHkSn7PD50YpI7rBwxMA0S a16Vtz0yimR/chK6kaVyunZ8Rg+n0AzcNBr8FT6YcqW23pTiNzvYX9JjRgRKvNKmqQiRi68q+8e FAb4qB8/P3hpv2PIzgqgCaa8covuNQtEp4VodSF1+EZB7aiY7rLUpoQBygvZ0jMXuVyzNwlqQJm iIDbGb2nQkbPAWL1bvToQ6AKE6BnqFx8/3maspKBPazNAs6ik95UeTtcVLgNZhMLRnvF6Ic/u60 L9RrguaFf6i0wI+mMAIgooS6o5Q== X-Google-Smtp-Source: AGHT+IFoG83ruA8rtMIVQn+vU7qG8UmWXw9OexU7JHNlvvCvw+i3UNkVyAeah4qU6pfBrGgO8yn+LA== X-Received: by 2002:a05:6512:3b28:b0:553:3492:b717 with SMTP id 2adb3069b0e04-5533492b8ecmr818896e87.51.1748455095737; Wed, 28 May 2025 10:58:15 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:15 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:58:00 +0000 Subject: [PATCH 5/9] media: uvcvideo: Turn on the camera if V4L2_EVENT_SUB_FL_SEND_INITIAL 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: <20250528-uvc-grannular-invert-v1-5-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 If we subscribe to an event with V4L2_EVENT_SUB_FL_SEND_INITIAL, the driver needs to report back some values that require the camera to be powered on. But VIDIOC_SUBSCRIBE_EVENT is not part of the ioctls that turn on the camera. We could unconditionally turn on the camera during VIDIOC_SUBSCRIBE_EVENT, but it is more efficient to turn it on only during V4L2_EVENT_SUB_FL_SEND_INITIAL, which we believe is not a common usecase. Fixes: d1b618e79548 ("media: uvcvideo: Do not turn on the camera for some i= octls") Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_ctrl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 44b6513c526421943bb9841fb53dc5f8e9f93f02..a7b8f3ea01edd8157e0d8cc3635= 1d511225f89d7 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2039,6 +2039,12 @@ static int uvc_ctrl_add_event(struct v4l2_subscribed= _event *sev, unsigned elems) u32 changes =3D V4L2_EVENT_CTRL_CH_FLAGS; s32 val =3D 0; =20 + ret =3D uvc_pm_get(handle->chain->dev); + if (ret) { + list_del(&sev->node); + goto done; + } + if (uvc_ctrl_mapping_is_compound(mapping) || __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) =3D=3D 0) changes |=3D V4L2_EVENT_CTRL_CH_VALUE; @@ -2051,6 +2057,8 @@ static int uvc_ctrl_add_event(struct v4l2_subscribed_= event *sev, unsigned elems) */ sev->elems =3D elems; v4l2_event_queue_fh(sev->fh, &ev); + + uvc_pm_put(handle->chain->dev); } =20 done: --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 4409F28E601 for ; Wed, 28 May 2025 17:58:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; cv=none; b=CkMAOltuaNP/lE2eW8aAxlg3fPBYIhwiUjOZoht4n7QT0iRj3ie9Y0R3izEe2q1RCVyY63vyZp9rdEceymzAfyo2IPNcEj8f47XZ1yINB5A3rXnvdquLKwDz8Ehc/L9bZbePfQyNLZBTwrXE9hyzHQvWvJGHJV1/cRknwylaUkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; c=relaxed/simple; bh=UEBuYkRXWdWQnJ0xRRALcILURlb3/sc/+uI8fqdHllI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lrvomhq1w6dOvoSbpK8byp/LhrmuPVC8O3G81phmLrCNQ9GZ4RGIfP7Uq7GgmabI6rwpP6nHpCWdLeRtkP39hpeQeDze/HtZ/y3E1iFPrW8AhsDOYrUngku+ln/lI2EU0wgYBK+URqDKyXU7i+rvesZ3gI0eYDzg3QcrIBzQdUQ= 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=Ych1TWEw; arc=none smtp.client-ip=209.85.167.48 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="Ych1TWEw" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-54b0d638e86so10207e87.1 for ; Wed, 28 May 2025 10:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455096; x=1749059896; 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=qqqzc4JWCwHMyJVbZCLvTBytETKRAUUhg+vp/MQs9Og=; b=Ych1TWEwiLuwVrBaMS/kWZWEgAvBDX7MI5Ofe0wGT7Ffrvxyl7GGO9XSFQI6C1gHWU Q4DboNV94Tw9qoEfgbHQXN+/jULJ4OGEbo6fl8adoEU5DtWRbJIxV3u569c1JhG7Y7v/ nzbKh+IZ/ZHTmhfSgUOqN5iAei1lH+BUyeiCc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455096; x=1749059896; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qqqzc4JWCwHMyJVbZCLvTBytETKRAUUhg+vp/MQs9Og=; b=nsaznWmWCZgcz8EBQ9OzcXA3k3xSxJ9ABKOeBmC7gsjkj+UkE9GI+ZU6Q+e/9bnJxd yfSj6jfMZMBgZUL7L5sUbPqQbPHD028UfOhBB+p1xYdFZyYsQQJsVdOlUr2sNjetIO9k qqwcCuM0zfLhgMi5pvCKUWGdxHppk4YurGGrsofFt8TQgGumR0gke2kuLMzooJ7HqoBk TQV5ITEK268jq6ShoHIwmIAdqHvxDjs6qxSw+I/RSkUrVL7KBFt9ooy5fReLz1D2ILy8 2mG9hZb5ZXOxyquGDYYKTI4ihKFMOVKL6DMz3VkI+A9afnK3vwFHPUZdpwrCjikwSAOK 0upA== X-Forwarded-Encrypted: i=1; AJvYcCXuNdp6X/7c9H8t7spdsCzCUUxQdgG0Tq3u0VRJrd+jgZ4g75knLYznVqWy35XXi0SQrciMDpzQF9t8nQ0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6yk8ySq/s3aZyDaoCA9SVaPB9P0eVQ7K2bry6zislAatfWxep D7gbaUsGNKOxtpnX+wma2s45lTSTKNIQCzCMy6DbyfgoTGx50b7Y5VMPrImenAEvug== X-Gm-Gg: ASbGnctUUqIiLGIZYxpKgWtU+t1pFtWw4mXbNtuzT+yRU4HYi79xM9PZEW55IleYAXD HYMxyJVgTAKPsfB3dihgozgUQAzPGnB9FpwgJiUH8iB95oif59dLS/lxekbQ+fOxPZuwYu1u/5N tsY7+6ks/caAHEw++zixmZZMveqbzdsp3pdU6DHP3VqRY3a/6yvpARRuOKzvIN2/0/uvrl3w6CZ aJozYNUXAY8i5wV+f4g2yHcqY/xQJhKBQ/ISGhR2O1bb0DJbnnfiWCLolZ4bz+ISf4RlPAuMkct t4KffzNokzLj/mb26D6bEo1IhollSRu1f7VJ5Ie34Y8xK+tA1QUWLmq+pvHD97IfCfIVZ7V3w4Z SoI3cw8nrr8eN8i+4y7G4asPUfQ== X-Google-Smtp-Source: AGHT+IHJoSbZmVCM0+OaR+drNPKZH3L2vkLptaYk24BZYjh1TfGUyjz9xyXLOq0xMcSeyU9sLHySbQ== X-Received: by 2002:a05:6512:2c0a:b0:553:2bdc:e36a with SMTP id 2adb3069b0e04-5532bdce59dmr2042225e87.34.1748455096305; Wed, 28 May 2025 10:58:16 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:15 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:58:01 +0000 Subject: [PATCH 6/9] media: uvcvideo: Do not enable camera during UVCIOC_CTRL_MAP32 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: <20250528-uvc-grannular-invert-v1-6-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The device does not need to be enabled to do this, it is merely an internal data operation. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_v4l2.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 65c708b3fb1066bf2e8f12ab7cdf119452ad40f9..2c6f3cf6bcc3f116bbdb3383d9a= f7d5be9832537 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1224,10 +1224,6 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, void __user *up =3D compat_ptr(arg); long ret; =20 - ret =3D uvc_pm_get(handle->stream->dev); - if (ret) - return ret; - switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1245,7 +1241,13 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, ret =3D uvc_v4l2_get_xu_query(&karg.xqry, up); if (ret) break; + + ret =3D uvc_pm_get(handle->stream->dev); + if (ret) + return ret; ret =3D uvc_xu_ctrl_query(handle->chain, &karg.xqry); + uvc_pm_put(handle->stream->dev); + if (ret) break; ret =3D uvc_v4l2_put_xu_query(&karg.xqry, up); @@ -1258,8 +1260,6 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, break; } =20 - uvc_pm_put(handle->stream->dev); - return ret; } #endif --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 B15AF28E613 for ; Wed, 28 May 2025 17:58:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; cv=none; b=asVNDkk/glwXVl6cAGZHn86VTxqq/FQ2oRt0GlOY0kAdHy49tK6GJR/hw/R2JLKZKy/CY528rCQeZ56hXU1XWjvdIjlqSEUFINCYE5OVCkcG5204Cq0RXFyoy37lMVF/zvZYLexQ++vN+TeO/IZlOyPrJCzoR7fKMZxZO00LnVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455100; c=relaxed/simple; bh=2f6SktVhzvBFpgR1QtGNdHQVCvywmEcSZBqzBzwzFe8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MZSUN7Tr8qJD3FiVUjux/wcPBC2A6f9KzK6HHzsmQFYkbxiSsmkuGfjsVRufzmJWJeU9R+Rc46P3ktDiismJGNyjJ41OighDtQwECxtdKw6qpuZc/D9Fiz8Fxw6mxcr52OkXZLIFKaGnbGfIzq4P5dNg23LF9zqilI2zXM4UVMs= 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=Sw1JDG/i; arc=none smtp.client-ip=209.85.167.48 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="Sw1JDG/i" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-54b09cb06b0so8402e87.1 for ; Wed, 28 May 2025 10:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455097; x=1749059897; 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=KqTrMRI5OIQAm7mZwle2g0uzyDFHgfV3lxxsg/wvy3w=; b=Sw1JDG/iX/na7gkgP396BXwVLHaN9t462D4FFBOK1QFwkQYb5HgGCpj7WObjB2nW26 YvkKPl4rPTDPgoSbhDNbtaFnKYdqiB9sc/Y99+hlh3dQdTsSeLvCZDCHgWfxWIWkZYV8 ZWj2bnZU04ZiGjgblea5eyiVDNWO6F6ppjA7s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455097; x=1749059897; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KqTrMRI5OIQAm7mZwle2g0uzyDFHgfV3lxxsg/wvy3w=; b=dCJz2EGbiieuyQ2lZirUlSM4u8iytjVIBGwQ9Ck3be8+xa+JiJUScIw8YMFsNVhgui UWx2nwJ5y+UpVWTTf+8oFILN/FsX38pCHTT4CJAg+7Flv+G3eIEK7jT5TR8/R/XTAz/K koCLj7lh8NsY3oTll6h7dAd++DI9HLyYVYAfvA3EECqCO+CMkE6EZHRF37FbotFzA/eY PuFIVcHPjDJFmEB2s0AwyOMtA6ZzFouB1U7qMjWzbxt2h/mDXApY3DBQgPQURvl1ANO2 OkNojg0pFtmdR1i3YQ0PweILW4antcxUBZwR4xteiD113NKM9eBfefl+HzFVqPbJYuRL ++Bg== X-Forwarded-Encrypted: i=1; AJvYcCW20PL52lA1v0SO6cHkMMsbEwdwiq/wwqb6AC+3QG3zfGfjbsJ9W1nCNJnRhNtMvqQ/REJ9/vFFVG/o2ws=@vger.kernel.org X-Gm-Message-State: AOJu0Yzgy536z1Ub+n2nPI7mA7HPEOzmRXvQpDc0l3mhuGpoXkxnUvQ9 jQafV3zFepdcztj8TWGDghs8Bp+0pt9fhQiMj5w+zPwXABfC+nqETPdDXKwqFSOe1A== X-Gm-Gg: ASbGnctvTYJMIVODHC4iS+S/gtpM2ovEHQh0EYwWmm7HkdpPSV3/dawgG3YYZ+iwRtB ny+0Anw0qqRFP00Mg0SPpxDlWCbubQFKlFd9RUZlUXQGhVx+UfcT9H4qNX9VzavmBerh8nG5XGd HpXDgezFyLhRiCkul/k6GA9ZMT+KVLKMwDtMI1pfAs/zAONInO3zF9k6D9TWtSLr1JOC9z6Bqkn /VTlsWmAq66Hr7pvrNKGI+4hrCH44ysH/qf8mwXnf/XJ05xYrAb2doJc9OtPQy8JwUySeYhu/Ed 7wFP3ZN7+UOZsBtGvQHoFrUBqTPGn/ubUyN/ANWwiJX2uqUlk4pU6Ijqer66EadMBrP6SKMOft5 EwYaAkbtBcpjHQTE7hiD5Qx1sYQ== X-Google-Smtp-Source: AGHT+IFLbRdcK50b32H+0EevYHhTFLdC4eKjsez3lYSIcEs4Sn6AmtjYSRVxhWJ+sOP5xI2Ue4MToQ== X-Received: by 2002:a05:6512:1112:b0:553:2f4a:7479 with SMTP id 2adb3069b0e04-5532f4a7696mr1156331e87.9.1748455096802; Wed, 28 May 2025 10:58:16 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:16 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:58:02 +0000 Subject: [PATCH 7/9] media: uvcvideo: uvc_v4l2_unlocked_ioctl: Invert PM logic 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: <20250528-uvc-grannular-invert-v1-7-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , Hans Verkuil X-Mailer: b4 0.14.2 Instead of listing the IOCTLs that do not need to turn on the camera, list the IOCTLs that need to turn it on. This makes the code more maintainable. This patch is designed to be a NOP. Non relevant IOCTLs will be removed in future patches. Suggested-by: Hans Verkuil Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 117 +++++++++++++++++++++++++++++++----= ---- 1 file changed, 93 insertions(+), 24 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 2c6f3cf6bcc3f116bbdb3383d9af7d5be9832537..e7373a2ae3c37ca02f907677315= 4901a603820ac 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1264,42 +1264,111 @@ static long uvc_v4l2_compat_ioctl32(struct file *f= ile, } #endif =20 -static long uvc_v4l2_unlocked_ioctl(struct file *file, - unsigned int cmd, unsigned long arg) +static long uvc_v4l2_pm_ioctl(struct file *file, + unsigned int cmd, unsigned long arg) { struct uvc_fh *handle =3D file->private_data; int ret; =20 - /* The following IOCTLs do not need to turn on the camera. */ - switch (cmd) { - case VIDIOC_CREATE_BUFS: - case VIDIOC_DQBUF: - case VIDIOC_ENUM_FMT: - case VIDIOC_ENUM_FRAMEINTERVALS: - case VIDIOC_ENUM_FRAMESIZES: - case VIDIOC_ENUMINPUT: - case VIDIOC_EXPBUF: - case VIDIOC_G_FMT: - case VIDIOC_G_PARM: - case VIDIOC_G_SELECTION: - case VIDIOC_QBUF: - case VIDIOC_QUERYCAP: - case VIDIOC_REQBUFS: - case VIDIOC_SUBSCRIBE_EVENT: - case VIDIOC_UNSUBSCRIBE_EVENT: - return video_ioctl2(file, cmd, arg); - } - ret =3D uvc_pm_get(handle->stream->dev); if (ret) return ret; - ret =3D video_ioctl2(file, cmd, arg); - uvc_pm_put(handle->stream->dev); + return ret; } =20 +static long uvc_v4l2_unlocked_ioctl(struct file *file, + unsigned int cmd, unsigned long arg) +{ + /* + * For now, we do not support granular power saving for compat + * syscalls. + */ + if (in_compat_syscall()) + return uvc_v4l2_pm_ioctl(file, cmd, arg); + + /* The following IOCTLs do need to turn on the camera. */ + switch (cmd) { + case UVCIOC_CTRL_MAP: + case UVCIOC_CTRL_QUERY: + case VIDIOC_CROPCAP: + case VIDIOC_DBG_G_CHIP_INFO: + case VIDIOC_DBG_G_REGISTER: + case VIDIOC_DBG_S_REGISTER: + case VIDIOC_DECODER_CMD: + case VIDIOC_DQEVENT: + case VIDIOC_DV_TIMINGS_CAP: + case VIDIOC_ENCODER_CMD: + case VIDIOC_ENUMAUDIO: + case VIDIOC_ENUMAUDOUT: + case VIDIOC_ENUMOUTPUT: + case VIDIOC_ENUMSTD: + case VIDIOC_ENUM_DV_TIMINGS: + case VIDIOC_ENUM_FREQ_BANDS: + case VIDIOC_G_AUDIO: + case VIDIOC_G_AUDOUT: + case VIDIOC_G_CROP: + case VIDIOC_G_CTRL: + case VIDIOC_G_DV_TIMINGS: + case VIDIOC_G_EDID: + case VIDIOC_G_ENC_INDEX: + case VIDIOC_G_EXT_CTRLS: + case VIDIOC_G_FBUF: + case VIDIOC_G_FREQUENCY: + case VIDIOC_G_INPUT: + case VIDIOC_G_JPEGCOMP: + case VIDIOC_G_MODULATOR: + case VIDIOC_G_OUTPUT: + case VIDIOC_G_PRIORITY: + case VIDIOC_G_SLICED_VBI_CAP: + case VIDIOC_G_STD: + case VIDIOC_G_TUNER: + case VIDIOC_LOG_STATUS: + case VIDIOC_OVERLAY: + case VIDIOC_PREPARE_BUF: + case VIDIOC_QUERYBUF: + case VIDIOC_QUERYCAP: + case VIDIOC_QUERYCTRL: + case VIDIOC_QUERYMENU: + case VIDIOC_QUERYSTD: + case VIDIOC_QUERY_DV_TIMINGS: + case VIDIOC_QUERY_EXT_CTRL: + case VIDIOC_REMOVE_BUFS: + case VIDIOC_STREAMOFF: + case VIDIOC_STREAMON: + case VIDIOC_S_AUDIO: + case VIDIOC_S_AUDOUT: + case VIDIOC_S_CROP: + case VIDIOC_S_CTRL: + case VIDIOC_S_DV_TIMINGS: + case VIDIOC_S_EDID: + case VIDIOC_S_EXT_CTRLS: + case VIDIOC_S_FBUF: + case VIDIOC_S_FMT: + case VIDIOC_S_FREQUENCY: + case VIDIOC_S_HW_FREQ_SEEK: + case VIDIOC_S_INPUT: + case VIDIOC_S_JPEGCOMP: + case VIDIOC_S_MODULATOR: + case VIDIOC_S_OUTPUT: + case VIDIOC_S_PARM: + case VIDIOC_S_PRIORITY: + case VIDIOC_S_SELECTION: + case VIDIOC_S_STD: + case VIDIOC_S_TUNER: + case VIDIOC_TRY_DECODER_CMD: + case VIDIOC_TRY_ENCODER_CMD: + case VIDIOC_TRY_EXT_CTRLS: + case VIDIOC_TRY_FMT: + return uvc_v4l2_pm_ioctl(file, cmd, arg); + } + + /* The other IOCTLs can run with the camera off. */ + return video_ioctl2(file, cmd, arg); +} + const struct v4l2_ioctl_ops uvc_ioctl_ops =3D { .vidioc_g_fmt_vid_cap =3D uvc_ioctl_g_fmt, .vidioc_g_fmt_vid_out =3D uvc_ioctl_g_fmt, --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 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 3951328EA44 for ; Wed, 28 May 2025 17:58:19 +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=1748455101; cv=none; b=WgHodVHJ+EPkFEshXwykrkfgZAsC8gS6vBvdN+3hSQALVyZoolN/Pq0SqBPHC+u472HWxOczdRW1+m7xiiQyFq7i+/RM+xwYW410jUz3/BrRQZvLxGz4KRCHyKfbItrJgOhyWidmRf03RcvQdU8Zcse4x4EBFUlR1QmUGk6/HgQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455101; c=relaxed/simple; bh=HA5ZQn5fQPLOOloa5F6rQaFQ9FTy8GVrXJ6ypXARzQk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GjNgl76thxEr6MQqypogdnASW0sSb5D8H/oTVZOyPit7lwfNt/aNeczi+sHiMNuBJOmMdfVXq22GbOvTLaUUPl2tsaz8l9vmAdvy0JLp8EeAuELshdD+qlvRX5kWmnj6Zh7BAGVabQc94Q36O/JNPR551LgmBOefMv4ejfrq88M= 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=fVxEhKAY; 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="fVxEhKAY" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-553246e975fso25106e87.0 for ; Wed, 28 May 2025 10:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455097; x=1749059897; 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=tCuIJR/iChkHw0yEIzz8Ln6RB6qmCdhlawG29rZoR8U=; b=fVxEhKAYkteC/GmhLOQRS9CdyTGTW7VFyGZ5pGSaPKQBvO83pUc3JAhf6erkAJxYKq pApgD6o10uMLuJ3EJuZiwIqhRcyri0moiUsULKc7waR6VaYzseDI0eV6mA1Iwlcy2iGX UPc+mOZVOz60NuwcvXgtXcipml+gc6442gtCY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455097; x=1749059897; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tCuIJR/iChkHw0yEIzz8Ln6RB6qmCdhlawG29rZoR8U=; b=ioUA1FIQx1tZQwc32OCTR2pDiAa/3d8PvA1yVUiEFan/rCvQvglGDViPPDRX7cuppY P3q3GMTG+aCXnktnxJS4HDD8IwT1aoLXje42i1roUEoBrvRmENS+RFME0ywdhhXbKTcD BTZtgkFzZ7J2UNAgQrXvKq5oNWvdrLU3IwKW0B5RkCL70rG/z5sc1kCfSoZ2ukEN27U9 OZO68w1MN03USeul82UIQCFytPP2DQk9he8i1bAO/Za58L49bq0nFioPqKpARwnytSxK 60f2PARsOv89UMz6y+G5EzsmuzQtiWJOsIXNWKg2PHsBK9yI7ub2SdXFljZQOJ64meqn YhcQ== X-Forwarded-Encrypted: i=1; AJvYcCUjnU2bBTVjXtQqC1cT0l9MvdvLW36vnZ0EHG5LUwXZpFYPOLmSSWLOKnhXGKDM5wrdu0at5haGkuVGZAk=@vger.kernel.org X-Gm-Message-State: AOJu0YyhkDZDHVtaq0B/5vVqMVZY+79ga1BkdZaf4OqFRytA1j22hA/Z aLKIH6QNzKuBPLjRhLcWPgO8czhdUOG67l2OojGna9IGJz/6yAPHbj/AYiArBKcaDw== X-Gm-Gg: ASbGncu1PookgISDNOPA4xQzeSYLj8YwwVg5Pv5LvCsTsmZifnHbWlJEWetXA+OsrhN bz1tQWAEXqvWXtcRxMBPim1O1tGXPhlT17fnxqWRXP4B7ViyVhaxtATUbE3mRNFk7MBspcPBTL0 6EP6btR4fkTffU84OCy5FIZtWu1u6nmqmI64lBPsaRE9JQFgzTmABRxsHmGMeeqpcD9vu1Fua/L 2T6b4esrgl/7sJip8VzZlqVYk6x8k63vhh3FxWGo3MqMAOCYBYXGUSXZW27gaYIdjwXCULVXbHj XKVhlKSsiaQz2nZ1ga62Euk7B7gewIbZrOdfUcL5ioQPjrg8efUbiw48IhenOX3dMg1+BucX629 piS/dX7/Xx2oES8Q/myZURXMwEQ== X-Google-Smtp-Source: AGHT+IEfb/5c0hVCUbJITUofOqtObUG+Si5mZBkEHtSmk+GA/XRbpdGOGTWRjSo++W26qr16iDNv9w== X-Received: by 2002:a05:6512:23aa:b0:553:2480:2309 with SMTP id 2adb3069b0e04-553248024ffmr3984960e87.3.1748455097320; Wed, 28 May 2025 10:58:17 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:16 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:58:03 +0000 Subject: [PATCH 8/9] media: uvcvideo: Do not turn on the camera unless is needed 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: <20250528-uvc-grannular-invert-v1-8-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 There are a lot of IOCTLs that do not need to turn on the camera. Eg: - They only operate to internal data, like UVCIOC_CTRL_MAP. - They are not applicable to the uvc driver, like VIDIOC_G_AUDIO. - They are handled by the uvc framework, like VIDIOC_STREAMON. Remove them from the turn-on list. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 57 ------------------------------------= ---- 1 file changed, 57 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index e7373a2ae3c37ca02f9076773154901a603820ac..fcb1b79c214849ce4da96a86a68= 8d777b32cc688 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1291,75 +1291,18 @@ static long uvc_v4l2_unlocked_ioctl(struct file *fi= le, =20 /* The following IOCTLs do need to turn on the camera. */ switch (cmd) { - case UVCIOC_CTRL_MAP: case UVCIOC_CTRL_QUERY: - case VIDIOC_CROPCAP: - case VIDIOC_DBG_G_CHIP_INFO: - case VIDIOC_DBG_G_REGISTER: - case VIDIOC_DBG_S_REGISTER: - case VIDIOC_DECODER_CMD: - case VIDIOC_DQEVENT: - case VIDIOC_DV_TIMINGS_CAP: - case VIDIOC_ENCODER_CMD: - case VIDIOC_ENUMAUDIO: - case VIDIOC_ENUMAUDOUT: - case VIDIOC_ENUMOUTPUT: - case VIDIOC_ENUMSTD: - case VIDIOC_ENUM_DV_TIMINGS: - case VIDIOC_ENUM_FREQ_BANDS: - case VIDIOC_G_AUDIO: - case VIDIOC_G_AUDOUT: - case VIDIOC_G_CROP: case VIDIOC_G_CTRL: - case VIDIOC_G_DV_TIMINGS: - case VIDIOC_G_EDID: - case VIDIOC_G_ENC_INDEX: case VIDIOC_G_EXT_CTRLS: - case VIDIOC_G_FBUF: - case VIDIOC_G_FREQUENCY: case VIDIOC_G_INPUT: - case VIDIOC_G_JPEGCOMP: - case VIDIOC_G_MODULATOR: - case VIDIOC_G_OUTPUT: - case VIDIOC_G_PRIORITY: - case VIDIOC_G_SLICED_VBI_CAP: - case VIDIOC_G_STD: - case VIDIOC_G_TUNER: - case VIDIOC_LOG_STATUS: - case VIDIOC_OVERLAY: - case VIDIOC_PREPARE_BUF: - case VIDIOC_QUERYBUF: - case VIDIOC_QUERYCAP: case VIDIOC_QUERYCTRL: case VIDIOC_QUERYMENU: - case VIDIOC_QUERYSTD: - case VIDIOC_QUERY_DV_TIMINGS: case VIDIOC_QUERY_EXT_CTRL: - case VIDIOC_REMOVE_BUFS: - case VIDIOC_STREAMOFF: - case VIDIOC_STREAMON: - case VIDIOC_S_AUDIO: - case VIDIOC_S_AUDOUT: - case VIDIOC_S_CROP: case VIDIOC_S_CTRL: - case VIDIOC_S_DV_TIMINGS: - case VIDIOC_S_EDID: case VIDIOC_S_EXT_CTRLS: - case VIDIOC_S_FBUF: case VIDIOC_S_FMT: - case VIDIOC_S_FREQUENCY: - case VIDIOC_S_HW_FREQ_SEEK: case VIDIOC_S_INPUT: - case VIDIOC_S_JPEGCOMP: - case VIDIOC_S_MODULATOR: - case VIDIOC_S_OUTPUT: case VIDIOC_S_PARM: - case VIDIOC_S_PRIORITY: - case VIDIOC_S_SELECTION: - case VIDIOC_S_STD: - case VIDIOC_S_TUNER: - case VIDIOC_TRY_DECODER_CMD: - case VIDIOC_TRY_ENCODER_CMD: case VIDIOC_TRY_EXT_CTRLS: case VIDIOC_TRY_FMT: return uvc_v4l2_pm_ioctl(file, cmd, arg); --=20 2.49.0.1266.g31b7d2e469-goog From nobody Wed Feb 11 05:35:33 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 BCBD128EA63 for ; Wed, 28 May 2025 17:58:19 +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=1748455101; cv=none; b=IZZ+z8sjvuY6kG+6XwuKvwN6HS7QKBfmJgs9aslrWcQlccBeMUD4L176nkDfaQne6JK6kt8MqGaRBFKS6LyrPuv+59Lx049XyLKb7ZvFyc6OmoOqseKYqNBiLu7UfxxU56BCpkAN0oGjYPBBWDODFdOYb9foQaU1SI3tF+Obj/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748455101; c=relaxed/simple; bh=0tY2vHO1hSHETEU5NJ28ZPlV9OSEuEIkkxCtmk8GL9A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PV15SBUfa/8dbgc0unE0b1AzqccrObXxL00T6jNqBsQP5ky+cNoV72pIovhiW5YhYB/H73aMrIVTAYc4d58z54Chgmfx/iWN+kCxl6qcu4RcCmJK50UoCISXZGFN7f1aWACEHwJ5aTkHrfe1o3bSsLBPbDxqMZALZypLt7RVO4o= 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=Dz3ENNmK; 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="Dz3ENNmK" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-54998f865b8so1486e87.3 for ; Wed, 28 May 2025 10:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1748455098; x=1749059898; 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=iGJ1fPweFHWMTsg0HgqwvAn1DtJjgjoW0O70zAHXxoM=; b=Dz3ENNmKoU+mAMXgz8KIWjqTGBN8zmTObQjYBzI21qU84i+VLiF7YKYLToF5nTOjRk VmNnVcYhbjTF9BmG4rtUHxu8vc95ritG9Am2+O8OQp4F28KNENBECNk5oQUZGyk/YEkD Db5pxNDQcgO8wZ+ftDnMw0n+A9J7HswAOqd74= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748455098; x=1749059898; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iGJ1fPweFHWMTsg0HgqwvAn1DtJjgjoW0O70zAHXxoM=; b=ecrDJYSXZX0M3ghPVMIH3ny39YNrlk6djU/121fXm86rasLDyoiVzHe8daCcf0Q5bd 7IbFy9kpmGoDcRsOOb9zVzPKsIVmxRC72vZi9mjpPCcbSWBw9C1fuQMKfdQRChkSJpAO PQllXB4lYeLUVSiWJPCLmDGTeDbmt/YJnotv0vf0TWULTjx6xyqlMH33oUfHcH5bgNxS 9rFiykyxeIpzM7kEwiLimnpHWGKoBN44pXQuUGcZpXCYx4v8IExIsprBrja1Qld1C/am rQPWMFWdm9rorTAfnr21rU+t0NHjZtTw/r2Jjf77+7r5E+aFcjvC4xk3EiwUGKIuguEX lVsw== X-Forwarded-Encrypted: i=1; AJvYcCUQO2podO6KPcy2LOuLv89dB3s39plaRF6n204rZKqHSVpr5nEMeifV/uMfaOdllsxuW3NYgt2469ZZqSo=@vger.kernel.org X-Gm-Message-State: AOJu0Yxkz7wHU9mNnFnT8F0elgV4dPwhTL+cmYsegUqssXuA0wHkvv8m 2DHXXr5YP6IURqXP2h8tXw9Xl0nfSOb9YCnmnREMkT1x9RZuFNLmpnB+fPqvbAhaYg== X-Gm-Gg: ASbGncvI9aFhAQ807Wm4VHTt12Z+2tSCxWzdHuD8z8eA2wCtHThXpNIRCqGopM4fk9Q g+Yn3B3d0+yY2gfGnBK4rPJVsaguzexmL+i/MejYkBraQQhHBlgMn/vNDYY2tzTgL1iEqK0LAkJ Zn9njzkJt2BD02ihWu+EY3iJpEhbH+EpzQXzpU6TSnapCKPb2ojDbItSDJ19HGkaHfUulmqdKqR W/aYEcE431wYBnpZazbFmc0lUqLv/QKTCETwYtKdZlc2tpXmb2xBHe/S4W2HVCPRfmTelA4xNwd 9E3stGVw+PpdAfO6KGwBX0AHzHLhlXOrrkQ9sh7mNHztcjBqzayEu9CTyFmifNGmlkM+yHImFkL P/lbIFo+iigpxwmytWj3zfe5ulw== X-Google-Smtp-Source: AGHT+IHg4uwY5pHE8HQz7g2AWH8xW287i0HnJpxZMDaAgSGjEn7J8TG2eBQXfzqvF/9EN1laDtI8Ew== X-Received: by 2002:a05:6512:2388:b0:553:252f:ade9 with SMTP id 2adb3069b0e04-553252fafc9mr3783218e87.4.1748455097777; Wed, 28 May 2025 10:58:17 -0700 (PDT) Received: from ribalda.c.googlers.com (90.52.88.34.bc.googleusercontent.com. [34.88.52.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a6eesm376805e87.98.2025.05.28.10.58.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 10:58:17 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 28 May 2025 17:58:04 +0000 Subject: [PATCH 9/9] media: uvcvideo: Support granular power saving for compat syscalls 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: <20250528-uvc-grannular-invert-v1-9-d01581f9cc25@chromium.org> References: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> In-Reply-To: <20250528-uvc-grannular-invert-v1-0-d01581f9cc25@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 Right now we cannot support granular power saving on compat syscalls because the VIDIOC_*32 NRs defines are not accessible to drivers. Use the video_translate_cmd() helper to convert the compat syscall NRs into syscall NRs. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 9 ++------- drivers/media/v4l2-core/v4l2-ioctl.c | 3 ++- include/media/v4l2-ioctl.h | 1 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index fcb1b79c214849ce4da96a86a688d777b32cc688..048ee7e01808c8944f9bd46e5df= 2931b9c146ad5 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1282,15 +1282,10 @@ static long uvc_v4l2_pm_ioctl(struct file *file, static long uvc_v4l2_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { - /* - * For now, we do not support granular power saving for compat - * syscalls. - */ - if (in_compat_syscall()) - return uvc_v4l2_pm_ioctl(file, cmd, arg); + unsigned int converted_cmd =3D video_translate_cmd(cmd); =20 /* The following IOCTLs do need to turn on the camera. */ - switch (cmd) { + switch (converted_cmd) { case UVCIOC_CTRL_QUERY: case VIDIOC_G_CTRL: case VIDIOC_G_EXT_CTRLS: diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core= /v4l2-ioctl.c index 650dc1956f73d2f1943b56c42140c7b8d757259f..6fbd28f911cf23eec43ef1adcf6= 4bd46ef067c81 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -3245,7 +3245,7 @@ static int check_array_args(unsigned int cmd, void *p= arg, size_t *array_size, return ret; } =20 -static unsigned int video_translate_cmd(unsigned int cmd) +unsigned int video_translate_cmd(unsigned int cmd) { #if !defined(CONFIG_64BIT) && defined(CONFIG_COMPAT_32BIT_TIME) switch (cmd) { @@ -3266,6 +3266,7 @@ static unsigned int video_translate_cmd(unsigned int = cmd) =20 return cmd; } +EXPORT_SYMBOL(video_translate_cmd); =20 static int video_get_user(void __user *arg, void *parg, unsigned int real_cmd, unsigned int cmd, diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index c6ec87e88dfef9e6cfe1d1fb587c1600882fb14d..437b9f90714c62e0ba434ce4739= 1ef64d88110aa 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h @@ -687,6 +687,7 @@ int v4l2_compat_get_array_args(struct file *file, void = *mbuf, int v4l2_compat_put_array_args(struct file *file, void __user *user_ptr, void *mbuf, size_t array_size, unsigned int cmd, void *arg); +unsigned int video_translate_cmd(unsigned int cmd); =20 /** * typedef v4l2_kioctl - Typedef used to pass an ioctl handler. --=20 2.49.0.1266.g31b7d2e469-goog