From patchwork Thu Feb 6 19:47:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963668 Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) (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 DFF8D1ACED5 for ; Thu, 6 Feb 2025 19:47:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871226; cv=none; b=MITUaD9pq3eGthQ0RQY8jGhmVMLF/6uygItAk9qI/YYJbeSynP9wCnjToA9asFeBNO9/KMWUiAX6K0AOGmA0QuWIMns2K9HwmWIuRWxYPUrrgsl3sCiyupHZUjQMFCc0+Jfsa4RMC19XfsZkgH8dsyCg/fDRW2WtNTyzrRopY7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871226; c=relaxed/simple; bh=XTNSgJrJEclgdePfJNToDJor8F5x8uBa0UDEkcTlIIQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NLjTXkuWkC76kiIwDtAUaTjKyo4pfoStALKwJ4S+TTg/6PVYKwAa9hmdY5dahYmfHRLfnbb1wtPmvujoAUUcUC687QZ1A4W0jX+IYo4HCdvesTJRF8YxOcodzi+auOt5Ka7pJuPf8S/tAYMUZY6KBpU/YUTUyfDfwKY/yyQ2SxU= 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.44 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-f44.google.com with SMTP id 6a1803df08f44-6e43c9c8d08so9326096d6.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=sXiFdPJYPyNcGmnueZEqb8LXkoXLBDzbRILSFvJeZ88rdxqeP82as7kIwH0/laY0gM FIxe3HTYRyAt2QTbIQON2aNbbPjqTgueUEMjnq456fjl8BLUywnynoDSYNp54Uee2Mud 7iw/36PFs6oDkUWXv5JwonfEuancYVuYusBfqXlp+wS7EsHJYbirFgucsR+wRLAhkq2v ag+iKGkcKs1SAAp+sSEtHWkcKnRgAziyuZHPxE8cqH8wyhiiGkHY/Owj1wgi26Elz72s oruZ+rL0Bje72fqpHN6CDw2SpPxB3p2X1GBovboTJ4cG/DPvxr59xkyxXdIuS60s1d7x pvQw== X-Gm-Message-State: AOJu0Yx6AInwtyiOvZZFW2bXE4iK/2mJfFttHKvSPu2XMR3zyw2b/zeQ L5UGNWbxl3AURxM3ER3FS+//XUzFYBkq5O7AJMtGB7LtuJ33cOBG+lngsgdGPw== X-Gm-Gg: ASbGncsLIXez8nWUYE09wrVQCf5iZPql2UPoEcMCwgiFyyJW25BDw5e/KxzxGnRzVog VaTdS8986hmv9Pxs9BRVQZHsz1S0rYRtuXN7v+xJkt2zAU+UWl52E8K7KuPfQXFsbaohhcbzy4G KNNR/Cp1SltEPf/fIT3kNwot2XLQQbuX3IU/ddDhqXqrpuQxDCgiDdAcZei612L4eZTYdIId0lH bHY3ceVMJPLL66GB721ttrHm1i5sejzWhv/zGF5xYp5sxtPihPg/A7pponipvL9Soml1vF5+vPy EsLkJ0QjcfBOkigTyq8OPCVLkcyKKZNbgcTha2l5ZL0zpJoSPqyeIhx+8ym+D5ypOw== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 --- 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 Thu Feb 6 19:47:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963667 Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) (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 81CCB1ADFE3 for ; Thu, 6 Feb 2025 19:47:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871226; cv=none; b=dmrpkIDiTmQ/Q0nK04Xyg4+sxUF6DMuB1GV8u3qXUziGO/V4ouJ0jV19VSOLd8TTWBckoki1GRXNJKJ6wakGeOAWW+3Bub3hujs2LLePjF/LbSv+LnKqXe/9tO9onIjH+kEZOumOkEcqVPUJ2N6aNrjF7HhlMyz0SN5t/jFXlUo= 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.219.54 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-qv1-f54.google.com with SMTP id 6a1803df08f44-6dd43b08674so11656936d6.3 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=OXKh7y+vp/U+MgbpfcLdyV9X5/i0swUZowVfsKMw6CWMVrA6pY/jjNZwGEq0tMcNSm Olh/AFUG///vjs6bGePWm0c2dsgAriRTvfgg9BT3zgucmWA+eO/OnRvYLcSzwNlKl062 5Jo3hDsOj+ZBK/x5HKOcPEGHpvDzOMvfcu3Da6apXeJHJt5mWZwCuFhFjmfPR9XCqIDu XgeIXrhwJ8vFonDgLkrU5623+hCnZLLRmrIQBwRG5/9cNlpckx6UiK/jtcHsLjSouCVM 9oGUJTHuNLL9w47Ud4ZQ+peWtc3okrWPR1cOJlR5WimGCINsFugcr7nRlGOq4ucKTeW7 9Z5g== X-Gm-Message-State: AOJu0Yx0sCFWcYsg+hidxQyExJ9lb9ixuXYnbKvHAf1f8HD+vzKaEZpo oUv1c1pqvBx95rxDdP6i21eS8qkd5+D3JUSOfpxWiuR7PKzdjPqOMHx2NErfCw== X-Gm-Gg: ASbGncvh6cCwVLVMzifgJzKZC65m4qp9BXxVhBY/CasOPeXms1llDnMp/h79tcT5q9u TXL9i5+urFt5rbKv0H5DLw2Zy/K9A2ORCHSbygetLMXtCy+LG3OxVitS0SUVBLPYDpmEUlw3UzI HgXPfRxMK4i7lca9LFih8TTZdi+yXrKqN9+f72Jo1CARQvRBMbF3zjYpyUTidFcHCNrBbMZLY0q M0G2vj4rXo78pEpstG6Oxn32zoM2mZhVliyy+OQ70XilQuswxMGujwTCraFYCx6imGDXVTyHOUo lIhAoiWl6Bfc/r3iKGv/8CRI7dCcrVg1igt69fHvDe9A3/vXOtUZKWKF8D7/JcTYJA== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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); } -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 Thu Feb 6 19:47:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963670 Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D1921B041A for ; Thu, 6 Feb 2025 19:47:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871227; cv=none; b=S/3ZzxhzsXxLkRXx2ZDiqnKFBJTekdsKcLIhyfDKNmeUb1MSOONApStL4tfWeF6JaXPxsTBoUAzm+SNuhLMEnuROfsRmtdv1KJFNKMAaDYFO9fXU1yKdDt9RuG56ihi0Lfe/dhlJlKux1I1RrQbJUdnacUJhFCcenOE287wpEVY= 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.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="aoMDqbYr" Received: by mail-qv1-f48.google.com with SMTP id 6a1803df08f44-6e41e18137bso12050426d6.1 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=SzsBYB+674WMgihZr/QZKfkPyZ7i2HVXi/m5SOXKmJGLC9qvW3LfVG83Mjc7JD6PG1 mnKrSulMaKAXxC6ieFgz//8UsAm1hImPnOAVk6XVvUD847J+5G5LWlm3ZHmyEvlhsf9O 4fQdYkvE9TJWqJDGrQTmoQ0LU0VE7wJyxifoC3OF4+HpuOSpk7tNsGzwKUjGy5ncc7gX CaFW1RtldSkpDVq7OTpVWpMPU/MfLMQOv2irSL4pPfcGSWhhGNmBQyA2gEeOCnqo029M T0OZZ7BgqfYXftnMtHCP7IZve3Lk7DYHgVqeM23Pa/DL6FfwWDg+yoWvonzRhwOoqBUK 6x7g== X-Gm-Message-State: AOJu0YzF1J+1JGp19usVqORDrE9mOvDJKFu11zU38+49FAo/TKdIqvEy pzmR/qzfFmyX3RuZcB/WmQQ2OgHEJAyIyrkMV+9xkJhn04fnpwhZYCLKwJ8waQ== X-Gm-Gg: ASbGncvJpu3srL/TtKaLh2IqEKMS73ql1Dys+he6UXvX2qPCtyEvoogFcOLDLgnRWcN iSLL1yulKGJAGxnZ3jZ+t4lIk3eONQnyqGVK8kQyB3sZhyhqs7wR4+QRONNXk2pPg3T3m+MYmHv QHGZsTVMyTJ8Co1dk74McbP/6DfPZn6428U8bGLvE5s/4ur/HHzHtGAaTG+I0BUfhMs0wEABkX1 DOFtn7Yhlm7oo9ZRlnXwNx1dSiMcpjD3I77d2Ut078AnGlzKHUKV8PmH4WUlUNh7FvjLpfXVmgV dVzmXZiAfcq3wUUmj+azD3biQBuj6+Dxkq/nNcykg6iiIpGImArMEybVivli+cjxuA== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/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 Thu Feb 6 19:47:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963671 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 039521B394E for ; Thu, 6 Feb 2025 19:47:06 +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=1738871228; cv=none; b=CA10LNzm56VgQ/l2/jiqfAa8j8zhTmnYL+NLPNsrrJ7Rzc2UThVsmb/GP3Z7QoTqc1n/NeacoRYgD7mGwUAPq+wOBSFsvVlKESH/qoM6bO6gc2MuvjVFlVQTjQLijqH6VZfdYKOXBPoacnbTi97/raERTMkdbl/7dzYpo7X7nI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871228; 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=j5xGWTPiIM4I7ogD6SS5cwGaycIvjSgqHvr6Iy6yBYcJyVg7aDT3YT+ahyRTi0/XPDRBUsfM/urisDEtjpmrf1gF6zhoIDjm7ZoapXlDyFt8ktrm/Ry4OXf/zCdhuaV2iitRHlR980CD193FhZhJgbJXRnVW2NgnAFYIgJZjnFw= 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.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="bPKdJySm" Received: by mail-qv1-f46.google.com with SMTP id 6a1803df08f44-6dd43aa1558so10636516d6.0 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=e1dDCVkG28ApV6IkQNxiyUEfxNgWCTd93Pq840QZQxzwfnpe3kWDna4EE5iDMOmt49 4zMM5wQfGxx9NZqn3V0OaMszWMJOobQqjSFANQ12KMTA0unNF79QmjvW4zY8XcTlAb4u t1SCCmPqKO4pbCE8o+QO2Qh1yYUf6DHyIRciywxD05ro/i7dX2F/fzc/bI/3mAInTB52 vbXyqWCbmgEz/QBj4FkzBGz6ZISo8ekSqsDd/XawYrwdhg4zl91LDkpRQRzfxl9vOHJq bR3F3fglb1HY8vGi3WPeijCVULSFCA3q6TZ9HXpKMtvrLN/ZlHqrFbp8ccxfo6kndUZe iIBg== X-Gm-Message-State: AOJu0Yw9SsaairCyhuhQNt4A7aVe3dJrlXGyceo3xDWxMRk92XPpkLy1 ipQrPpbcD8s6z1N+VHHPb73jYMwkYG50iq3g+xBMzeXGU3WwGPcdzyDijeDPEkKDMyfl8s7V2r4 = X-Gm-Gg: ASbGncu/HZh6P2mHu7S2ZZPfSdPhvdaCSjySOYQ3PcYE8jqdX4/ONEW9H0AokMHwzba BICoO5DTE7Qu8RswXlFasqW9G9JSNEVzMrGmaN0U3lIEbWnJyT7fTIEvYaf95NqrXwovzXSaeAk Z4bBroU03y7iT6cR/tMJlmFo1CEQ7zYtb2TxsuGp7fwG5+UAUWwJv6K5rlnGXLZn6OyZz3hA2+m pHoaYMGuYfT+h2Fai6eC90uYE54/cgLK1aN3Go9nacf37iyxOCPWg59sjwXT+egKm85QxYHOwbE tKvtE7qg+nS68N6RhS2PVi6rjDI33Irp5j7cYdIP4P0SQbEHAtLnWxnxFdaL17+BMQ== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_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..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); + 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; } @@ -1388,6 +1396,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); @@ -1422,6 +1432,16 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, } #endif +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); +} + 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 = { .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 Thu Feb 6 19:47:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963672 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) (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 2A1541CD1E4 for ; Thu, 6 Feb 2025 19:47:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738871230; cv=none; b=ocrqYQzn4la6WPEZZbzxrv/tvhKD41lu7huMwSdfwwXokTeovgZwS2I6r1Bnrsgg+igHahSoSipD/MpWMtqfyttWj9DgeTVhKsEgD7dlTkInbo640By0UYC6VM0L6y9w8TbN/ooZe/PrOBJ0wQiZIY/f34bzunoblmpLZJ0UOXQ= 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.52 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-f52.google.com with SMTP id 6a1803df08f44-6e17d3e92d9so10402166d6.1 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=LSdoZCUIUc/1PgZKGxBDWOnuIcBFJwIwXG5HVlqnsy2W8rlM8vU57rYpfuVfFh52WP Cu83Cv6cfB1Lea9FAS3keIzw3/EP0c3nuuGJg0L1q30PMm2Y1nqAz94oso5cQDABXgub KAyFRNACtofcTyMu5MUFIxSstqWWu2TdSVltZPSQPjQyAMM9X09+Wet4KB48eAIfvaJG IvYIEhnQLOb7TMQYRFZ+gKrrVXq+W07MA2kWby18tx/SWNKKD1IaV7nrIUdvSNWeNsi1 fe9txn4POqcGJqiVN/J2KtyHQwLT/H0guok/dPUGuna3pSt1yQKRLAcztRxDdj/BeeQp bURQ== X-Gm-Message-State: AOJu0YwaVPcZJB9HsqLcCNTNQ6rEY7Yo1p1+Jpy826fUV14OYL6N6jVL MP0jkGEdJZ2qHmWMtyCXyzS8gGHW3pQzZ1iKCptuG/tB5wQs5wjOjyCGgMKHVw== X-Gm-Gg: ASbGncs2SU51VreS6quhRdJ3KygMxeMsjjFqbJNzZu1joSqkg/XiiYzftaSI/hGv7Bg dfr7v4OLLKwffPfutcWaYVBxQcaYi3q3ng+DJowMtST6Xl/SojN5kr7rZLNHYbcaYsWDQ3fE3Xo BhMcB40Cezw4P6cDtQwVoQUYW17GV9sguPoHAZfuRE90ZMnqzQPoibNZPCqySP74esu53n5qALo 9J+1P184AlfzqKIBvcdF5COuDzABv7R5l0gDCvWla4djsUI6dgzGUBbgLo8Gu6onqD49YIJpPTF CXsw+ygISSDWu1VBSRlSn43mtvDpp0LO/JyGqUw5TyF4uRCAuMEhX9hvSH86S8hcAQ== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_v4l2.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 = 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 Thu Feb 6 19:47:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 13963673 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 9A7961CF5E2 for ; Thu, 6 Feb 2025 19:47:08 +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=1738871231; cv=none; b=kxX1YoaiOI379oUkh5lPAcJCL0MDT2pYtG9nUSsSlziAjcqq4OYupFKWm2HyryM9EKjRJ5i3ILRM63SXVY6iHBZtSNWc6MAKUlEDtpXTZfhOzdJ/SKb5l2oklLBDucUEDe5lrSkIhEnsWwo60vnDg9OnUJfDAowJST0+EDvO7Tc= 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.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="VhZv9bUN" Received: by mail-qv1-f43.google.com with SMTP id 6a1803df08f44-6dd1962a75bso10035526d6.3 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=ZisiIBzMu1wkEBzTnU1yB6g9Xy2EZ2mMPau87isZlUbQGfBeXIFUAMbHxFAjrMS+I5 JAxGj09NXGGdwu4zcd6vYUHN6gCNOeYp7uk919oPzNPPGrsHkPSY4TvNAbYIMyrfXJY+ RkD1x1e9VhkoS/J67/Kl6M2m0/zvzcnG/hjHd95N/iW9l8fAJ2rExdbs2GH76NbpnGIi A57lekQRNlBLJqfhWpphZFogSRfW5JKMZqvO97uOcNxfDw4wxfzbAYjd6KogFREoRG3R UZ+EB5xKT9vgEOdK/AnJ7/68Bf3oDNivE2ZvMA57lmhL7DEM1YnXGyPmhB8t4zSdWVcj TpTA== X-Gm-Message-State: AOJu0Ywv5tat9Mp/lCX4Pndd5VJn86PfcpJ01cPHD2CeszLZ0dndCEWA jiBUJRgy7Kbv30QvSgIGfNZUJmg9YOsH6BiSnbLoYOVLHoO7n+c7lkLUBddEC74Kn1rGSz2Tsas = X-Gm-Gg: ASbGncsEHnWfdr83q3i2NMa5oztnY5tcKhnyHXb8p5s3Wft0I9QUHKZgUfBJc4IB052 6t3eRrw1xSQR9yXd63B+Ld+CKGz5Vgr1n1RzxYaXIG/ouBlK/ly7fHiaKviGIq7Egv2Y+SdljSb EsH8Mjezod03A7dAdjiMH3BolJAERqWl6yedg94jv5YRKSi+MfaFQOvoLJcDjE1DPHnGXllTakF DPtP5sGmlWogxOjmg3vNDyh5holBaspjj0RvuUfw/x8jdQY4ASqSecwdMiDs8ZNCikgK5RoCJAE ePO0KvXYcEsfbIEEjrba+UuTd/A2ll2e9G2uVCi1UiDrDlyuNIZ3c8g9BuKHE0vlAg== 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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_v4l2.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 = 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);