From nobody Mon Feb 9 08:15:36 2026 Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) (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 2AC91230BDB for ; Mon, 3 Mar 2025 19:13:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029225; cv=none; b=E8VSNMizJhT6S6hvebI9W4IcRubo09kWt4sOg+TH9qE8cC4o7iocFGb9PgRi9c1+QU/4S5t5JP9mi6q1nJkZcyxurCEyrVbfYjIz2LfU/ilt6QS6jL0TYx3sp6xZ7gBWWatg+QuOXCNMsiWjPcdi8FMUHi4/gxHYs3n2eLA3Y0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029225; c=relaxed/simple; bh=qj9XlT1WiKm4AO6hkKE1By7lypenS+uznQVD6sIZ6Fw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QFz42dJboNMBZPg+Jsig21HIpi1UAysBljNYZAYdy6KohNmVm1WuhiMYsTs3VGxnQPaAqgVM07ZgHyOx93kr/zd/rANv1S2NFgxNWM6xx0no9p75+WojeQsHgH+xnHUecEEIwFJ0QYjguMBZSbdiVL00fRSj2oHFosEGr2uismk= 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=UKGaCHCI; arc=none smtp.client-ip=209.85.160.173 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="UKGaCHCI" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-474d11c7f1cso7537591cf.2 for ; Mon, 03 Mar 2025 11:13:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029223; x=1741634023; 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=6MnG0EicLIQ9fYl+R5jdVwfngFFSuuPxJwnjFoj+2kg=; b=UKGaCHCIxdhRTo+gWPJCqO+HG1UY50P+q/gh8jSpXK0yWzP1589Kch8BP3uPUMq391 h9OcKARkjtjRKTqfUI5QQuaKQAZx/odHhz05HtNuAx/Z5USHIyMzJ48Ti2y5QPCix+qc zxngfCf19ednZZCf/SHkA89rQRHzy1mw5C5/k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029223; x=1741634023; 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=6MnG0EicLIQ9fYl+R5jdVwfngFFSuuPxJwnjFoj+2kg=; b=BwKDK7YcN+JFGrndXk73JgIm0rm9MH/AOuwCpgHSX+ry0XYFw3OzV08YMTOEkRD2VP Js1bDtxvmm165RRW7rBwqBf9vFqp1bKhzt4DymZhKlW/Ae37VAcHCJEqpSanc41piZhc 38DfJlemSEvxaj1gFOGP9j4OT8BlffJihnQleaizstx1MDNDZO1No6cO8sR/cdpAhgFb CNdzUM0+uBSIZUMeotWSITkzSRK5m1JzAwkRDw5fQATv0/6nS2bPufLYe28R5jydSblp uAFWUnLxI+8Fqt2kMS1RJKaqvllFuag8Wk8hCsMlA62EkZ9OW4Vu5ie+9wFqQLjaGRbF NwBg== X-Forwarded-Encrypted: i=1; AJvYcCW9idV/dXMdD3WBksy7Uc+sbKqTpoEmATMmrxdFRPqQQV6I/3AaD82UUvm4Z0jVVwC3a9EMLbZ27mOb61I=@vger.kernel.org X-Gm-Message-State: AOJu0YxhtZNWuu53DnxEAU99cNb2R0mBGTWVLePjx/VAVoJQiTfql0hr OV1jey2anp7ls0RzIoZC3Hde3s3G6v7XKAC2zpPG5X8JI8BfiEFa/VBZUSDD89mzIUqh4pFj95D a5A== X-Gm-Gg: ASbGncuSHWmoqfcnnloF4eMQnUiL/mSL7sBP4mXZim0ThORkR3Ya9/Vca9mOyRfrRun 5qnprPcZXIs/uf9Ved4CjJGRDNw3BOVA4xh1yMNyaR9GpE/nVuyXx+yvISpzRzn5dTUtU4Lw4kA zXTWFVm92FyhtXfXmbiRO3KxgXRz42204oQarc/3cU6zhkFtQVs2BlyjODRcexlJWqUpCPsy3ZQ Ad8h24cbTiPw6zuoKE1JQp9uKbm2Wmrj8HH26rIew/P01pguY+9WP0woTk7BMVXdGnMzRvvDWH2 7N205KSfQDF+9tv2G82xEICQWbg/3hPERLISq6rfG5vsjPNgIP0sWXSo6jyMNei1kQZrOOt0lvc y/T/ujNFyhLr+Wio8+P1DEw== X-Google-Smtp-Source: AGHT+IEQGZ29VcDcFbL/MqUTzdoYNbg1Fi5VRhzqMJ4olgsaszoAZ6iyTyqbDbVixb0BJPPsVpFm0A== X-Received: by 2002:ac8:5a95:0:b0:472:28d:62b0 with SMTP id d75a77b69052e-474bc0f4bcdmr250554011cf.41.1741029223076; Mon, 03 Mar 2025 11:13:43 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:42 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:38 +0000 Subject: [PATCH v5 1/5] media: uvcvideo: Keep streaming state in the file handle 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: <20250303-uvc-granpower-ng-v5-1-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Add a variable in the file handle state to figure out if a camera is in the streaming state or not. This variable will be used in the future for power management policies. Now that we are at it, make use of guards to simplify the code. Reviewed-by: Laurent Pinchart Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 18 +++++++++++++----- drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 93c6cdb23881..f9cd6db759c5 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -835,11 +835,18 @@ static int uvc_ioctl_streamon(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret =3D uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (ret) + return ret; =20 - return ret; + handle->is_streaming =3D true; + + return 0; } =20 static int uvc_ioctl_streamoff(struct file *file, void *fh, @@ -851,9 +858,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + uvc_queue_streamoff(&stream->queue, type); - mutex_unlock(&stream->mutex); + handle->is_streaming =3D false; =20 return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 5e388f05f3fc..bc87e1f2c669 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -618,6 +618,7 @@ struct uvc_fh { struct uvc_streaming *stream; enum uvc_handle_state state; unsigned int pending_async_ctrls; + bool is_streaming; }; =20 struct uvc_driver { --=20 2.48.1.711.g2feabab25a-goog From nobody Mon Feb 9 08:15:36 2026 Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) (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 56F29233132 for ; Mon, 3 Mar 2025 19:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029227; cv=none; b=kONA21OSVUlaNfVBOCLN/TutWdMIGWzHU8PPJE61Pf7DuwIMptetpVfcX4/upiSJIBju+97Z0YF9dR0lcKoem8KRg5hCCgUaNUlFNiRwc3vgQLiaB4h4v5HzDv46vLDLoJtCmZmrJcgeCzCPcvt6FGLkeguRJPWJ+reI+3DqTU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029227; c=relaxed/simple; bh=oZxC6dyJCosOIF+mgQG382FfCTLvK7fHEuNpSTlA6/A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CVLOett3/gNaHm+VBS3vx+jbZqs2GeaqqDm/mWF8F/P5tT5JDhk7NhxBxgrvXMGu4g/4xz4O+NZJWvcrk4sn8+G5Czla00AZGfBjajWav/iIx66SB0QQnvKLG0o+TgnFMHQDLGY9gHCsQRhHgXs1R6ix6P73OGFf02F6bS6Ogqk= 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=EWTopqml; arc=none smtp.client-ip=209.85.219.43 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="EWTopqml" Received: by mail-qv1-f43.google.com with SMTP id 6a1803df08f44-6e88983cedaso37546626d6.1 for ; Mon, 03 Mar 2025 11:13:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029224; x=1741634024; 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=lRCIFV1ZgaG5znhFrv01vJjvvWfbVwJPIuxC5a3io7I=; b=EWTopqmlbY9FaKgfpik1ZkCDucRQHrO5KF4yyGERUbhLr3nYCTscIB7JoYL87jL95F 9SsGzrgsudO9rW4sqEXdWEkJ5ue+hUb+LB1+NhymPvBw8psYfyTXBBeKt0cEqWzsUJm8 3WB9GiXVEZXFT8rlK7LXH8kXOgKRpq4NaOPwI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029224; x=1741634024; 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=lRCIFV1ZgaG5znhFrv01vJjvvWfbVwJPIuxC5a3io7I=; b=tdD7ggK71QuliIa08RfuU2HR2VeOsaTuu/0FGrmSNw+s8XcywvBoBtML47hNPWK0WE sOi0T4ZpqfPAbrcjcRqngdk6/jpfVf6/83lqJeSs2mfoUtYTuuhbgy1VjmnREq0j9Jjz eiv5yoUT60TyA7dQ7/GPr+i/B7EBN+iG3TdXvjC646GbhzQeAm7N1Vq+H4pdY4+kPbO+ yiSnvY8Hyjz7yPJS4AQ2YL777matrcQl063InB8XHPP/ALyAa8l6UmEfVzjqwqtHd2Uf 05S2PvYBPAIfkEIy94rYPH7hNPZkN1d85lGWNGL+4ETK9OVhNiUDQgcmwIzQ+HZOhMEy aWBw== X-Forwarded-Encrypted: i=1; AJvYcCUST2ijDspjQEpVTLcMdnQyF7b6yVXAyysAc4C3CXCncvJfMgkKxf0WDXzKFswMLFMWHxI7GNGORtbVgvk=@vger.kernel.org X-Gm-Message-State: AOJu0YxbTGYwVM2jk7D1t5/3Ky0HKTIZtf/D7qdIsENgj0IgPdPMGd5e VrRinzrUn5kzliSqBR6+E8+68wOadXEn0yaT1V8MSflXX6HdJxc4VfTdfqi5AQ== X-Gm-Gg: ASbGncuLm/67ZykFALpV4Tq0nU5ohwiRcjmMdQc23sTLCKQFbwKIVtsXKh7WuNSOG0d 2qni8h7EIKhf3C6iPBOvUOqrK7XmXNYRuVFuuuQA4IylKCTwtPTiOEQlv8OXAbk7Nb9u93bJ2B5 6GePndI41EvPvYp2BtzokS1Uiha8A7hKTubuFsMFarA8tDLl9BJrpnQV3K/7TwOJjD1h2o83Ggz OVxNoP0oMbbaiEv9VhET5ueFjAAkAh9yUSFNGJ/wFsmqBk5sgayFwJ/I+RCyW4DkKc6l/QZXSri aGUtMox4hJcvycLdG5UGwLwDGz9+orFlYrfdOiOfmm6TTnOeEGjLSIKblVUZtu4WM3u4E1b8dVz BVGbOq5E4PPodKlKV7/qWAw== X-Google-Smtp-Source: AGHT+IGgAMhBvpb4nsGeXahyeU7QvHudr2zB0sMWGj7GvAH27b8oGyIO1P2rU2HrJVT6CCDwg9nu2g== X-Received: by 2002:a05:6214:1c0c:b0:6e8:96aa:6034 with SMTP id 6a1803df08f44-6e8a0c888d7mr226692286d6.3.1741029224267; Mon, 03 Mar 2025 11:13:44 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:43 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:39 +0000 Subject: [PATCH v5 2/5] media: uvcvideo: Create uvc_pm_(get|put) functions 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: <20250303-uvc-granpower-ng-v5-2-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Most of the times that we have to call uvc_status_(get|put) we need to call the usb_autopm_ functions. Create a new pair of functions that automate this for us. This simplifies the current code and future PM changes in the driver. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 36 ++++++++++++++++++++++++------------ drivers/media/usb/uvc/uvcvideo.h | 4 ++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index f9cd6db759c5..de1e105f7263 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -26,6 +26,27 @@ =20 #include "uvcvideo.h" =20 +int uvc_pm_get(struct uvc_device *dev) +{ + int ret; + + ret =3D usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret =3D uvc_status_get(dev); + if (ret) + usb_autopm_put_interface(dev->intf); + + return ret; +} + +void uvc_pm_put(struct uvc_device *dev) +{ + uvc_status_put(dev); + usb_autopm_put_interface(dev->intf); +} + static int uvc_acquire_privileges(struct uvc_fh *handle); =20 static int uvc_control_add_xu_mapping(struct uvc_video_chain *chain, @@ -636,20 +657,13 @@ static int uvc_v4l2_open(struct file *file) stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); =20 - ret =3D usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle =3D kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle =3D=3D NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } =20 - ret =3D uvc_status_get(stream->dev); + ret =3D uvc_pm_get(stream->dev); if (ret) { - usb_autopm_put_interface(stream->dev->intf); kfree(handle); return ret; } @@ -684,9 +698,7 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); + uvc_pm_put(stream->dev); return 0; } =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index bc87e1f2c669..fbe3649c7cd6 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -763,6 +763,10 @@ void uvc_status_suspend(struct uvc_device *dev); int uvc_status_get(struct uvc_device *dev); void uvc_status_put(struct uvc_device *dev); =20 +/* PM */ +int uvc_pm_get(struct uvc_device *dev); +void uvc_pm_put(struct uvc_device *dev); + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 --=20 2.48.1.711.g2feabab25a-goog From nobody Mon Feb 9 08:15:36 2026 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (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 DFFE323534E for ; Mon, 3 Mar 2025 19:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029228; cv=none; b=sx18hqJdfXgVUAAkb9N0nbCvy0XRgSpUbo+xtgcoTIqf0Xd+1I1rKsL4/eBj24IRIG5pko7wRniCtRRyoKgrh3QbhC4duSpeT2jrznSW3zOJ4ntuoh9vo+ET3lkdp0evYE8CZroSA3FUPR6Y9xsNx3Bq/rd+XBr3x4ucGHfb+80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029228; c=relaxed/simple; bh=PPWla/2kebrucLkJRseQ3ggOogZO4AGyTq5pphOr1VE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XjR8owa9+mhoZKqFaFz3vZ4uGApKhrPIju7dvPGH2d9tnCMvfnRfO0Uw3d4na3Esr4oIr1eCVDQjUbWUW2sSBUWcPyO3vxpvBwdlpgrKjYj54XDHwY9eftJMWpXPUmqOaKndnVVKAIKKh9keGwXFZ1mv7hFkc0BdfnQu13O4aYY= 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=blSqxnsD; arc=none smtp.client-ip=209.85.160.172 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="blSqxnsD" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-471f88518c8so25160571cf.0 for ; Mon, 03 Mar 2025 11:13:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029226; x=1741634026; 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=o7P1QXq27JNB3kApamJPl6/Zqox7TOiVvRdkffBjGTI=; b=blSqxnsDTBPoxPm+EF3xgFH/IMedaruRmlbUbKgvDT3VejAnIWA/FZ3cU0RQWBT7jf xHlQSvJGyOd1Os20s8/tnvSTidTConl0tqUGmtkXD8Fba/kU8Cp7pCxZGpxZ6KuGiD4F tuAjAo/c4AmDkCqMk3txQuDAWd9D+tPjboirA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029226; x=1741634026; 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=o7P1QXq27JNB3kApamJPl6/Zqox7TOiVvRdkffBjGTI=; b=tuHshZfYn9+pQr2BqBIQYW5l/6ogSW5klixdYeCCT0OPthRyRkuo6TOBoNnhoDs1V6 6EZPcLe5Iy2aJQ38D1c7jM8J/dycmN2FBROWDsfBbgYZ+9uOcXaXiOx3Q7rrUQPWEf5E igDqNZ6nmhIeW2jsZ3XkiCjywCeell1dL4GPh0dhgPXFu+YlBsI2QOM1D99wXcVMAWiJ 8//E3jwY1sA10rcXvKeotVDpXHMfn8x4cRR6bZUgxTgAWR9T3MO/ROl1zGswPmAM4Vgz IkNPvA4KAi9XL+PeLy/1AewUIt64X8HIXXcIIYWjete/nOc7+7dQYp7bLFBHw/JnlTiO GEiA== X-Forwarded-Encrypted: i=1; AJvYcCVDEo37QJWQaz513Cov2ER/Lo1cjyMFf8lzzXye6wNHVevn7h85MesfNuQZojOwbU2SeNPTovWkXue5pt8=@vger.kernel.org X-Gm-Message-State: AOJu0YzN4LrjT1yPr4qe/K6iQsn1pxSVQcmT5V618D2DTweny9+GDKIG 5sMZ8xzQxPOkpOA5yxone0yqHHchPU0ljnh9++iEqGXeJhIsRtPTuErtj8A8ww== X-Gm-Gg: ASbGnct3TNTRMHLxwFPq0Rr6ZAbEm3FLB+iV1r445kvnFoEnzY60grIDz4OOmZSapiZ a4eWE70ixxSNHuBO53f6I0iOv+jT+O3MV63VTFo6v3YSApcLzAUuCUvh61jKTgwxN+AMsdFHwbQ y071gy4U76OcP5JH4tCMhnFt5IwuEV3uUAqTFne0bUWM7FwIGzgqTDfrfMap/32/9I7lFDhHrkf rOQuWWdGa1KfJeXWd2xa6VNN80/pv784iX9LF1BGBYrhQqFDql1jY8D1ZRWVPfCdrEzSdkWCzea 3yQR55Nk4PzK6VNMomzcSouIMloTyYxo879CB5JwGd+GnoAN7c/ryWrPcZ4EIq5sSRNwcaeyvZS p1qY7k5ghgwZ8I5c/YL60UA== X-Google-Smtp-Source: AGHT+IEpNw4RsO+LZoW3IoxCforKe9aJtgSY48ThTpTugK/BWGpZU9TY/rkkvX28MUKTMjrfrVMrTw== X-Received: by 2002:ac8:5852:0:b0:471:fee7:9610 with SMTP id d75a77b69052e-474bc080335mr164587941cf.12.1741029225763; Mon, 03 Mar 2025 11:13:45 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:45 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:40 +0000 Subject: [PATCH v5 3/5] media: uvcvideo: Increase/decrease the PM counter per IOCTL 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: <20250303-uvc-granpower-ng-v5-3-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Now we call uvc_pm_get/put from the device open/close. This low level of granularity might leave the camera powered on in situations where it is not needed. Increase the granularity by increasing and decreasing the Power Management counter per ioctl. There are two special cases where the power management outlives the ioctl: async controls and streamon. Handle those cases as well. In a future patch, we will remove the uvc_pm_get/put from open/close. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 13 +++++++++++-- drivers/media/usb/uvc/uvc_v4l2.c | 23 +++++++++++++++++++++-- drivers/media/usb/uvc/uvcvideo.h | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 4e58476d305e..47188c7f96c7 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1594,12 +1594,15 @@ static void uvc_ctrl_set_handle(struct uvc_fh *hand= le, struct uvc_control *ctrl, =20 if (ctrl->handle) { WARN_ON(!ctrl->handle->pending_async_ctrls); - if (ctrl->handle->pending_async_ctrls) + if (ctrl->handle->pending_async_ctrls) { ctrl->handle->pending_async_ctrls--; + uvc_pm_put(handle->chain->dev); + } } =20 ctrl->handle =3D new_handle; handle->pending_async_ctrls++; + uvc_pm_get(handle->chain->dev); return; } =20 @@ -1611,6 +1614,7 @@ static void uvc_ctrl_set_handle(struct uvc_fh *handle= , struct uvc_control *ctrl, if (WARN_ON(!handle->pending_async_ctrls)) return; handle->pending_async_ctrls--; + uvc_pm_put(handle->chain->dev); } =20 void uvc_ctrl_status_event(struct uvc_video_chain *chain, @@ -2815,6 +2819,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) { struct uvc_entity *entity; + int i; =20 guard(mutex)(&handle->chain->ctrl_mutex); =20 @@ -2829,7 +2834,11 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) } } =20 - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i =3D 0; i < handle->pending_async_ctrls; i++) + uvc_pm_put(handle->stream->dev); } =20 /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index de1e105f7263..1c9ac72be58a 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -691,6 +691,9 @@ static int uvc_v4l2_release(struct file *file) if (uvc_has_privileges(handle)) uvc_queue_release(&stream->queue); =20 + if (handle->is_streaming) + uvc_pm_put(stream->dev); + /* Release the file handle. */ uvc_dismiss_privileges(handle); v4l2_fh_del(&handle->vfh); @@ -857,6 +860,7 @@ static int uvc_ioctl_streamon(struct file *file, void *= fh, return ret; =20 handle->is_streaming =3D true; + uvc_pm_get(stream->dev); =20 return 0; } @@ -873,7 +877,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, guard(mutex)(&stream->mutex); =20 uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming =3D false; + if (handle->is_streaming) { + handle->is_streaming =3D false; + uvc_pm_put(stream->dev); + } =20 return 0; } @@ -1410,6 +1417,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up =3D compat_ptr(arg); long ret; =20 + guard(uvc_pm)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1444,6 +1453,16 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, } #endif =20 +static long uvc_v4l2_video_ioctl2(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle =3D file->private_data; + + guard(uvc_pm)(handle->stream->dev); + + return video_ioctl2(file, cmd, arg); +} + static ssize_t uvc_v4l2_read(struct file *file, char __user *data, size_t count, loff_t *ppos) { @@ -1529,7 +1548,7 @@ const struct v4l2_file_operations uvc_fops =3D { .owner =3D THIS_MODULE, .open =3D uvc_v4l2_open, .release =3D uvc_v4l2_release, - .unlocked_ioctl =3D video_ioctl2, + .unlocked_ioctl =3D uvc_v4l2_video_ioctl2, #ifdef CONFIG_COMPAT .compat_ioctl32 =3D uvc_v4l2_compat_ioctl32, #endif diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index fbe3649c7cd6..eb8e374fa4c5 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -766,6 +766,7 @@ void uvc_status_put(struct uvc_device *dev); /* PM */ int uvc_pm_get(struct uvc_device *dev); void uvc_pm_put(struct uvc_device *dev); +DEFINE_GUARD(uvc_pm, struct uvc_device *, uvc_pm_get(_T), uvc_pm_put(_T)) =20 /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; --=20 2.48.1.711.g2feabab25a-goog From nobody Mon Feb 9 08:15:36 2026 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (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 512C023F294 for ; Mon, 3 Mar 2025 19:13:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029230; cv=none; b=HwQ12z9OoCZrcFtwZ2nJztKmhtqjWsXeda85jIWOG5EEw8AAhEZtYJE5xOc8mvHPf+r22vao4NfQii7bOekJwpeqBeQjz6/hBDpauGjkMuBBVK3tbbZUc4GpscMGmX7lYce6+D4KK34rkzHny0aVa/QxK2eliBxxYCUHMJbD+4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029230; c=relaxed/simple; bh=lPK79adRklZww3Mk0PpdCX4VtxZROHYG8wz1+NxPpgs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l474vsCThNkwdd+kEdbliVLtci0XSacdYkYxLPX/V+he0awGkNGg8u6CjLI77/3fp1gE/g7e39Vts/OGCDIQYt0zeYTaf+kwH+0tVsfVPx6QUO1u1Ir4sCL3Gf8i/zF8DXqnrAphqLRi/THtxivLUwtV27/t7h499zPkvs4G6Mo= 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=n7kUDY+4; arc=none smtp.client-ip=209.85.160.172 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="n7kUDY+4" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-474f8d2f21aso5478811cf.1 for ; Mon, 03 Mar 2025 11:13:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029227; x=1741634027; 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=Ikl6DD5slE5XP2vR++WylhZuHcrlQkez/ZWPWDZyaCY=; b=n7kUDY+4yxo4abB6YEk0kxuWQbtWzhcuZvJeRIQ0cHAIG1kiHz0pTEk9e2/bF3dGtA kDrSV2qa3Pe1F2Bn/X/Ss36s+g+1yfoBkIooZU23YFhNii/MJaU1oDoM9JIYMzFd1MXg BwyPHpCHs9ihnri1i0mucx7SZWxWlF63FgU1U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029227; x=1741634027; 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=Ikl6DD5slE5XP2vR++WylhZuHcrlQkez/ZWPWDZyaCY=; b=ZkzmQDY87SzetkN2CqLUCwPXTAA9heMtU0gXAeXNLIrKO1sO9AELgMBdywIQeFbWyB /ZFsQQa8Qu3JBe+dh9IWr0pMLcSP0BDxwlQmqAHY0qlY2erVtgtWaQbAkecCQ+hlFugu 692+gFiNVrQuucpSwsbTjI78/32GZNxxKojo7X5/tY5MzEpzptdmK49IGavwIyhAzQSG VNU5MhuiQYTyqepdtzRQp+WTVcvpI9SbLbLQnOfCANdY+XpYNCfoZjsmZt9zTVrbIQCW rDbXSAIpXIWxo51aTpTigcI2WB8nxUh/ntbmoFnbq0CFt2IqURBIY1/6AzLePafxm69i DRXg== X-Forwarded-Encrypted: i=1; AJvYcCWrmI4MYsXflrHnPmuA2r7KQV/IWt2+JkedgP0wdliQTiD3+5cAOjdSoJeN8ZL7X5Miyhvjut3OdEDBn9U=@vger.kernel.org X-Gm-Message-State: AOJu0YyIdppr/uISqCNNtmk1yhXP1yVQhgEy2ZJVhy73ANGz0WcvvCc7 0SY/r/v98aMQYWzzTaWOFZ2tSJWQeU1o16wnlA32lEjk6KZH4WpayFyCycy/cA== X-Gm-Gg: ASbGncu0fIlU4Xznm1ruO5uc24MUYcls19QBotl82wND8tcB3D6wS8rOutRr7+gD5T4 BkXSr5McBAxsRJWJDSBruFe/x1Oy/hgLuuha7VJBLdUbdtvxRSwlp4vLSyIDw1pVD7qN1SpnncF EqMrUMDnaLVhLTtuwVRaoqV4y3gyuw4aMLNVkUvjZYrfgeNzS0R4nF+6bAJvZ0NR4ovnM0WBoaU yCotG71isi8VRftNNkAc77BNAbWpA+alphsksMiu+4Xrw6TmzXUypQvTpwg2rW/iN2+dl/ti6W9 Znh2A97Bk03hmqZpvfuEhCQbiRvlw6E2gsraree74LPoXB3+xmet4eYw2AfTvcVUklQb4MU7haG A7PdOBRD+vIZv5O7ksp5d6Q== X-Google-Smtp-Source: AGHT+IFHbTUMUMAOtYe4aIC70aHDkZKC+eDmzTxeiVMALjYKfsCeCsempFPzl8+QoqwoKasS5kDgvQ== X-Received: by 2002:ac8:5d8c:0:b0:474:fbb4:8f7c with SMTP id d75a77b69052e-474fbcc549bmr6415241cf.11.1741029227080; Mon, 03 Mar 2025 11:13:47 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:46 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:41 +0000 Subject: [PATCH v5 4/5] media: uvcvideo: Make power management granular 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: <20250303-uvc-granpower-ng-v5-4-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Now that every ioctl takes care of their power management we can remove the "global" power management. Despite its size, this is a relatively big change. We hope that there are no size effects of it. If there are some specific devices that miss-behave, we can add a small quirk for them. This patch introduces a behavioral change for the uvc "trigger" button. Before the "trigger" button would work as long as userspace has opened /dev/videoX. Now it only works when the camera is actually streaming. We consider that this the most common (if not the only) usecase and therefore we do not think of this as a regression. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1c9ac72be58a..6af93e00b304 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -652,7 +652,6 @@ static int uvc_v4l2_open(struct file *file) { struct uvc_streaming *stream; struct uvc_fh *handle; - int ret =3D 0; =20 stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); @@ -662,12 +661,6 @@ static int uvc_v4l2_open(struct file *file) if (!handle) return -ENOMEM; =20 - ret =3D uvc_pm_get(stream->dev); - if (ret) { - kfree(handle); - return ret; - } - v4l2_fh_init(&handle->vfh, &stream->vdev); v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; @@ -701,7 +694,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_pm_put(stream->dev); return 0; } =20 --=20 2.48.1.711.g2feabab25a-goog From nobody Mon Feb 9 08:15:36 2026 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) (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 075DC23FC68 for ; Mon, 3 Mar 2025 19:13:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029231; cv=none; b=M+BLLuHbxuqn5P/JMQIKirzMpwlECml0Fw2yVkGZpgzwtgNCgVYp6UObz6Yh25I5PfnoP/4A+xRP9xlqhXRijHStXsSO9Kmhn1EI9x8fLZd9W+gT67rNuZOhij4H8ooAqn3nuHx+zEWiSorojrxdk2BYt2DsGmJEVBF3hkD7MV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029231; c=relaxed/simple; bh=HpW9eV+pa9FArjj97V5rJZ74WC3ZIrPxYtpcWzZb9cE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z0+YEIvytHoGvP8fKIc8pJuELdbYNT6I2BbHO3i+r+gcxdLdpYnPE2YQTRb2mYl4jrhQe6bfLUnOOOP/MZj9FyfYmaQdUKx8DBS/mThaV6dHoXSNietEC1DCuBAwrX8Z+oCkTsTwMeWmP8Svc4HKj/QWB5nSGGfyJWekGq2sxcU= 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=mMYFchE8; arc=none smtp.client-ip=209.85.160.178 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="mMYFchE8" Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-4721325e3b5so40906651cf.0 for ; Mon, 03 Mar 2025 11:13:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029229; x=1741634029; 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=90N1gDxhZVWniJnCXj40uTmKdZp7+inJI9RZU73Ve9c=; b=mMYFchE8oRivk/EdkOgYNQW5ZQVaZe+9/F7vCDtPSCScQPUL4DY4ZXzpVk3g9p0nsz FdHlsxP1PHrchLPfqWVcAdLJ28+/gw2fEeJSmoiN2PH6/UHN/SwmcScMUurmy8pySk5i HYMkF2ZFBpIpWlqsD70ycMycpyVYtz5KR3DAI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029229; x=1741634029; 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=90N1gDxhZVWniJnCXj40uTmKdZp7+inJI9RZU73Ve9c=; b=VB6ysgddGqAvM/4NB4tO4Z64oQimAXZydOjLiDAGQW1ogAECHmaRQKJ89bFYjzekHX Qsz0ZpKqtX5gdmDr1OE0odKlF9MpkPnjn63YKxQoyCzh90QoFr19J4cfSm17102/EK/U F9flYr3W9qGOMUrSe0tXIrb33KsX/xKNcP/tFbb3NKa6H2OBW+X2Ke04soXyG/3IIvek 3BDJNWHYZj1lJ58h7qvSbQqd4k4ojj+KBUcL1lVpwqmp6JswJl+V6OB/tGFZRM7Zbl8t pL3ePztWNPcRq7e3vV6okghGDi7O3EGWg89RlRWgCpWLDV/tplfNuiKrwO3PiK5xcX1q xGEw== X-Forwarded-Encrypted: i=1; AJvYcCUHL8v02VERa5jwbb2rC6VfzYifuEJT2mjDLIxYxIaODox3uB4tJHPnkOXm3VWStbaEtY8igJIq80kFS/0=@vger.kernel.org X-Gm-Message-State: AOJu0YyJo9WzrioeKlagqEeT8WbGzyPqk9laIRCmZeKKXEq8ufIfC+t8 zy+RGEkcFc6ZrtGLqHeQ+Aq/qOAqszwF6Aib3BeZ6X0jIMKyAZVU7IClIopAmQ== X-Gm-Gg: ASbGncvB7GWEVSlWpnQWpF1HjdFkkDPmS664B1mvKFXV9hSdpMi9tyagqlOyz1bDm1/ WtiFqaPC2Le+psncQLYZcv+DlPFguUuoAGHg6iJVXd9+Vj/NkuMzNkEMF+NgOU8hZ1a++9N/IBj oBxsEYFqXgAOjpQh1iZTFmzOTNRFSZqM18OjYuYysIXf8MpJ4Wb7CYltmeNfntW355Rbvau4oMD hF7i1w/waFlziIrs/E7Vb2iiXzQmNf26XVFasICF5RysxSAajOOlyOpwFIdIWJeXCkdJBRuB3Qx lQwGzPUWhKz3FUmseAhuiWB8pBAikiT03ms09kuhzspqRr3DfNxEkS8eIqpCkWTf5G0owHsHrlq 8crFTVDkIbfJGAaujsKCezQ== X-Google-Smtp-Source: AGHT+IGnGCMPktiCa57p8eXL0WJuUBj1Dg8JEm5nxeKyFL9/82NaQ4hsJTD+GyZW0TE5wsRVB5/k0A== X-Received: by 2002:ac8:5754:0:b0:474:e756:fd14 with SMTP id d75a77b69052e-474e756fd8fmr65875571cf.42.1741029228978; Mon, 03 Mar 2025 11:13:48 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:48 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:42 +0000 Subject: [PATCH v5 5/5] media: uvcvideo: Do not turn on the camera for some ioctls 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: <20250303-uvc-granpower-ng-v5-5-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 There are some ioctls that do not need to turn on the camera. Do not call uvc_pm_get in those cases. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 6af93e00b304..de8d26164996 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1450,6 +1450,26 @@ static long uvc_v4l2_video_ioctl2(struct file *file, { struct uvc_fh *handle =3D file->private_data; =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); + } + guard(uvc_pm)(handle->stream->dev); =20 return video_ioctl2(file, cmd, arg); --=20 2.48.1.711.g2feabab25a-goog