From patchwork Mon Feb 3 12:26:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957370 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 8589B204598 for ; Mon, 3 Feb 2025 12:27:29 +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=1738585651; cv=none; b=g0P2RkjndJifAbLKq+4y+VOEcWbhPfrY9552H2mu704cTbqrPr2Sy3ePIR1VAbk+vTHlJIosuSye5phkCsXz03OkBgOsrazVY1GdSKISB1Rk4j/Ogej5h254b4iiusJB2UxkCpED9deH44F2DD7PeAZaafVUlTLFpNe+3JgI6Fk= 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.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="SjC5UTPN" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-467a1d43821so49151481cf.1 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=Sn1I+e/8OQAxh0yva9IPdszdWMEdy0WZBmkhaHC9ULMY5mrlDSfnR2LTvbk5PVlXmo L8Zg4h+iV8zMJu5XikjOuOcvuJKrhwdugzN0mXdcdyvnQ4V2g/221uhZeGywspf7z7Zh FC/QaClhIzW1lkT5Ncjel2wtEJH2iFYXsKtpZOtJyMkXOx24UZe5p5cCepE5yGhRXanr uviaELc+Sfj7CVU/b/8+WJQw2G8JLJMiTD6tBSQxGKfYz6C3T42o4Muo+6HtLqD++P6k KvTNtN7PKjQqSlmoeATtA18PPCTRNUZzar6myxboYmmHkq8w2bZfFmUyOaPZsbtAoPeG 9yhg== X-Gm-Message-State: AOJu0YwEVSwP6xV9GQ0DrN91MTPI51HsnX1fJYByROA9ZWm8vtO1uZ4i 4fURDXERLEydhHWy6eVdxbsDTLvSBsgN2XLiKOnaBry1gHjZnhNDcJAq5k5+pkJGcSkd4c4qYxS Tng== X-Gm-Gg: ASbGncszZxBZ/QGcvJeUCi5Ut1pBjNeB9qVS4bE+7CcJ/WOgqVrThJKsdYDl72+T+We J3NjM3PZeK+wiWpQvq1XlrN0hnctbGYwKLVAB8nF6fKTF0rsSMkGjd9EexgKT1AJlBRe+rBjeQm ZvatEu4XFW2dw7tBt0Cc9WPBtqJ+p3cnjvY7Iql0llARzWB5r4awE9lc3FyRo6bizrp+heJIXlm TtHba/Pg4fLrSDWgz8wGoLqKXg1cG5oQmBMHU4FXMs+th4iQRoCCKDob53w2UysoyIdDd0X5Sgh f6MZGidz7MnF9CvKozGhai27clWlYpfOh6MGgk7X55rclgrsWmRagfqQhsaqELSuww== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_v4l2.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; - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret = uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (!ret) + handle->is_streaming = true; return ret; + } 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; - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + uvc_queue_streamoff(&stream->queue, type); - mutex_unlock(&stream->mutex); + handle->is_streaming = false; return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.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; }; struct uvc_driver { From patchwork Mon Feb 3 12:26:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957371 Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) (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 B6BF5204689 for ; Mon, 3 Feb 2025 12:27:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585652; cv=none; b=Nhs0z4AYhq0BwdKMMLx9Y0yhlnqK5ssQGYHG4uqGjpvdsp6cAUmxNzX+q6JtFgL7UxsDasE0xJq60/BWXYcm6UVxpD4ja5YO79YluPh9ZM38sU2BM6i9XzwnlOPeu+3FxPhJcdIYrM2k/E1eifd02k05ZTNMJHFZzXYFy4Zbgqw= 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.177 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-f177.google.com with SMTP id d75a77b69052e-46fd4bf03cbso55733931cf.0 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=bX3WJMZAvc+uMBnPlOBzbaMyP5yhGtVc7J1EPN2ZRoc+9qhLm7/gVmgEBGpEJWuNUz ZPKFpJUGVFwEThCVARKE/yfDWwFz/YB8y/SOwHqtsd4IfLkwC89xCu6xwM/0suH2J3mB l275cxTWmkiAev+YRD2INBFFbQoLJ5MfzK4wuyCXmnHEuiWRdkraFWid8aTbWRNzvgWD b+YvhniY/A+lblLAcHHLaR52Oe+u9igkLx7hlL3zV7mXNEWsYHMCKrALKzte3WHGVW9x lu3H/xB9uHVT05quAR2As7I3qd9578EdzKtMfz0DeVTSdJ3UlYYeIswpDKEjXfMjbvzi ROuA== X-Gm-Message-State: AOJu0Yz14e5KHmlU5NE7c12y3kMmnbGAwWJaBg4IA/nKorvfrbXPsAU7 TgSvOi1kZ5IX556LOas0P1T4ELU2r43YplPHF97K/+kiIbaxAZ18Rwo6KMiDzA== X-Gm-Gg: ASbGncsnk4KYm2b9Sl4xkmZHtwkdkRWcGX77Nx+YsuMsWqN1/XvPKjmnnmsUcyA0wKc SPCifvwipsx7DRFR5+q0Q+xsmKNRT26g8QeMW7Dvrl+5bGUmFTlR3Gt/1IT4Yy5Mj3DhzyA7N5u GWjsoGv2ckHSnySEbwnhEffMgwGQ3uOtW8MBLkQfZd8Kq2T77Y5wz3QQLUyJlGQa4j2bsb3opLU EZMGFsYkpOR4mjCQDJBDoq+lYuKbdEbBhLA32XYYs2m/txcfO+2J0+5Se/ZTk881UGW3gdkYzGn o876LWPOwDeGy1dICROgO6Q1qVptFO2962tr/LAI6XCqxkuDQhSbB5WOKGtQxYuROA== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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); } -int uvc_status_get(struct uvc_device *dev) +static int _uvc_status_get(struct uvc_device *dev) { int ret; @@ -399,13 +399,41 @@ int uvc_status_get(struct uvc_device *dev) return 0; } -void uvc_status_put(struct uvc_device *dev) +int uvc_status_get(struct uvc_device *dev) +{ + int ret; + + ret = usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret = _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); if (dev->status_users == 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 = _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_v4l2.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 = video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); - ret = usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle = kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle == NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } ret = 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 = NULL; uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); return 0; } From patchwork Mon Feb 3 12:26:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957372 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) (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 CF1F92046A6 for ; Mon, 3 Feb 2025 12:27:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585653; cv=none; b=Kx1VwFE0cXbzLY+ilFzBBK5cgVZqBfl6x8vxPeLFXxUUbmiXrX9zgnJLQtLIZ932N6Ns77WrlWQsGTJMyYWXK55L2BF33X8TeiWPOHSCszFyUbecyJYXg7aYSjrg2A0ZiJu3oxXS4/D7sx0JX0HXTZ8SMQkviv876IJTzQwu6EM= 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.170 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-f170.google.com with SMTP id d75a77b69052e-46df3fc7176so37999591cf.2 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=Dxg+ApXfWSysav1sXhFI85tuFqXjyQ2wcpoIlfCUEgLnpxyhWL5mGbjZUr+fs7iO54 GfwH5Cxtrj4M3Gy+ucE1XGzoqFdldPq1pc4nWIxachXvp7Hw4dWpOSOcEI8QrAYMPirN Qcre+b37JO0vEDOGIuS5VvLsRwwb+i477N3xJQunyiS3FpOZ8s7Q5iNMERIuH19R0sni 41InBXljg9rED2UD7vqMRdlNH2Jq+FHsCYtlgR5OLSh57cxfqYDRSzlBJ2X1p2tpl/wu 7Lo/9x2qwOXMl/N4CdkYJDnABS1+MhiRFkh/khWMJD+ajttrQlmA0Or2tQ3B57Uy+a12 eS0A== X-Gm-Message-State: AOJu0Ywa6v7oxGQJKkvRjl6m8+R+EsWfW6RWujXw0KbMl7kGeQ+IBFZ/ JNL6gv+bxXEIVLQX3zihkUwHmii7jDXYF4IgMts7E40Pyzm61yVpUuF1NmauMQ== X-Gm-Gg: ASbGncu1+2GBhKsp1J8iUFNEhZ2tAF8PYzWJHqxFRSKa6AmJ3/2FxZPYbYeciiFq3D7 G0Te69itUFVr7KJtyMQpySdI4JcK16rj9f0FTw1w9Si7c1wRF7VCPH9iCLCvie93nrtlnX9KBrN Gyw8NtUzKY0KDS+WpLSmpsdYn/asKNAEGoeP0fKg9AoKER6IDz/2qIZEqP+ntZalRip4mikE+vo umcHfV+pbDX2SaxOaghCQsY1LrZ49RQKTad3ctbBq/eJT7UYvlGo51nLbgDoCgkn9vNSKgyuwmS tb2boGZyiatEW7VeTUXB5uLwDIHs29cvkjNN1q5fRDDbRb5cSZN57lQ/h6lIBLrS/w== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/uvcvideo.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); +DEFINE_GUARD(uvc_status, struct uvc_device *, uvc_status_get(_T), uvc_status_put(_T)) + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; From patchwork Mon Feb 3 12:26:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957373 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 06F72204C29 for ; Mon, 3 Feb 2025 12:27:32 +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=1738585654; cv=none; b=T71h7vQau1kr8rWf66WLXpXj6gLRyBWAhezsfNWRNzoTV7k5P5Mye0ODsubMHty6qEzdiVEwnXRQ4rYai/5RwnJBS7jPEwQNGVy+hAX2XXbCNVZuOZwPgH9nXZL2fc3RtzHmaG8rCnr8ZDn70IEUf7VxbJbhZlp72VqWn4smUrw= 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.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="GyUiovyT" Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-467a17055e6so52257811cf.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=VYNzB5oS1au8Opb+BR6vVWH3GCqtDMO5dA5AnJEt8Y+aPz7jx8IVJ5Cz4+KWUFU8vC fqLt4CiqCX8zBVwqTHgtKKjzMl1Xdglvj0sEIm+8+RNPFXZ33VKzhJj/9ek2VUl4tEmI qpmJuxn8Q9xGndSNADWEg/JnDllukhlGWmUN43uOKV30fQnfG2RY5Zje15Rx5JCu/TdI +5yiDTX9PGguza3j5lFN4sFFgd8V7hdOwT6Ph7+BqAHiLKJx5KMWZp4Y6jGP+JsaWR7H 1kTpJ8xWnKRMKUR5ANRonAnuq+dNOMUQ0fM0NCF5uRhzkaCjcbKuIiIAFWA1XJWYNiRG xYwQ== X-Gm-Message-State: AOJu0YxXw5okxnYn/tAy/sHypWm9bb5smkg3TEjXmc6KCs2LY5spd4VD l3cVFa9qDUdX94WmvpKE/4m56/CREgWnEcR2xi9biBQLK1WhxL+nCofmbvj3oA== X-Gm-Gg: ASbGncvLWowNGglD63B6ocfYO9ceJlTz0KaB+RvkECvepAg2qaVTeuSbg1x1mKsyzDh VFTYkkLeqvFtKwh95KADqvw+l9CaxG1qZS7KjhtWejeR6jzFIhNs2EiOdeG2VzyLAVGYLSEw6+z lJGZFZ5Pc9yNb5vuL2sEpoGC6kBRLue+hpP7zP8XWmojmQtYSfRs0tZc79dGOEy/Ksep/zBwWJM EWAkbQ2BrHBqsNP+8A8/N03YBcDJLoKGjiWVIDAaGEy6d01XTp30W8Wf3Urhn+MwotEr9YMzM8g pUdmwRWDhRgNTQ+5ZT6rOmKOQx+/qWxfQUuhS73UAoUiYAsU7zvKycSF5aUuN8DfHw== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_ctrl.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 *handle, struct uvc_control *ctrl, 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); + } } ctrl->handle = new_handle; handle->pending_async_ctrls++; + uvc_status_get(handle->chain->dev); return; } @@ -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); } 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; guard(mutex)(&handle->chain->ctrl_mutex); @@ -2829,7 +2834,11 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) } } - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i = 0; i < handle->pending_async_ctrls; i++) + uvc_status_put(handle->stream->dev); } /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.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); + 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; ret = uvc_queue_streamon(&stream->queue, type); - if (!ret) + if (!ret) { handle->is_streaming = true; + uvc_status_get(stream->dev); + } return ret; @@ -851,7 +856,10 @@ static int uvc_ioctl_streamoff(struct file *file, void *fh, guard(mutex)(&stream->mutex); uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming = false; + if (handle->is_streaming) { + handle->is_streaming = false; + uvc_status_put(stream->dev); + } return 0; } @@ -1374,6 +1382,16 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu_control_query *kp, return 0; } +static long uvc_v4l2_video_ioctl2(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle = 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) @@ -1388,6 +1406,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up = compat_ptr(arg); long ret; + guard(uvc_status)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret = uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1507,7 +1527,7 @@ const struct v4l2_file_operations uvc_fops = { .owner = THIS_MODULE, .open = uvc_v4l2_open, .release = uvc_v4l2_release, - .unlocked_ioctl = video_ioctl2, + .unlocked_ioctl = uvc_v4l2_video_ioctl2, #ifdef CONFIG_COMPAT .compat_ioctl32 = uvc_v4l2_compat_ioctl32, #endif From patchwork Mon Feb 3 12:26:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957374 Received: from mail-qt1-f171.google.com (mail-qt1-f171.google.com [209.85.160.171]) (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 5E50F2046A6 for ; Mon, 3 Feb 2025 12:27:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585656; cv=none; b=jt/3OPq5yzMKcB9jWdNG+c7Vr+5KLFrdeX5bBMqvySMzFCKdS5X2bxIb+vY0yPIvUojOBjp+OTS+QsOgldW6iZu4J2cBkQxHVUPRZu3adpwiOUVl2Rkjjc/7toY+Vz1CymWaQDIHdyROkdzLTDhng7OAPYpvp3BXhxfC8CF9kG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585656; c=relaxed/simple; bh=miU1oeGfq2puBnEEsn/CIUWxyN3yf8vwEyCqnsdbUQ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KGn4KpXLqXQ1f5ctUvYyEAoRh8Qhg/hcCEJ7D8g+s0vxwPTj4zujwpUCH0EiGG9fNNaTgxpNM0Jz0G6LorGJ563y9viuAgp4WZGVw10PRsXc3deiFzrDlrb15SVXeVB10GnEHtJvVcrfuA5YEuBYKyiwehdvFbm6nNT4pnNU27U= 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.171 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-f171.google.com with SMTP id d75a77b69052e-46785fbb949so50596021cf.3 for ; Mon, 03 Feb 2025 04:27:34 -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=Y1VXJ+iLy4lpJbxn+ape69CiqPxVhRfjN32UN/sTCWmTle2dyYDbIvc9KaqKjoc1hZ +oDHIUv+Eklo2vLp4JpvaimKE4QZeSMXrQ3KLJ6CH+oLSTPEQRLfonwtxDCgEvTUUND+ 1cfhu8nmIa7Yl5yFS1zR5F36mwljUSr9XV6tpsYXcY55wxYUw8fWutfzt+qJtrPa8X1A BfdRJmRt3rVIErP2HHmafEJdXFPX3n8pr3jHWHd/k+nFF8ciTZV3j63mzdn0P4IVt11J 6CUJtIKlFAECZ7qZ3zHIy69+loe2RQxyd8UGCsyuvt9ezeU6GtmzJm5KMaUXsqQUCG9n SKDw== X-Gm-Message-State: AOJu0YymlB9yWZGaoj6p7UpIrhqbD7gdyQZvOlXp+Bo2mMOPbxA1Nepy 5wVI2Xy986D85TJ6jcsXqt407Yrqq6Cr//mpDGx+2Z9SrhyK3arXdCoBxPTVUw== X-Gm-Gg: ASbGncu+PKgUkloMe4CS9amkauQytqlZIry07YsGJh0pW+7Cil+4ls+od3U6EDtKEIv m9W/wwT12DuPEyGLn3CO4ZgQe5wg6JtI6k6Xkm5pkMF+yFlHLfClvorlIhFgNZ7SN1mjHEzCwg7 ehVviq3PQgJJIpxtMCbiNG/4NLK3UEygDynkZeEkuaoCYkrRWhaqMcBkGg8yY9/8Sxy+ymfEtNL mK4ILWGQ21U/4t3V4c2D00hOMyFSU8cerwABE7dJfTSv8imVZyidP15QBi7g1VuClq6+8XwrOXy qDIf0sj8DWLDqbiO/hqAa044gIHyHw1qSaJBABO9W1oF/C5W6tlj7esVb5t8HTImLA== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_v4l2.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 = 0; stream = 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; - ret = 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 = stream->chain; @@ -680,7 +673,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data = NULL; - uvc_status_put(stream->dev); return 0; } From patchwork Mon Feb 3 12:26:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13957375 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) (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 99F8C2054ED for ; Mon, 3 Feb 2025 12:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738585657; cv=none; b=GB/JKeejHw3BkCgJn5rB0tAuoiaeUmQBNwf5m50xqtGiur041B0P/Ik2z0vwxqjVy042ZrtZqEzHD3V2Ob8Zm4hAnitUKI4jDmQqg/LakIxgw2VipOtcT8byx+VRIIM+RbIVEUtfcpW9pLBd5H7mHUIghKA+MJuiq6yGslhQc60= 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.174 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-f174.google.com with SMTP id d75a77b69052e-467b086e0easo18589911cf.1 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=NL/p57C8cueJE7YIax6mumjnmbm4oaSpD8n4K6kkkzbDEOQBxIMVtxOc7vxsd5oKvS ODypQfikCgihmu3+JQTgiptYnZ7n4r9foAk3lFDBQo06q2y6DHeJCosX30a3a6nAfLou H8CzI9+WSXulhtMfCTW5f3eSQaeihGYkFnJfFPoW/YNriYtj7r7qhy2EmzIADg3U4N9N QpWALNEkLtTgm34DLFQP2x7XTSo8ecVKSba3EdHXFtngViyBQCNCJY6kZpZBBJM0IsTj xX008eqwgNK3aVQpUJhljZUzQmarsdDvx1BsK81GHo4S40z9BTa6BhVSP3EogULD2Q5W qWYg== X-Gm-Message-State: AOJu0YzfHzrJRvpzWKrVRWiXIpQAGH7X/82625wRFLElnqx6woFNQ9we u/i1KRtVMFDsLESyhlKs7iZHsm1meg9lJQyfDTXjBJx7v+WayTw4TFe0jFJLDw== X-Gm-Gg: ASbGncuNCCikq4YirtUu8jmdmoNLEphiPLm0Mw+9+oLShfofn2Ptnmdzz7gp2oGhf+r 5iq/UiTL0VKwGoVro46VSvFW8lCjCbfEkGtE0ufuPl96tCR0gQJerVTONniQohfPc5Cd6HOrFcF NQfCxTNvzNpyzZSVolYfxsrHaGxxVHODfgTM6z07Qvon1QDGaEaty56Wv5E9NwtZW8O9ywheXWl 6STJohLmPRlC/f+NU2bSdl1AKGx5Y0T0GXrtv4eHAuRwpGWEBcPcCq0UQjiLFU49PB/4BFge2DX Pi7suTDXHVRI8AaQS4Bu252XFkdoLfhaDYulan/BVbJjQa2rOjRh69xQ0W6VrqItXA== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_v4l2.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 = file->private_data; + /* 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); return video_ioctl2(file, cmd, arg);