From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) (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 85338204592 for ; Mon, 3 Feb 2025 12:27:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585651; cv=none; b=Z1lkmqwUE3fYEpLWof0D48rWx1ijVj5hW7eFlD9EAAl/vChabugK9RZA+TUNjqrLUXFZ6xTpYz5g2GQDMVf8mLBmbeCtIAu5gP9bg8ygwUHywe2692X5sCM9d2qA/DZqlkc5TZD1ckPIQm0VuSFYuGMaEns2MQmI7vAap/vWU28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585651; c=relaxed/simple; bh=ypQ841cNTOVvJkNiivh2SjrxeSrzyKc9iA8RYDsQiLI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=almyH2VvW1ZtLihCIUPQphWIN5s8yxscJv1JqOeYeryFDytsRUthdddiWokLsSm0IzBWhSjMTn7fyBEz/S8e2fWvVJRf4RoRBAIuARiSYIu8HYm0Plf6yvuu6y9VvuTwRN1E5XuLCumPlFXQ7AZW0q8Kpsw6CAnsSfu15ibf2Tg= 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=SjC5UTPN; arc=none smtp.client-ip=209.85.160.169 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="SjC5UTPN" Received: by mail-qt1-f169.google.com with SMTP id d75a77b69052e-4678afeb133so45540181cf.0 for ; Mon, 03 Feb 2025 04:27:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585648; x=1739190448; 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=QY4+u53g0URNX41P38AQG24x1RBlbj7sJlUgGqsa0as=; b=SjC5UTPN8QDW8j4cyqJVdCNDbR5GZ7WB2BC0SZ7wuwKZtaOT8v33tM8Tl3GGhmZZbd KVFQ2B2ZYk0IU3tEdik8Dhgu3FwAB67vUaeBPgLj+mHNfPyco9u6jsMuuse/2wQs4/Ey bLetNiHpIm0etou/kP3i0u/Rl0QgsE9G07wOI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585648; x=1739190448; 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=QY4+u53g0URNX41P38AQG24x1RBlbj7sJlUgGqsa0as=; b=FPZmatjbGV8x21GwbLuqBBLQTOL6dLqH/TXt39oBbak+rAtphaB101b+/Xt6ARjhvX K3SV1O7Mzs3WVwAy6GxjTCnzoAQm2JUzg+uEeDb3YsDTZGuRb1ubVvaBPQvTCVEQzrym dYKY6F87IRtfZF6ONHQ2paPitPfV31/GE4gR8ktvNAdUIOVETbgIp0lH2G2L2HI+VT1v EAkCIgSD5BWZElbwE4hnORiEL1QHwksab+gpjnlz0y/8tXAAt2yK1QCeD513t9sCDs6N 7+zQfiA62tdnFRYkoa9pJQeLg6kkVxHTk2pFcoI1s3J9UUZJhAI2iXPaqgXsLWzftgbE Labw== X-Forwarded-Encrypted: i=1; AJvYcCWxg6Cm8DyfIfJTCy6WbYHv1YBzaYV5oqSv5C4gbkSY1BrpSxcJZyrE4zzTr4axg8PPBF+rqebVuGtIVV8=@vger.kernel.org X-Gm-Message-State: AOJu0Yxs2OjWwF6sWflA2bg4EMrtBMtJN4HWKFePjm2OF+6Ft797EKX9 Qmo9uX/bsT87deKClxYHyA83TADL/6BtNNqG6UgzetqmziwbwZPfgxV1nsuz2A== X-Gm-Gg: ASbGncsE/Pfka3X9HMhFbiXvJaeYOyKqYAtKkPxjUbxMqyRNB/AB51NWL/7eW4VEZ9G cs1Q2cQmUZm6DqMZIzwsBVHaveM6gAQJbMFA3jJjpabFRBzwLLclQq5zj+NCDst30IGMfAp/ctT OvjbmkTXOhzF8pZ8misSeBhXyzMaG7hwxYH1+fSFAtoChzwuRuDPnFLS1H28/yPeuIGc4XL7q4y Mv30vryz4X/gkdSK5epb/GKQgvud3Y/ct+ZMZcVRdSroRa1RjH7ewyWPqKyUpOxNqVTibbnoyOF kWYLBIS0h1GsJLpauiJXhjfYMLzplgcVjOOAA8DbsibWlsnHmgominITbQTaQHvmIg== X-Google-Smtp-Source: AGHT+IGGsYptsXXuay5PF9kPj0wjLs/hfqUXeqbalcq/KJFm9kJo02Lp+ffYXVKIq92dEFobt5ZlKg== X-Received: by 2002:a05:622a:550:b0:467:5f2f:4a9f with SMTP id d75a77b69052e-46fdd328316mr210294281cf.3.1738585648410; Mon, 03 Feb 2025 04:27:28 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:28 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:20 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-1-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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 --- 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.362.g079036d154-goog From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) (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 B7AA220468C for ; Mon, 3 Feb 2025 12:27:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585652; cv=none; b=LJdkSjpYJRcCA0coNFZXrV85wtXqGmjtUqkxd1njWJyHfYqF1TarOKRKL9n42tQW301ptUeKR/i2Sa1LUwgAbFgYkXnwYxty0QvUOo0qu6v19NBaeyZQixS5NKtZy4Fs5T4vewhpUFzDXBj+GzRyb96aqXQcUtdf10/gjzopHmo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585652; c=relaxed/simple; bh=D3PDTa5bBZ189h6S7+Avdx11GulyjmVpJFiCtm2ywk8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M9/9LQqKcSqzT21pwBdsZN8uBE7761wfdEt3Sb9MkitD1jh9ywowdfoq7qzTAMokR/4rfQJwSUCEOWWp5AaFWWqW/eQQddRQmG5A7VIGMUwzyoWD1O5QnF+3hSsucjUFWab7+PBOWPExn7NGkfy9C1VyA9E2je8JWrHidNVuvNY= 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=QfGp2Vxa; arc=none smtp.client-ip=209.85.160.179 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="QfGp2Vxa" Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-46c7855df10so76559591cf.3 for ; Mon, 03 Feb 2025 04:27:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585649; x=1739190449; 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=XJfWVER0A/MWtXZIU7OrSpWdFioEJlVatupUrNIrYbg=; b=QfGp2VxauptWGNvUpPrB9rrQ7Q5UfaVrF9zXK+KsGm6hUeHbxglZ77W1CGUy+YC6G2 2HMytE0rAhUOMzJ5/B054IDE8NCCoQmOZXGTCE60GFSNvIqT9wn6GKqadhsURAEknLQH 4UXy8U68ZZx5ln2Ggq3svr6hN6c01GOqpaJr8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585649; x=1739190449; 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=XJfWVER0A/MWtXZIU7OrSpWdFioEJlVatupUrNIrYbg=; b=EvoIguQ4Dus8CoJDbhjN8AijapYvAbwEHYuF010JbaCUAYW8ebhHKn55OpipjiBRyd jRlhtnTSHxszI7pQnup+AsOCFOR4d4HAdEbRkRMkjzPSlR8doxBhCri1jiCFI791/JUY 7B7zMDqC1fkB9f5AvgrOLLMLuR8y5Kg1A4olpd6h8JyqyzKXVeRfOVH2XRJPhyT9hwrp fa/6fD41kZ2Hu9p63sqX9Yleyc4p3rD4EhAsl+xHlGqAa7gdxY4Q2NiIoRqzjwhRYR+i e3hRb6yqJwqKCEMC4d4iIt7Y2zHrF3qYCqEdxcazjzWVjlBkd97mIXDsw2QOm7UfH46R QU3w== X-Forwarded-Encrypted: i=1; AJvYcCWCjfCbfUCrX+NAM6kirRwd7TF/NPZhIhu76Ia5mLbRC+jDHL9D95wVo05yKklBNygVlGtb4tX9np1Oh24=@vger.kernel.org X-Gm-Message-State: AOJu0YxGABvosWQqvzaHhcJuWVOiQLs4MkSUVFrn3aGVBVTKvuQuCitX 9QePF4Pvx8pOWF2CMM2VJBpgEzZnQRwoT9gfSk9hSAxtOw6d2jCV43F/NwAyMg== X-Gm-Gg: ASbGnct6c9O+s/kl6FepIE/LHRPD3NCS5Iha/2VOx82pVai8is7qmCino0pU0Z0HjT1 m+9rOm7nmlAlB1yJcOnB59MWa0vTqxk55kmgp+iqx1ym66n0hIoPl9LeVJ3ZuDBu9wVmAvu5XYX Ugkils7+zbY7D4uYROibdOo13BSJ6aQnPqJS+UryNVZSC8e/fXlosD7DTxKJvu3noVSO+BlozbQ lJVhVYGLVkdJ/M4b/ZpvZvGVulgSyL6FE/LdfDeW0+YFGanESiNYVjiUKvAC0uG52vYeoOAF1g9 4XaEwLmdTwjf59Vwxj8Sq7H42bvr2ILKAneMIK79cSE396u0Pzdr1uWV6H4m9P311g== X-Google-Smtp-Source: AGHT+IHM6vEIGrDaO5hgfLv3qjHe2qX5n9BWjAr3CI6mqTozb4ZJwT7hQqwUFOPt2P2TyvnmMxBXdA== X-Received: by 2002:ac8:6f17:0:b0:467:6c5f:95c0 with SMTP id d75a77b69052e-46fd0a1d1fdmr263931451cf.7.1738585649574; Mon, 03 Feb 2025 04:27:29 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:28 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:21 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-2-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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.362.g079036d154-goog From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) (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 E3D932046A7 for ; Mon, 3 Feb 2025 12:27:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585653; cv=none; b=LmLGagCiz8+Au8/eaPiNF5VUir+vgt24Au64dUEDWxUjVi3F9HG4iS2XhLnyIQ9gSY8WBym1bp0ohygluwf9j/Ga7YBEdhxhNLlz5UN4t8SevNjOBXFTNylv+lTDuijHEEYXqk7RJavRiQMD1uCLXuKLQR2mGYIC9IDRLeiLyoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585653; c=relaxed/simple; bh=XXTT/tWxhDROjkut4sJvEGq+bxWZv4Rs7XbeCY5Ewqw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gh6cBQhetnOPo1y0GsCJjJATVnJvGMfb5EPBry3xiXohlvvX152gCwLDMO6yxs/cO4tjOWyZ1qj8jUTRhjd2FWkFQXWT9fBPXUV5LV3LqaNQcMhF1fhhtCMXrMaVJUCwNDYKmuKZA5WBH1wPtcLnEUI7z9u35Tu31QcltYCZVuA= 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=mYJba8qh; arc=none smtp.client-ip=209.85.160.175 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="mYJba8qh" Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-46c8474d8daso31098331cf.3 for ; Mon, 03 Feb 2025 04:27:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585651; x=1739190451; 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=1UyBErLHGx5G6ormV1VB8YFEdyWYN72j7JODKBi0RF4=; b=mYJba8qhsOCoJya0nvTmeeuy+dXdJwQfDYKiJGFYJjTDMm6mTqnD6qfoBJZLqSKWg8 bluJuXY82E37XCR2vS/84mLnxlldGmaiIZgAzklLVHJUws2J4zx5G0y5xnM1VRFLRXV4 sODygUyf+gIr1JIsVq/1NL/0rW+GRMljl1nOk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585651; x=1739190451; 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=1UyBErLHGx5G6ormV1VB8YFEdyWYN72j7JODKBi0RF4=; b=XsuZubQ3IiFIDo24L/fEE4InBoHE17PikU/9933l7KWddSYPliZanxwf5SRtR2XfM/ I8yfL8PmzpxjVqkcfrpfyl5hRV43nrY6ewtR5Tt7xeqSQWD45yultiP2csREdLLgG4BS SOZR+lfSF8A5yeF5S2FV43iPelKZW2VmKksIC14N2in+bxoJ/BCYo2Ww2rZhx9ZaOg0z qUb5i9XG2l2fd7s4cdNm62r60YnRxl3keg05i0bcXZZGkBDyFzEkY4AGgqGDEGbiDa01 ZW3YBKORCkLEVxc2YS/fEL+hYHqx88GRePw8BTn+p6EJ4IfuDUjk8K3tAOxKl52jgPyc csvQ== X-Forwarded-Encrypted: i=1; AJvYcCU5ZT77pULs42M5XJDypyVSXrO5V0U0mYUGaTPU0IYx2WcIkfEUh3zya/d5qgt+kqC0Y7hRaFb+LqXw4Sw=@vger.kernel.org X-Gm-Message-State: AOJu0YwYQiuN7wP1dNZrzSOw58dejb4x02PW1tYYt9Rn+v7vb+Dpf1Z5 fP4MazY2z9H/jthBYolrM4Zb67tktyJ9WQ/hGVdz/2zkkhXtuDfm/qArVTWNzA== X-Gm-Gg: ASbGncs1On29HsA2wl5NbxV9uq2UE01wHfE6Iicryx56geVZbgP5CDetaAhHDoPh1Vq UtYDyj1AVALqtVQBNgAa0jZpuuwIU70cZDKYtAeGtBHYo4Z36BRkEwj4DV7RfS91ENR6nwYkAIs xaEqcWuZEn0mLAlaZ1nG50BQ+girzOtoPs8q6pvx1D48P1uvQpUPb3SF9fSU/uHsGcjEQeoP+Rm fdnPm5oIvEr7iV0N1DqC+rnIf7NM0VvoxeNjGWyj6LS69PcY0iRdmnhmRp2F4JGCKh01ENX1taX rbKKVergF8QNj8AjimcH7+h5mt6FeF7st8aUtGU93U8i0ezkZXtCz5AXqklq8XKVSw== X-Google-Smtp-Source: AGHT+IG9E0NH+LYROfpL2Nq2MBiFHcnAII6p/7ifysSOUvC6cvXCw7X7TxWgfCpTwJkAsyCKZgKCJg== X-Received: by 2002:a05:622a:4296:b0:467:681c:425c with SMTP id d75a77b69052e-46fd0a806f5mr333036041cf.1.1738585650743; Mon, 03 Feb 2025 04:27:30 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:30 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:22 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-3-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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.362.g079036d154-goog From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) (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 05F3D204C28 for ; Mon, 3 Feb 2025 12:27:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585654; cv=none; b=tmSdO/dhSDn49kUk5OkpsfJaWXDxvlxvTFLr4CUqBmCfXKX4iE7x0b/nt9vRGcMItjJfN19W+THSKowadzj+bPtTN5KkfMf83nfpmVSi4Bc1qv8kUer0f1hWEjO9W50eIEhZsfBORD0kvMTXqICWTsoMfKL1CAwkHQalt/hrGvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585654; c=relaxed/simple; bh=Dkb3vRn/aSnNXXamQQ3bU2b0mGpMI3r96lRrP4TLfrM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SkXFb0ZGUScHOjB8ZB8NOC3+xT4fz6CJgwuNRfpHhd9XvvhzZ6OdWD294ySBRUsX3h6MdqJovR0mgY5kB16MzIAH40GrLwZNDRVBPAEWa+kWSdfa+/aGQgLEYtBZ5zn1ImZ+xQo+scQ1ZpW+4WmDfahzYkbjqZEcHdqvjc0VEGs= 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=GyUiovyT; arc=none smtp.client-ip=209.85.160.180 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="GyUiovyT" Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-467a17055e6so52257821cf.3 for ; Mon, 03 Feb 2025 04:27:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585652; x=1739190452; 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=DUu3vo9b65Sf181M7tDHFuWOo/PqnpmKoQ95ebWAmW8=; b=GyUiovyTM86Ka0VhfDBEP0JxZ2KQ3/KEY5KiQZRCucB8t7Ih15Iosl62uAUxLyvmhC jO8JWfeTXjESSz26gcuZJyIcqCwibpiC6IUdbBbEmisvL0WGIKuQAYnBCClwWoU6wuly 3TGlI4UrS6phxngYQWKUjeISwzUFW81SPgb0k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585652; x=1739190452; 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=DUu3vo9b65Sf181M7tDHFuWOo/PqnpmKoQ95ebWAmW8=; b=b6y9730PhH2oB+3G3zlZU3Pfpvm5NcgUs3gO+7ykLjXTbySsiJyPWY8CKPknUfIp2A zxrVaUyPpzYWCBzl9Z9zRxoJfg1ev3kGVc2/83siYtIFYer5Bqt4YjZcDSAnWdcHl+ln NIW59gawNbOAiJOjFEpY3HGxD2OpmuuvDbaBUpx5kUoPQ3FjrvR2CRbLxlxfga09UNOC lBJHl/zphkH49SzdzB0QuiXHy5Kj7SEm+s8+AlO7CGXkK0mnE8/Y9+HKCUUV0rFROzLq Yots0lPTOWN66AW19MxvVUHbc2AUgLCYLp5lXlQpfWXC37G8ltsigv+ONI+BPuH2aT// 74/w== X-Forwarded-Encrypted: i=1; AJvYcCXkPYgiSfCYJzY36w//jPE2ZpJ15IaD65P9/vKZp+s8Dh4Rq/lqIIP+kEgli5G9ruu8XnuGe5mDmaizfjk=@vger.kernel.org X-Gm-Message-State: AOJu0YzhJI+VvNAc0kY88j3htUlQkihNEEl7K6rIKr0JEpT31OClrvLr smcMSuEw0CPYN+crYogOT0P0iJy6wdOWJdV08CRSK072u4LPb4Bor+ZfX8WS9Q== X-Gm-Gg: ASbGnctqYvdNeeOPSIdJZjIYBxsixmi9g7zBhtU+Q8aQW3qOKIUIiFHWiYCodJ67YgL Z6+AJL+NACVQCgyN037C18INng3tMQDG7njZ9pUPGOk/Fxop/yZ5ASrC9eQNrnO4K0X24SAvbuy TN/BgYkF4ednaDSXlc/jRjf9NVlBkde3UAKUWgDXHnVIvEFpy35//AdyX6B8Aq45g6dTT8pAdMq HrsLp73J3EQhVj2Rxd58dRtJqytIh5aSANE0XEd9j/B9gWHnAQu/8feGPLzTRWM1W1aAV9BLPz4 tZzIGYCb4e9bFJJXFNeLKOE9U9KyYu4BZQo4rGBR8zKITlRKyDPS2vTlcR9B+O0VWA== X-Google-Smtp-Source: AGHT+IHNc1v8i7U+bC9jsIDo/vsrugAngiPdsvamvE9+h5FZ2Afv8RFdQv4Kws+yotU6HXV+UgzlAg== X-Received: by 2002:a05:622a:1993:b0:45d:82a0:5028 with SMTP id d75a77b69052e-46fd0a7fda9mr347778861cf.1.1738585651956; Mon, 03 Feb 2025 04:27:31 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:31 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:23 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-4-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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..5d6935539e0a 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; } @@ -1374,6 +1382,16 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu= _control_query *kp, return 0; } =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); +} + #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 @@ -1388,6 +1406,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); @@ -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.362.g079036d154-goog From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (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 28CEB204F78 for ; Mon, 3 Feb 2025 12:27:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585655; cv=none; b=IqCZtP5NJTKfNxzrkJ36jyna6iGfB1PFaeBx+0ewdfWb81JR7TfhhHQLXts4QwDHpxky3txVZTr+7qyG91qUbpqxkBb3F86pnQNxnb/Z41OYoDcir3HlLE0byJOAjwN1vWYiiK8U7f+w93HU1KW7A1QPZuKcPhT316PS9N23GB4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585655; c=relaxed/simple; bh=miU1oeGfq2puBnEEsn/CIUWxyN3yf8vwEyCqnsdbUQ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z5m+CNUNqJ0e2aPDw4lcEX7cOgLBLN8neBMahXktB3dgMWEgigG4sa9nRlMZ67ZJB505ivzPJa/r19AF6hXzxkAzjxP9N10nIkRq4F64J9PXkQOpvksqVMgLoozQFBob5Qajsdt3sblEtio+uoQTDzvvG8S5/fjfpT4EEIaCNYE= 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=Pwh+EB8k; arc=none smtp.client-ip=209.85.160.181 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="Pwh+EB8k" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-46783d44db0so40322051cf.1 for ; Mon, 03 Feb 2025 04:27:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585653; x=1739190453; 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=wtqj4+IbNmzvRx6uGlPp8wYTVx+vhgS082GDqFP9Plk=; b=Pwh+EB8kzyWT2kvphPFr5tYDUxKzPvz0faPjH/tAW4GST1pP/Ns5QybJsX6ytUcK33 df12l+BWiSpROh8aHuaArKaf40MEfqgaa6OJNM8/p+0tU5fp42AP8LFRt7oY0yFrJI0m GU9xgNeAsULPtYUBqeTas3J1tC+AOKDyi2H0Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585653; x=1739190453; 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=wtqj4+IbNmzvRx6uGlPp8wYTVx+vhgS082GDqFP9Plk=; b=k8+eNHS861eVxQRmdc+Ksebo9gcBG6YUPM46U3BSFDwealxyu5gcB5h55245OL0DOK CIai0wmVdwBvWqvoVyi8qi9A71TwI+ei5h4Ish8VO2sGOvttjF46KwW6E4R6o/X7sxC2 pAC6Bt8Eq8xjqd2/YelbzAvVVDz3lxPegfdl+xVnPVfrImp1zMVu2/Y6FgQK0vbu7A05 jFmrzTybrPTTUnrHxkgmQo7iDnRsqdZb6zPLfT0IM1Czuzbg9UBlh+0Is7x5Kdtlt3Nx YbjcDcw3NLkgsraVIeP9fzHmEqYmBKX/MugdwiasaiF713EdKmwjAPohpSZJr9Rq57CD gRug== X-Forwarded-Encrypted: i=1; AJvYcCWEVUpWDAVYYHLDzsZx6npuJYKq2hWI4UHuaaCfKoe7LCB8tpKSha+Eba+EixvDww82VFSuMJs/0OXgGcM=@vger.kernel.org X-Gm-Message-State: AOJu0YxUN47yDHmc3bBRzJeki13+47pfwOlw/iGk3Gq6u78ptvXGq/Qi D56IepwFW76DoTeuJqKCpX1AVO/rAw9C1ya+IeXggA3mTd6ngF9NBviMuhE/bA== X-Gm-Gg: ASbGnct4qqiJrmVjjGvp3+JxPXkJ14Sw/+xlRUjxcB+MBBpTYJ/u2HGhg646qGjJ4LY fz5rdyqvAVB+MYwynhOxWX6vpaP9k2KsWa/cWckK3ZFVKbRODeIBIU9sfLHSdU5K5ypEwsxasLX DJ0h+jpZxSdSXWqkp7wgkRLEQ4Q8EqOVlfuLgiOO19lKNWaHXg3Y0itLvbdxxq1oaWNdbLYY+Pq rU0nO3X6a0En7jdczANTZkB7QoSLGeUGoAQ44fZHyH8Oc6jWh43ihEwEMWGjXQIGYav2cmzCAvh EnbcGkzaXP32J0jmuqNv3RipOg2pNVav7fXKyjzCNUyFqk15HBH0ZhKVJScMpYmkTg== X-Google-Smtp-Source: AGHT+IG3CpIs4JsMUIfUgUI2ZmvPf7JQ0NDzYOoU8ixfzLE1RSI9XcehHCjZaBSO3YAMEr3FOh7yyA== X-Received: by 2002:a05:622a:210:b0:460:a82a:39a8 with SMTP id d75a77b69052e-46fd0a97307mr341265011cf.13.1738585653202; Mon, 03 Feb 2025 04:27:33 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:32 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:24 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-5-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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 5d6935539e0a..90ec6f0015ca 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.362.g079036d154-goog From nobody Mon Feb 9 11:02:22 2026 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) (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 92BF52054EB for ; Mon, 3 Feb 2025 12:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585657; cv=none; b=D/Q5txmFudpe1gdHzgD0o0H8hYSedb3xMDJsW+iOMWDbyJLvrron8keRDH9tibere4fsfQW9i84S39SX/HyO0/E03s6eQbmNoRJswIMoBEWCXI3tLCR4KfDhe8JrqgA18FYbwm2y96Matq9Aah6BKxU3NPZ2z2+V4SGr7hyMeRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585657; c=relaxed/simple; bh=yM86SLF/6jAKbL4AMHEe3in6d4WcCvkufzZCjMCgLeo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KudfwtSOjnzLjf7wH72pdsBYiFMXkedvTzS7PExvwoYTcOiTsTp/MTPeKzIUX4fUNP8nMwZQBJhGwEq4MSO+mUpLHF0+mJwE7VryQjb3uuq4NoqLRHjRApR4qCAc37wltF3oCbGSMcBUUSOL8syCH3ZlPP4sB0LurwXYfF5lbOU= 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=CrXroWyz; arc=none smtp.client-ip=209.85.160.176 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="CrXroWyz" Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-467a3f1e667so27605151cf.0 for ; Mon, 03 Feb 2025 04:27:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738585654; x=1739190454; 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=7hiuieGhjR7AOoPsrkH+6ULiRM3jI6DLF1E4FTTyWNk=; b=CrXroWyz5/rIBgI3iizA0mxANf/TufkLET+gWRNG29JzzLdH77e8ppvkhmIxWVaxq+ 1SCp2PMIPJCc+9Fn8VrC5umDDhhR8E+H/d8WFZ2EuL3zLnqezOVetgDRREvgamk5NLkn 82jMCyTnXQB3Z7gXS8Un/uEk4t8SBrIavXE14= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738585654; x=1739190454; 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=7hiuieGhjR7AOoPsrkH+6ULiRM3jI6DLF1E4FTTyWNk=; b=GiLe5Bk4uKqAZkg6eAejUMmtES3gG+L05GrH2lPEM5bc75mxmYo6qGdIR2P1DOspfK lX+7ex2pzJ7cesJm7101x8COcA7UR15/2SWclws/LMFfrgXKBE/5L5CiAXktUXwrIrKA 9SZDl5AhCg1JmTjuzwQyeu2u7T+Wk9At3Lgni6ebpH0W6X7ROTKjlD/RsZbwMOTua+SG q/UGo+kFH20Ba89jgjy6Y6bItcBqcLSxbcec1SrNbheQbMtWBQysss28FMZcW/8wFfDQ kZVdCTZagfx0aLZ7tVsCS0ml79T6WhKzivygzYYE7BCt9ZcVfb6JYDGSchytccFR/wBP CQcw== X-Forwarded-Encrypted: i=1; AJvYcCVvzMPNk1kjN+FmWf3m0J6rnj3l5EXnXex8ZtPCFGDPFFauRTAfgapgdWdof2XMySIEgodbtVPqDGBFDsw=@vger.kernel.org X-Gm-Message-State: AOJu0YyEKrqJBHTfW4ON6VF24f5yxw5MUa8YmPoXAiDOMMMvW74AYWDf 6zDiYh7Xv9E1smzu9Va7uV5GaDib/0sjjuvuWz8FMXma+ya71sabBAEMPNbPBcwGqy5b5uptHYa +Gg== X-Gm-Gg: ASbGncvTV03okBiFAU/p56ztQHPO2PtK54MaZdE6XcwIUY4OLIFlMPmpXu5310IG6TS SBcX7qvHnelvMOcIa+8HNwg/JG2Bu4N06r8UE5e2FdinBnq4tVpctllL9i7RNx6oWJhtdkgChIs zp7j7K/zjDS16TXzX/cbwsMjWKgoJd/ouVQGkZGhYDKKRqvko5X9nhhqhsTWgqzGjuiKWMmZW2E lb1KcGPzWJ2QPmHc+PizgntIgoDyhYMI+5z55S6bHxYOh1P246ml3eVu2jOvIodbFkEP5fui+Q4 ckGCNuHUrrK2kt/XdHTKl7eQv5yDKywARw26LhE9uGq05X+uy7HNXe48XtXSH7cIjw== X-Google-Smtp-Source: AGHT+IFIwj70LhWN6hLpuq3VFcv+Apm216xu+A8hJyiHZuuHCWjbdAE/0GZTA+6rZasVQKTSwB6rlQ== X-Received: by 2002:a05:622a:1451:b0:467:73bf:e2ca with SMTP id d75a77b69052e-46fd0b916f6mr246510691cf.46.1738585654488; Mon, 03 Feb 2025 04:27:34 -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 d75a77b69052e-46fdf0e0c12sm48240941cf.37.2025.02.03.04.27.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 04:27:34 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Feb 2025 12:26:25 +0000 Subject: [PATCH v2 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: <20250203-uvc-granpower-ng-v2-6-bef4b55e7b67@chromium.org> References: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@chromium.org> In-Reply-To: <20250203-uvc-granpower-ng-v2-0-bef4b55e7b67@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 90ec6f0015ca..121a582c7945 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1379,6 +1379,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.362.g079036d154-goog