From nobody Tue Dec 16 07:13:49 2025 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 E309A1ACED7 for ; Thu, 6 Feb 2025 19:47:03 +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=1738871225; cv=none; b=SUsn5Xzd9mdL6ncv8vUWYJzwTYbrCzRvV4nAoaao3aQNxqPigpPhOLC4y81Avog15tNGAokgmgE9ixk7ydSe1YXDPa0OsLfFMi7Wz9b9MYqS8OaNgYiY4IipanTAeEtUxoMMXX/e6lOAdRLeLm7DTcqiqadXMlj+B5hnUYitvuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871225; c=relaxed/simple; bh=XTNSgJrJEclgdePfJNToDJor8F5x8uBa0UDEkcTlIIQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QeEOJ420Zr61zpvDbz8QDUsnAVd3KS+nSAOpMzyCzEMa3vIPtDtlserDzPtgXg7W7I4EP+mZcFD6YN4lwCC7SWdetH9NDWc2mXtiX/ghe70Z9+tYZ05+zoG59XjibUS6/5Hj8ZTzimJQBlPRyYCXvKBB3AM3mofj3dADqKRXGD0= 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=h9SeFq1g; 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="h9SeFq1g" Received: by mail-qv1-f43.google.com with SMTP id 6a1803df08f44-6e43c9c8d08so9326106d6.3 for ; Thu, 06 Feb 2025 11:47:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871223; x=1739476023; 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=igtmC9jgV1/HQ1d7Wdm7uxza0ZAAjdzHDVgS49iXFC4=; b=h9SeFq1gVmoO0GQdADjV/pVVlR1fiaJUvsL4/RZb8t0sZTgHkzc6e2/54x0I0HOXDu eEDu2oaM453ih79M1zQnoqDJNUJ0ZFbRqpGps7yhm4XucNL5U6qyguH1a8dN133swp/m 0dm7xyseg0gjMBCcuaJ4kqYeXAMXFZVtXuFnk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871223; x=1739476023; 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=igtmC9jgV1/HQ1d7Wdm7uxza0ZAAjdzHDVgS49iXFC4=; b=T75JiMLeeA+Nmaz3GmHD/NrCig/oAhOULib9u49Tmq8xvwRpkgFtw21GJWofvxP81J +EewJsMPmPhOBsuDNvRp+u0lVutdxm352B1ABjFOH9Jw2S9o6zQdEO2wx2ZOfd6E6hdL LWL7s9NaWikj7mxf5d52uROQQqfcq7hZxdWwwntex9zfuDLb1133BDSFJUJ2VxYdev2o yUgiEq43658R7TN/E16AqgLzWx297i+3PaHDEruaiQa1RbDvhdYFsBDbk0hZGWcIl3go iY5IA4HeN0QenNl4/hoEVzxXAmTLvMcG6H9hZb5cxW74FzSxjvS5dCAZfmRkYrZiw421 DMdg== X-Forwarded-Encrypted: i=1; AJvYcCWXK4F6Qk7f7vuHWvp6o8Rg5kQvT0ubds+CZS0FbOrjOKI0BnDm7oVBalR4a/JgGg9f63IfEva9SVzh2FE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5eeHKMII4nojI8TCxQ5ngcqntdDi2NU+F8Ibo6ush3wuI52Zj uY5tpeaYwJWxQognivOE0Lz89ktJP4pwdf4LwPruZ04sH7qvfVtAZVf06txt9Q== X-Gm-Gg: ASbGnctM4YGgO9eQBmKf4fMvPbZaQ7fNiNKoSLsc8X3iquKxUVEldTZ1ov6QNWWmA5E VMe3renZTSs+TePQratJqoGvRXWVoxTwWL0qrMEyNDhOX3k5A3tBlDOPhCAbgPpWrvYKI723SOf 79qo7z4hxoSTftasRscr+hSgFS+jWlqNilCPqmWPwXpMB6e0PrfR1EpB85u6jHAZDqqCBCZFrvS nLS/suqxCX65TNtzizmBS1nFUH08VOfCZYOkJpLAwWf8G0kpHqlYpcpqilPZuhYou1vIq/890hM btwefh1iGyOCZNDLVBguOhxZyK2uyJgfpV0ST2M+NDVldZfuS7ZpDW4CPKyiO6O02A== X-Google-Smtp-Source: AGHT+IF6vyM30lmo4rLzFxc67TuSAmLMTXYr8s3jpkk4a0HE4QMK03rygp5IAu9Su7eRIqG5HefLFQ== X-Received: by 2002:a05:6214:f61:b0:6dd:84b7:dd86 with SMTP id 6a1803df08f44-6e4456eb684mr4186876d6.36.1738871222740; Thu, 06 Feb 2025 11:47:02 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:02 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:00 +0000 Subject: [PATCH v3 1/6] 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: <20250206-uvc-granpower-ng-v3-1-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 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. Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 15 +++++++++++---- drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 93c6cdb23881..856eaa23e703 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -835,11 +835,17 @@ 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) + handle->is_streaming =3D true; =20 return ret; + } =20 static int uvc_ioctl_streamoff(struct file *file, void *fh, @@ -851,9 +857,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.502.g6dc24dfdaf-goog From nobody Tue Dec 16 07:13:49 2025 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 81E7513AD22 for ; Thu, 6 Feb 2025 19:47:04 +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=1738871226; cv=none; b=FZvWd3GiSJT1dvBfkjQcExTmDQLPt/eNJ/oWV7zP0YTGkMLCLKRdQ0+zHY59lFRfLcUv+9G0QqN0yU3sY12QuoHOtPlk/SWnkP7avqBFbCzGhIp96M0Vq8DXmI5vGoP8c/LDrYtmNk3VKG0dtinK5UDfg8i5x0ZU0WST1aq+/Ug= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871226; c=relaxed/simple; bh=mMNoow2UZDhENW+B9WaXhVHze9zEaW5TMByarH1pFXs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RMtzzlw1Whx+mIdkHjrj9VPkx8TZEG8E5SMNbDE/ce5MuFRSIOTBxeIePMoY+eGhM6L4Ao3xpp4wvbam7qLtjie/B9YJe1YuQTJJLTsnykZPKD4Ym0ApnzVPRjXwF4S23z1hBqJ3F8G2bK3AUe5YVjcqtl6D5uP+xAAIwr0VgSY= 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=Yl6iU8qZ; 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="Yl6iU8qZ" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-4679eacf2c5so12751261cf.0 for ; Thu, 06 Feb 2025 11:47:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871223; x=1739476023; 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=Hyffxiv8kaCor5UQiEFydJ9JjxN4h7wLUxKN/7HED+8=; b=Yl6iU8qZjzQXRN0OaKPDn8fKTWN9nJLheQlLvQzK4uEdv/mi7W9KWCH/L/mOI6+Br7 EiTK2t83mzyVfcbZhu8AqxHG66WnNV4desxBY1oXNx2rZ2qf+wOVKEFx5fX4yhfPrzko x8WpWO53+lYNhjC1aW0GI81hkBtHeuBmHxOzA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871223; x=1739476023; 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=Hyffxiv8kaCor5UQiEFydJ9JjxN4h7wLUxKN/7HED+8=; b=NKbgTBUtPw9Zk7L1cCZ5IXjQEB74L4s6Kfqc3Ay5wqXbltKbiccd+uVCJ/FmGv1m3D Ku/HLYkVF7RZLrx9VPxYPX/tRGLSwIbO/C4+8DmTNCfmWcutB+En+VrslLz4lDB9Ejv4 tsaIOzVdV4cOFhmgjrMr5laP2TKQSL4n1vJFKkuY2DcEF8zdYE7x9XZ91BwE7tmOBOmM YYrIySQm2riaZiM/Jihl+/qWeNV7UB1NRcWR2ZXNsS44jXqzkLDvcN9r2tjJDI3HzP6n 2InHv1Nup3/Ov9YUYEWTREldwHNNvKK229+z4eFp1X4nuA11rEYBb7TtD/dVmcVafqqD DTWw== X-Forwarded-Encrypted: i=1; AJvYcCVLVK49XR5KvX24zeiGoQtPnFzREyJLd3UbKeJ+8xsDRhk/XIjCFAafkRcj3yweibMN0x5oZhVQeZPKnTs=@vger.kernel.org X-Gm-Message-State: AOJu0YzNe5YL/3ApXYsxh6ttU14GYWfEHhNjeB40CPoLSu0PodFU0I6i C0S7tfINQCxLDnmnZ4HzF2fWhXn9WCmoZ/jEbpxowvOpDoHeS+EaYxb7O1MHuA== X-Gm-Gg: ASbGnctwstTBzVIEv65XrCyIHs21cDXXXKLhZXa49bXMyMKV6hk+fwa8Y1lI6tLG7O+ 4w5gm3yyUgrFNVn4tle6a7/HjH6KXxipLCzwZr6w3kRkT4YRjDNSATqg5Pmh2GdiygqHGcbSSEZ Q/0u8oBu2dmbkEJ0c2o7xFv3BemW+lvUwwd1e12RKdC4XbJYSoVHCu//axdL+7diCZyZIA3WKdv d2EXTuHjEDUiKFZN+ZXdzkLj4X9UnXZw7YH1+Hn47+Hu7k37gVDZamZcEjWFTf9+q/UWKM+8wct 8UruDCMB0ok8Z/xaooFVtaXHf1UUzBQxe3p6he3Rn/sEWj9ovRStS6k15NOQ8ER4lQ== X-Google-Smtp-Source: AGHT+IEgE+n5v/MPwAYZl4Ef7ywjZ3quxd0ziOMmp4+4iq3xO+MT6vadnlGqhIKHStXrrBpnsY9zPQ== X-Received: by 2002:ad4:5fca:0:b0:6d8:8fdd:9797 with SMTP id 6a1803df08f44-6e445720e48mr4110326d6.36.1738871223447; Thu, 06 Feb 2025 11:47:03 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:03 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:01 +0000 Subject: [PATCH v3 2/6] media: uvcvideo: Move usb_autopm_(get|put)_interface to status_get 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: <20250206-uvc-granpower-ng-v3-2-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 Right now PM operations are always called at the same locations as uvc_status_(get|put). Combine them into uvc_status_(get|put). This simplifies the current code and future PM changes in the driver. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_status.c | 38 +++++++++++++++++++++++++++++++++-= ---- drivers/media/usb/uvc/uvc_v4l2.c | 11 +---------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc= _status.c index ee01dce4b783..caa673b0279d 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -382,7 +382,7 @@ void uvc_status_suspend(struct uvc_device *dev) uvc_status_stop(dev); } =20 -int uvc_status_get(struct uvc_device *dev) +static int _uvc_status_get(struct uvc_device *dev) { int ret; =20 @@ -399,13 +399,41 @@ int uvc_status_get(struct uvc_device *dev) return 0; } =20 -void uvc_status_put(struct uvc_device *dev) +int uvc_status_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; +} + +static int _uvc_status_put(struct uvc_device *dev) { guard(mutex)(&dev->status_lock); =20 if (dev->status_users =3D=3D 1) uvc_status_stop(dev); - WARN_ON(!dev->status_users); - if (dev->status_users) - dev->status_users--; + + if (WARN_ON(!dev->status_users)) + return -EIO; + + dev->status_users--; + return 0; +} + +void uvc_status_put(struct uvc_device *dev) +{ + int ret; + + ret =3D _uvc_status_put(dev); + if (!ret) + usb_autopm_put_interface(dev->intf); } diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 856eaa23e703..5d4e967938af 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -636,20 +636,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); if (ret) { - usb_autopm_put_interface(stream->dev->intf); kfree(handle); return ret; } @@ -685,8 +678,6 @@ static int uvc_v4l2_release(struct file *file) file->private_data =3D NULL; =20 uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); return 0; } =20 --=20 2.48.1.502.g6dc24dfdaf-goog From nobody Tue Dec 16 07:13:49 2025 Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.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 277FF1AAA1D for ; Thu, 6 Feb 2025 19:47:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871227; cv=none; b=JqNr2iV1ojyhimVnq2qldtEZ+XSei5NW74Hg3HDzrpoy6+5G8EmjS/uA+tkyTUoCIh5IQRefDkzocr2wblSIakdhjppu1Y4IBsz9MfgqwPPOt6O892T011t+EDReRTe9IRSuMd6b7DOlVKnAaqMgEowadcXzDjTZvTmcLvges2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871227; c=relaxed/simple; bh=jJOOAqwCsQWSNDiDPF3S2JW8j13hrUZylnSpIecS95c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SYkZO9iI3rBgAOyqe+ohBW/jzHqj1xofVr7Lm9o9KntJ4WlmN0Y3rpVkZfO379zA/IVOWAzYZrtIA0puQM7pGjd4gd9elv9fFRDQVgkdvG8L4rsBn//dSQNppfitoH8Z7SNUVmYZg0t+4CzvrNEbTius4VC1rTmThOSk/aq7+ng= 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=aoMDqbYr; arc=none smtp.client-ip=209.85.219.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="aoMDqbYr" Received: by mail-qv1-f46.google.com with SMTP id 6a1803df08f44-6e442b79de4so4321756d6.2 for ; Thu, 06 Feb 2025 11:47:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871225; x=1739476025; 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=pJ2UjanTBYGPlNg/34ayATbdI98nJQKJ+7M5AzyqOzs=; b=aoMDqbYrxISZtXgIwZND+pzZNBmFFxTU6yUXLxCFs5l/2EDOF0r5qM8zUATyqWk/Zm atgIU3kVB5d9SF3vrasT5d5bhFKmv1V7NaitFVcndw63KUI7ps/VT9RwYq66ijEUtrrg LPrKhfSjKHxcgP1BEAIssxCNPa9B4PurteuME= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871225; x=1739476025; 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=pJ2UjanTBYGPlNg/34ayATbdI98nJQKJ+7M5AzyqOzs=; b=thB0fU8aTKHhezH1J79jh1VvHgN0RjGlixuZniyWVgxzy+SFjESZm68QyxI7gJ4lnG QUn/QKfH0CHsFFLQb/+9NGnnQUsK85VReySdUVzB4NJwhnffVscAgB+++xKp9ONVPeQd 25wfoOX02kmE9xMR3l+TAl1/ppRpRC6T+8XIqAluy2cRCGGiQc+8Is203BlLJ9R+s0Te ebRGxqyhMHsZkUHB0U3K7hd/yJpAgA2yYW6fmwinHSAjLDqyzIyZ7kEJswokt7v3wtU4 oGX8YTPMRuTcRAbQVw8ywlcbFi3eEw4lx5+s/td4hB0Pt0VXZPJURrvrjMzklzyTQI+k emKQ== X-Forwarded-Encrypted: i=1; AJvYcCUD5YJvG5pDsIbMIMCrMIbvvhhBQUH3PPDeBEt5gRqWeHTw5lc00PhXHnceEzaIywLmEU0GMsmz+Xrh0xo=@vger.kernel.org X-Gm-Message-State: AOJu0Yw72QA94VbeJ4p2IvXu8RsyRLHP1yTLd9pVKW+ypV5Fob4w6EOx G3dAw6XtSq7h4z0UwSfPu+700PnZCe9Hl2d+XxOpWFx8Mrce+6Vbk3kxwKldMA== X-Gm-Gg: ASbGnct4DjYutDAwKvClx1/ngj/f7wt0JCMCDtzVyXbGax2Yqz5Nj5fEj6iqValGURr Erid1x1UEi3342e42s3AlswTLAZu6JzmWMFHzJFbLpxUzQIz94gCMcivzlg3BjG6sem3DJFMdAf 38E110qWrxAOZd8KjZQK5oHn+1v8Vl25g1LaoPusoeZOIdCKbWn6VbEu2rNhEdzMQWxuV7w5zJQ JoOYZ76Y8NaXZnlXBFmYc/7fEr8FprtzkXAsKgisSrSE164jxmwFc5sOaakP2BWs1cexLz4eX1q EdH/1Wverd10dO+7GlZLxoekV1waamkld4+rqMA7p3JECcyqbIjmKHVuUQOos28RtA== X-Google-Smtp-Source: AGHT+IFrT6xp6LSUuyg83VdMkSCUqUcLFurxtgJTgy1C4tSJldA04ZFL4Re8s9woc36U2BXKqvrHng== X-Received: by 2002:ad4:576b:0:b0:6e1:afcf:8710 with SMTP id 6a1803df08f44-6e4455c2033mr4894416d6.8.1738871224972; Thu, 06 Feb 2025 11:47:04 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:03 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:02 +0000 Subject: [PATCH v3 3/6] media: uvcvideo: Add a uvc_status guard 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: <20250206-uvc-granpower-ng-v3-3-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 It helps will help will the error handling of PM functions. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvcvideo.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index bc87e1f2c669..be0817da538c 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -763,6 +763,8 @@ 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 +DEFINE_GUARD(uvc_status, struct uvc_device *, uvc_status_get(_T), uvc_stat= us_put(_T)) + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 --=20 2.48.1.502.g6dc24dfdaf-goog From nobody Tue Dec 16 07:13:49 2025 Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.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 EB1031B3940 for ; Thu, 6 Feb 2025 19:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871230; cv=none; b=LMGj7SO6xaARKLFe7sGC+ktbyxCOMw5xL091HWFmnqO6PymteKS/hFvOKPFBtYwAjKG6chohcghRLBcK1Z7itrciBvctN/ekXKj48wArFhutJ9lDTS0S+CccAZ8LvXfJwW/m3eOLOalASYQIPYoKX1WGfP9DTZGX5CkKEONSC2c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871230; c=relaxed/simple; bh=aRKoQkZZYmYD1Sv+2br17G+hh/hc34lUfhzKeuyAwqU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TUsMcrD+8GzK4XgOUq963CUQnIBftDyRFWpp1p0OdtbvKryDFqHfmzPO0ydzpG9958JmvjiLV+NX0w3G6ZTMB+4xQNvLVcDzYMoJlXhLzdurujM+2xZYCm6oqQ2pmHoK/zszvfkxbzDkTG3YpieEsB9MzgEwczF9A7vfmUGwK1g= 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=bPKdJySm; arc=none smtp.client-ip=209.85.219.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="bPKdJySm" Received: by mail-qv1-f47.google.com with SMTP id 6a1803df08f44-6e436c59113so11811286d6.3 for ; Thu, 06 Feb 2025 11:47:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871226; x=1739476026; 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=mLiRmOcwA1idWAVNELvJurrBOZqCiiYJCTe0RaR+hYk=; b=bPKdJySmjgLba6pi2Y44bjZRKMIA1IERZm6UZnGRuEuYChTaP1rUw6eZ4ywtXrnZE7 cxuLetArkAnRgSHOD9EvC9WoNRbNQA35ESm5xTOKsb+CBlb7qk/ynzBI6kFcSTTljFZ6 Jpti3UcdwnggiNiBn9TsTExtWJglEa+K/Y3+A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871226; x=1739476026; 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=mLiRmOcwA1idWAVNELvJurrBOZqCiiYJCTe0RaR+hYk=; b=bQXE7xOXezjhXRpcXYQfPAyfUR1heV3kdoGTa4fP0e/Dx3y4/v/xJ3iUuLxOMLk7xo o1x9msr2ps3Um6UPBcBBYEjhKBugkX7GZx/gQxfQ4ILdGizGBzjHXsrao0Sc1NLnElYd Nk2BgIGMH8ZxyJ4ve20AU2v2KpTeTpcJELkdMPMsdOuo0iiBHIpGnB8VwjuF6caItk++ aGOXqsscRg5LZKpsdYj8YtQKvx9QbYAfA1G5NRzXPL94QeId3/1Efe9Nmd2Jc48KpuGg 9h3Txlmjv2Us34Awkc5uYkJXb3tR/laeKFPmXO7SES0Du14PIb9wIa1AaRqanvde5KdO TdCQ== X-Forwarded-Encrypted: i=1; AJvYcCUiumBoC+wpL4cK/qoUkuTFQ0LsG/wZgYWBoXmnDI2TPEVLZftIVcw/scfZJRu6pzU/IB7OS2FzfMwF63g=@vger.kernel.org X-Gm-Message-State: AOJu0YyY4xmV/ZQatDimFWMSBQdFkBLt+Fr6imgVk2EeGgRm4e7Cli3f SAHz8TsWlOm89AR6Vf4uIAuncJj2DI2lgpRHFP8arvBqwV5pbhgblD3bvomVoA== X-Gm-Gg: ASbGncs3TzCFzrsF2wa2xhzI+cvlKqoe0O3C+A4x0GrP8uD6o9WYbEyeTQ9OwEaKCzQ 8MmefzOsP7TGPV0YDwS3exTQiScHMNFEGa8ZiOP7TlEBKaHlh3r+lFgqYYxa0QJpcb7P6ChaWjP BVYQSvo7TDS4h+ULlMfsSYJE5TlbKfCNErY0/XlvfGt/Vsl0bmBffvrnjo1VGzHz81YuhPdX6ZG 8NeEvl2MVDB4kbExH45xmyihNf2p+GvgZPVS/ZURkm3sTCkqcRfNANbKUViUItCBPCnefxvSjOF Htsnk2yaSNuVtK1gOEDC1JhBsBKqvjNB8/kdwVnXf90EIZf6Qz+lrSziTE1hhQnf6Q== X-Google-Smtp-Source: AGHT+IFFqKBkieX7B5cGuScAV3fcm2qgHZHWhFPwNknUK/MPH4E2HL2JpSlxFJSxjVNCFYakE6XUbA== X-Received: by 2002:a05:6214:5016:b0:6e4:2963:1d8e with SMTP id 6a1803df08f44-6e445702cdfmr3077496d6.35.1738871225814; Thu, 06 Feb 2025 11:47:05 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:05 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:03 +0000 Subject: [PATCH v3 4/6] 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: <20250206-uvc-granpower-ng-v3-4-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 Now we call uvc_status_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_status_get/put from open/close. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 13 +++++++++++-- drivers/media/usb/uvc/uvc_v4l2.c | 26 +++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 4e58476d305e..97c1141a45b3 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_status_put(handle->chain->dev); + } } =20 ctrl->handle =3D new_handle; handle->pending_async_ctrls++; + uvc_status_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_status_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_status_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 5d4e967938af..63d1d06d3ff6 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -670,6 +670,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_status_put(stream->dev); + /* Release the file handle. */ uvc_dismiss_privileges(handle); v4l2_fh_del(&handle->vfh); @@ -832,8 +835,10 @@ static int uvc_ioctl_streamon(struct file *file, void = *fh, return 0; =20 ret =3D uvc_queue_streamon(&stream->queue, type); - if (!ret) + if (!ret) { handle->is_streaming =3D true; + uvc_status_get(stream->dev); + } =20 return ret; =20 @@ -851,7 +856,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_status_put(stream->dev); + } =20 return 0; } @@ -1388,6 +1396,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up =3D compat_ptr(arg); long ret; =20 + guard(uvc_status)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1422,6 +1432,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_status)(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) { @@ -1507,7 +1527,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 --=20 2.48.1.502.g6dc24dfdaf-goog From nobody Tue Dec 16 07:13:49 2025 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.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 2ED041CD205 for ; Thu, 6 Feb 2025 19:47:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871230; cv=none; b=kS7BGsFaZZmztw3+odjES9P9bidpxWJRVlZJoO6+xy/4BWdG7LrYHaazurizTBCib5xrP5YUn1UpkzpNbNUixmMkN3xhyDx3Q7q4zYq+daolhEl/Irt2lh9tPApPp3dVdgCKC1MbWTulO/ci1USD5r5gl3TIUFosp9APXqN+aHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871230; c=relaxed/simple; bh=b6os191LBubYA+XTSlaDJR6i3p2+873ZDu4lZh/isJ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iZp56hbaGrNgT664Lc+IDs+tcL7ACZJPb/8xMgWl6QE+izC9hSkTHVPqRPg3asuBUpcn3Nov19FU8ll4KK1rF8pbOnG0Jdg8GCC5bZp8uzwW45kyIcn69yKwM6YLRbLUs3sg/Y1KB2JlU2/RX05Ahse+5I6hjtaa5F91orRaWbQ= 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=SvwUzSVi; arc=none smtp.client-ip=209.85.219.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="SvwUzSVi" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-6e436c59113so11811736d6.3 for ; Thu, 06 Feb 2025 11:47:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871227; x=1739476027; 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=IX4faMlfOGXjEO5q+yF1g5VR45MAApZ98krsq1hjZdk=; b=SvwUzSVi9OOrFD8ASezwtJxWcRkkTjeSfQeqJNJdLUjGTuNpVAN6qGB2jbV8Dna0Ce hpS0ZYnFmVzVbObgPfIikr/T5Ljk/YcW3gZG/j8IHGMIW0gmrYgh7Rm6pyP+Tzp5HEvv LOVypmADi/oqYuF8AOzPewxHbgKeuEDEw+21k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871227; x=1739476027; 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=IX4faMlfOGXjEO5q+yF1g5VR45MAApZ98krsq1hjZdk=; b=U0P0lS9khxuDY4vsqn7z/zkcz17GCI830wr8cPthmn6sLHUbU23Ljfe1LHbKGhpYYC UKTc0re+30IrBzHVniVakSxC+N65PRadOd1mbKPBJLGU4U90IouUPtfWZ9pJmEdm+n+z A/FlNpscrXVN9L+PFV1aHgZeBLBoEEqdJjLyCF4QQa19RfGXMaIxbzlrlkPHa5gMucOX E8F8QzZCqBLq/XiGS07FQgv3sceOfhPuveegjRwtyIKe+5UlZWi7WtlAat8jYXqZuS4v ErcEVWHi/w9pZYrwfSCL/ZXM7i43MVY77o/Z2U4vORgbNPE4f+0+rB0HWXn2hF/mkqoD ynCQ== X-Forwarded-Encrypted: i=1; AJvYcCU2sm3UmVwCGN1Fbw493y9W9SnFeeeaFNfIglCDMGihUjp8cHpcyGqChUMJO4+8wQXvnuMnzyVOOjBlDi8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywuhw8rayM53HiNNEm5MQBxc4+rZ6mKmC6P1PMlYTXsrSl/Cl27 Jnai17PtqfIxHSTF92rOt3YwIWtgUDEgevrskf0bPBe+uWK+LHgQaxuBjFV9Ow== X-Gm-Gg: ASbGncsyCiV6ZikG8K/8r9FtI2hvJoSHKk7FQPmz6FNCVWTLOE889WsEX8ITsFr97QS 3/g3BtOrNo5Z5Hq/qN/g5EGqaEYIYBMKn/zIcC2dgN2GhZ0K0q61b1ozgQZu0/dfhkeH7xZIsr2 G2jAtiRlwusGx51c3HlWYsuOeDkiuPanN3tZFqMXmSkvxaQOhYkAtJB1WGgwwM3xm57TC4Z84xJ Rj0iY/o3QwMUTSS13y8PdOiGcW3okDtucpPPAtuslHhtLdsIDuhTjbTBLJ4E/b6EMVDZVtGX055 TE9mV5fGsOzsu/ZjZfsea6fuVhpjevmxEii4yHLBgYVXmPdm3zXEOMRsWGhRbKq2fg== X-Google-Smtp-Source: AGHT+IGy2/g0qdhkiz8O8OjgTmImN4zombJKSC4UxkJ6rl2bvNoupS5Zcrv6gbGUmsK4Jw1vqNhKhg== X-Received: by 2002:a05:6214:2423:b0:6e2:481b:7cd9 with SMTP id 6a1803df08f44-6e44569bdb9mr4703916d6.25.1738871226492; Thu, 06 Feb 2025 11:47:06 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:06 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:04 +0000 Subject: [PATCH v3 5/6] 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: <20250206-uvc-granpower-ng-v3-5-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 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. It will not work unless the camera is streaming. We consider that this the most common (if not the only) usecase and therefore we do not consider it a regression. Signed-off-by: Ricardo Ribalda --- 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 63d1d06d3ff6..7fddea100ace 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -631,7 +631,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__); @@ -641,12 +640,6 @@ static int uvc_v4l2_open(struct file *file) if (!handle) return -ENOMEM; =20 - ret =3D uvc_status_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; @@ -680,7 +673,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_status_put(stream->dev); return 0; } =20 --=20 2.48.1.502.g6dc24dfdaf-goog From nobody Tue Dec 16 07:13:49 2025 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.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 82494189F39 for ; Thu, 6 Feb 2025 19:47:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871231; cv=none; b=lhFMkVbnf85J04K2OCDbzSVEfNCgARQKWBCvIAeLuW8gGhHSYGgKiWkoox6kaZXlno/iRgALFdTidVujJWuI3YR81K5laBxPrMB/1tVAJvzLyXYsnStNnyvbtZISbb2JbskAgjkUpkhhfY6rQMONRo2HFgWfxjn6wL7F59h8U3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871231; c=relaxed/simple; bh=iF5q/M5JUZkyZmzqjR47MB5aqmBHiwCKShDjJbC8DL0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ox7lYD50yIuX9zwNLRoubqtgei1calaifGtVcjjQUkbxsCGfvKOwYchohjTr7sP+026inn5HdFPmy+D9pkgDg/jIjS2gYmMz+i2Xx79PeaVc/NzJV7f9q3G354jGOwt9AZ32ClGPYHZcWKA27SRkKVn1NNtw0WTFvAMutTDE2Po= 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=VhZv9bUN; arc=none smtp.client-ip=209.85.222.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="VhZv9bUN" Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-7be8efa231aso116032485a.2 for ; Thu, 06 Feb 2025 11:47:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738871227; x=1739476027; 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=yu46zuMM625k6HW9HpCZiLKg/8n7v8FUFBtCTL5Qq8w=; b=VhZv9bUNa/uQokOXosfn4S3LgqQHNPJZQlF1us8UxmKplCTWhtwFb2snkSD9wq62vK Ch1UewSrKcBOgd2FTpYou7UTMbSilyo8VsVeMuZb0TMLwZg4Gwo0ko2Mfx7g7V+vTZYx l3gLZQvkQZUklJin3Zjkqs7j2wOUswGjVn2S8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738871227; x=1739476027; 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=yu46zuMM625k6HW9HpCZiLKg/8n7v8FUFBtCTL5Qq8w=; b=JLVQFC6eFy7GBbuw7YqBJd0CMghd6+mhl7+1v0BTkxEatAnECfmyZCXLd2nvqXOCCv htTxyAuRZQGC3jalB/7aqnZlgVyGbRrs1kKUYJUEeuH5XF/w10USa5z+szHzn2nUBPN4 Qfi4XX4r/+jB5dke13w5zGBB+vZBTBkUpgykNGAyHMTdfVsGAvQnuyv17I0/Mb4/iJgd xemxA58UX9yIJkVuClqpI7g+1ol50v4i60OUp69EXZvB6Aq6LD1BxiTKMgDA3PLEv54q IDCyThNH+/fRJXaOH8IbPgoP0+bb4zipVtlsdCOi/l+0I/DVkeeSb6oEX8vbZMhzV4SE 65uA== X-Forwarded-Encrypted: i=1; AJvYcCWJi+lIcP0hyn3wN1dCMir7v9qNMR1RPOnU9p7v960yjmnDAo1I/itzyfL/VDVOgsNvuzf5VNI3l4GvCJE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6fulj756Oq/g87nxflerlQxVa4qd7jiHQ3Nhel9DlZli1TJRP KiASFosDfgHhGV9GoYx+KdUPuj20qgPe99avuHiG6laaQG6my3G6QD2cWJJ57w== X-Gm-Gg: ASbGnctJMboNKpW7hySzilPmWbpvTyYH/pBLlk5L2b3ffTS6SP2ldAzni+7AQODDXPG 5IybopmtEjw6hWYQa45Bk2ys65y4FUWOOLbz/bhJttCy7x6tw4TAZcAZARiK5F+Ny5tFwPQmdQk aYxZN1GBx5pvlClxw6vXHMNMSAZK1xn4g/5CyqI1YYMu3wrymXdjNjbCXocCro9AeoTyHLluKo5 x+p0Ra35Uwnls29RZwowqt/cv1NFHT6QMRMZC9YTudwhXGjB7+tiAw5Q1LpRXrSz1t/Rp0xnB3X ZI9q6iT78pl7q4K7SR6S4KiOJiwCFpQs/tH1bOodoAuXGTniThVnauQBVmjbqKybOQ== X-Google-Smtp-Source: AGHT+IGvm2bH+u7v39h8LKqAEVBrazNHy8zb1bEygHBPKRdizqbmdeVljeK2PG8o11QOevB7emfwlQ== X-Received: by 2002:a05:6214:230c:b0:6e4:2b7e:3992 with SMTP id 6a1803df08f44-6e44561daeemr4277856d6.16.1738871227268; Thu, 06 Feb 2025 11:47:07 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e43bacb6c5sm8756386d6.102.2025.02.06.11.47.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:47:06 -0800 (PST) From: Ricardo Ribalda Date: Thu, 06 Feb 2025 19:47:05 +0000 Subject: [PATCH v3 6/6] 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: <20250206-uvc-granpower-ng-v3-6-32d0d7b0c5d8@chromium.org> References: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@chromium.org> In-Reply-To: <20250206-uvc-granpower-ng-v3-0-32d0d7b0c5d8@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.13.0 There are some ioctls that do not need to turn on the camera. Do not call uvc_status_get in those cases. Signed-off-by: Ricardo Ribalda --- 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 7fddea100ace..0f022174285f 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1429,6 +1429,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_status)(handle->stream->dev); =20 return video_ioctl2(file, cmd, arg); --=20 2.48.1.502.g6dc24dfdaf-goog