From nobody Tue Dec 16 07:13:49 2025 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 630471D6DB5 for ; Thu, 27 Mar 2025 21:05:32 +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=1743109534; cv=none; b=UA+OnjJd4F6DPadxry8Dcrp7DdsuCEUqcI5fkXTF5ccUFbEnbN2fN4kA8/E0S8tDVqZpJ3saUg1r7awWZoclVzJTZMtt4dpu11ngpV3Zr9g8qaxRZqynm0hajrbZDWYwI4FJGa8PN2lcKabyuUMVxSWNiF5Q8KOATQBFab5OW6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109534; c=relaxed/simple; bh=TxX5jUZSYUIVTn11fnkYp4dDoBz40yBHO0WykwsdOaU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bd8L3EhPancf1MBgv5xSAoInils2R44EFc+ppSx73kltPiOLecDss0LAFaBanyybv2ZTUeeT7VsOPn4D5te/gKRvPwIMMlvQJiS241imKN7O1mYkUGYxrnONlM8ig3rafya42d7W9+ECk+iLVz66CCgGUrA4/kQxJSRbYaZM6UU= 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=N6JZakIK; 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="N6JZakIK" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-476af5479feso13390401cf.2 for ; Thu, 27 Mar 2025 14:05:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1743109531; x=1743714331; 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=iPotFYDYSrv3M9XvSy4jMhSd2liyPs79sEtxtKTVJFk=; b=N6JZakIK+stxAfhaLSndx+8gRKWBqgtHsn+N9PTu4QpZ2RENkQKuumT1DJ5U4pJ7J6 Cg2XM5fWIyJ28/I84dwKeTamk1AiHBL/fKodE32y/UNmtQX8i0fh9lySEd8bD1Nh8Hks DaSeHZTvy3oGV8ZrWk7DVDwfsmtWwV11QAnJI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743109531; x=1743714331; 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=iPotFYDYSrv3M9XvSy4jMhSd2liyPs79sEtxtKTVJFk=; b=BW8Ip6IJ/X2LlxEKxIFu674ks2CGUWOTo4lnR8roff66sLm2vi4KE3hFMtcLEzbXwl qaNFKHWKFP2jy5Mo1vpsuY5u/Sl0iSJkS2ikmLPTSlnRq2z4y1eGKjeyBJ6C6hBl4R9p RnwLlEFZDl6ZbQLAIPl/Gq38RjhRGLao8h5qWK48zHE9o8qg7G1e4D/1fU8O8MSx3dex 1drmv2UmIox3T+QxY0SYVEiMb0tBV4Ns0gfaXmzpZh0IkcXyUCcc/tzmawvY3ohaoIW1 r42lXU5s7QKgcsbpGCztMzhYYcAwcACfj9lVgaZY2nyaS3aWhRU8Z0hjixnMpRZRFkto xZEw== X-Forwarded-Encrypted: i=1; AJvYcCWYX/258Ryhri3k1GTvclXNB+ibmyVisSrLxtzWThdvlh4dYqU9Q8q9cArbetU4SNuUubDGYoxHkIsYzbs=@vger.kernel.org X-Gm-Message-State: AOJu0YxqKG4ZjsKWZITcEcKtcD+I4u7Bl0qrZfAyS/lhZJRQv3O0v2XP cMR3tX1lITcFuezwJ88STvoTHszkvRKczXAlrw/bPrXQFvfY2JdDz9MInk6eMA== X-Gm-Gg: ASbGncvzGElzj11+oBv67gSDzK25AIfz+HVtLuHvoSetPQhsvsk0Fon7A8sbHBpi7so AKRhkMB4/X6ScrpiKNyDXCZeZywBExkg/mNnrzUn/2LlWw8Th0v9o1LkWI6PW0p7qNL2DIwTsUC ZY9J+RA/7xUoe8CzRZqjDRMk7SpwYv+c3G6HwSExZ/ucUp/TTeNcjfujchdJhqsxuSNLZNjMSps Vu5nFLqC7VDcn9Dl6VztD2inMtiYfWSXJbrVJlASTG0IgDr+TZbEdGbhqZrHZZv42FwQVi/teC4 6+B1gCi6c/oceaswXtzaoxT3eAI77SZ149+b27t+WxtwRPjGiiEEmOv3ufbla3FZHrHkQO1t24b fAYW2XQE1MQTzTKPLrJdJUQ== X-Google-Smtp-Source: AGHT+IHj7YZZ63MNCoigRdtgWCTUNBYNqwOaQ+66Py4TXbFhO9b7we5UrotYcuAestOWglqJsI/5kA== X-Received: by 2002:a05:622a:1928:b0:476:701b:d7ff with SMTP id d75a77b69052e-4776e1ffc15mr72943421cf.41.1743109531048; Thu, 27 Mar 2025 14:05:31 -0700 (PDT) Received: from denia.c.googlers.com (249.240.85.34.bc.googleusercontent.com. [34.85.240.249]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-47782a1070csm2275421cf.9.2025.03.27.14.05.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Mar 2025 14:05:30 -0700 (PDT) From: Ricardo Ribalda Date: Thu, 27 Mar 2025 21:05:27 +0000 Subject: [PATCH v6 1/5] media: uvcvideo: Keep streaming state in the file handle Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250327-uvc-granpower-ng-v6-1-35a2357ff348@chromium.org> References: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> In-Reply-To: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.2 Add a variable in the file handle state to figure out if a camera is in the streaming state or not. This variable will be used in the future for power management policies. Now that we are at it, make use of guards to simplify the code. Reviewed-by: Laurent Pinchart Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 18 +++++++++++++----- drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 39065db44e864b8d107659197dac9ac33b01cf46..22886b47d81c2cfd0a744f34a50= d296d606e54e8 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -841,11 +841,18 @@ static int uvc_ioctl_streamon(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret =3D uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (ret) + return ret; =20 - return ret; + handle->is_streaming =3D true; + + return 0; } =20 static int uvc_ioctl_streamoff(struct file *file, void *fh, @@ -857,9 +864,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 b4ee701835fc016474d2cd2a0b67b2aa915c1c60..5ceb01e7831a83507550e1d3313= e63da7494b2e4 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -630,6 +630,7 @@ struct uvc_fh { struct uvc_streaming *stream; enum uvc_handle_state state; unsigned int pending_async_ctrls; + bool is_streaming; }; =20 /* ------------------------------------------------------------------------ --=20 2.49.0.472.ge94155a9ec-goog From nobody Tue Dec 16 07:13:49 2025 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 292F11D8DE1 for ; Thu, 27 Mar 2025 21:05:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109534; cv=none; b=OSAKRnreqGOsqEP6nTQQ8XFCkkhvvPKxHxzeXosvHKjLav5T8U8GmUY10PvMcXY4l36Oz1kelpTrPKVzJEKItBDd7vtEVCtfbtVcuvBHtQXfOYJEBP+g0lLDvhpH0ETAzxHrJitCkG8RhBQon4x3cLwXslsQCs5g5lOYnpWfDI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109534; c=relaxed/simple; bh=Ban9ucLuyCpweFGuFMiE9HdQVNFofbA4U8+4eDa+l6c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JXLEzJOSDnLjmg56PmltaWx0s+nXC1TOopJpJMJ9euVGnn57jUa8PUU2l2Sz5wOWQPSzO/vCcbKNYVDi1fmHXVNdAiF2Hyf9Iy/9kNn78pZnijaC72mx1NDS5Unw7R1KuNLao63eFYSnAjGIzpW7xFsjy6Xc0CW99Hfw2MiYpU8= 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=nIC0hVxD; arc=none smtp.client-ip=209.85.160.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="nIC0hVxD" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-47690a4ec97so15203001cf.2 for ; Thu, 27 Mar 2025 14:05:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1743109532; x=1743714332; 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=93OnqkciQ2LvdVqMgeQPBfq7/a3PEpY4NcvhZpMQ4n0=; b=nIC0hVxD3u+Dw5UNozgRsAUgngBZmq+DFkMHeAcbHEgc+AvYBI4QesrS9KdKBVzfvr aZeX17P87Lq3QBogxoLAM4ZT5enp9dVOuBO8WVEwwY+Bk3XFWJMuhNgBQ6qHXyG2Yb4n IVpzeh+yl+8FP+GTBVmgcGXp/K8wO58C4NUjU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743109532; x=1743714332; 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=93OnqkciQ2LvdVqMgeQPBfq7/a3PEpY4NcvhZpMQ4n0=; b=ooK9HpC7FFp2qZoXsRblwBJVdvAcSvDInSab75ECXOEl03ogUC2HMk2kpcUTltIWh8 bdP5DH7MlMliGYy8WHAl/XpIA2eS0jQOGYgMJxcavpj6KYOpFparHrL4jPA6mr/miBh3 D8lzzwSmlZBWztApvGIRpMCq3oIctDczPjtObrbjowca4PQcMrZuTMHLyyZ5Sv9heXkN Z1Nb82ZOdyxMX3DvuY5wSOkU3Q83qjFlbXNv5kJEfCb5ctU1erZAYPbLSvCXbKhTd6BS p7MLkUQrbkgr4Uulc0GEaGTMvuPyOxzTIGj5CpwBMVvJdv5VtwPdHEUJtVD7yyxr+E6D f2xg== X-Forwarded-Encrypted: i=1; AJvYcCXqBj1qeiMTrL9d2ZE38YrUBPpkUqZ9bY8eDmOWrVqs4Mmxo+0dHJM6Dpp3v1LrF3ONfrgeFOogYhyIQRg=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/uUJYVZbwEP3DewEwH7+b1knltH53dIHaI4XWKDaDaJHYiYJC /7v2BzC6OoTNWTjLu/eTsonFS2aBQ3ptMqXxWZ5HoCdKzo0OYEydZ3MgBM6y5A== X-Gm-Gg: ASbGncvExzlFE1J6crSW8CqL0kS6Ien2Hh68VCN2+FSop0LOfvZ2nWYP5q0RyparFDq YAq1tywz5bV5qHB1mAwocz4W5WgwCu7Sal5NWQ9cqP6/7l4YxwyNKsMIKgZlwzX8mnoBNO4D9Jn zCFhtiZdbTVXRi2lLta5YyrocAV1v+ziz9gRKgClBtEaNiBYwrR7dgzpl+Cg3abdthmUyUffVJW HvQ+9UBkO3nZr1R0bERRE5Kp6eLMzL3ny2DshkZK9FfjIYtR7b5JQMBPTAR6gphHuU+S8TMQb+I QlsZT/n7UPR3ci6CZBoDuJb+gGGacptMQaOXmefhyj1plBs1TJ5Phyqr6MuMMe56TdapOMC9svy SchNrn9cK5LQyMwpLh8Q7lQ== X-Google-Smtp-Source: AGHT+IFLl4a4+W+aZHMW6dq0F6sR8OwWQrPiaIYCVSTx17LDuLrqPR9p4njsirc2w/NtJeAt7tcWBA== X-Received: by 2002:a05:622a:4a17:b0:472:1225:bd98 with SMTP id d75a77b69052e-4776e1e746amr114724211cf.50.1743109531874; Thu, 27 Mar 2025 14:05:31 -0700 (PDT) Received: from denia.c.googlers.com (249.240.85.34.bc.googleusercontent.com. [34.85.240.249]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-47782a1070csm2275421cf.9.2025.03.27.14.05.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Mar 2025 14:05:31 -0700 (PDT) From: Ricardo Ribalda Date: Thu, 27 Mar 2025 21:05:28 +0000 Subject: [PATCH v6 2/5] media: uvcvideo: Create uvc_pm_(get|put) functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250327-uvc-granpower-ng-v6-2-35a2357ff348@chromium.org> References: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> In-Reply-To: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.2 Most of the times that we have to call uvc_status_(get|put) we need to call the usb_autopm_ functions. Create a new pair of functions that automate this for us. This simplifies the current code and future PM changes in the driver. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_v4l2.c | 36 ++++++++++++++++++++++++------------ drivers/media/usb/uvc/uvcvideo.h | 4 ++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 22886b47d81c2cfd0a744f34a50d296d606e54e8..1d5be045d04ecbf17e65e14b390= e494a294b735f 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -26,6 +26,27 @@ =20 #include "uvcvideo.h" =20 +int uvc_pm_get(struct uvc_device *dev) +{ + int ret; + + ret =3D usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret =3D uvc_status_get(dev); + if (ret) + usb_autopm_put_interface(dev->intf); + + return ret; +} + +void uvc_pm_put(struct uvc_device *dev) +{ + uvc_status_put(dev); + usb_autopm_put_interface(dev->intf); +} + static int uvc_acquire_privileges(struct uvc_fh *handle); =20 static int uvc_control_add_xu_mapping(struct uvc_video_chain *chain, @@ -642,20 +663,13 @@ static int uvc_v4l2_open(struct file *file) stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); =20 - ret =3D usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle =3D kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle =3D=3D NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } =20 - ret =3D uvc_status_get(stream->dev); + ret =3D uvc_pm_get(stream->dev); if (ret) { - usb_autopm_put_interface(stream->dev->intf); kfree(handle); return ret; } @@ -690,9 +704,7 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); + uvc_pm_put(stream->dev); return 0; } =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 5ceb01e7831a83507550e1d3313e63da7494b2e4..b9f8eb62ba1d82ea7788cf6c10c= c838a429dbc9e 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -768,6 +768,10 @@ void uvc_status_suspend(struct uvc_device *dev); int uvc_status_get(struct uvc_device *dev); void uvc_status_put(struct uvc_device *dev); =20 +/* PM */ +int uvc_pm_get(struct uvc_device *dev); +void uvc_pm_put(struct uvc_device *dev); + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 --=20 2.49.0.472.ge94155a9ec-goog From nobody Tue Dec 16 07:13:49 2025 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 252651DD529 for ; Thu, 27 Mar 2025 21:05:33 +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=1743109537; cv=none; b=Op9AoB9IkaUw8R+1ri8cvfbnen6isk/0pDcjo5/HevJ2fzDL917n1Btxqp1MbSIN0r5SST2UgAeGaNVWgOeiruXwhlqW8UKeAx7dgOIalJhgQTjBEaFeQeVKHepSNeamC6x/f3pUFzFPZVjGL28Z3h84guCPp+HIF/o0NUQP+z4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109537; c=relaxed/simple; bh=UNUEZP3w8YZerWod8kYMkdwNDmb95xdLkSVLnYJi2iY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PgmsHGwC+cx6UZIGG/BlsxV7VCA2Oxnv8f2iAvTtVxLRU2uSmXWcn61qusrpDVhRH++IpYIcGRKSInkhQAxDNCMzg6pfpESmVEF99zZeaLjqpiVRCOpTexSIUCfCS6IV+mAVzRfd/dDlrJmIeq81O8XBTDO37trptHoWZLk7z0A= 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=AKI4ftBC; 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="AKI4ftBC" Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-476977848c4so16657791cf.1 for ; Thu, 27 Mar 2025 14:05:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1743109533; x=1743714333; 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=UyF9yV+q7HdGxjYeapc60IDH/reeh91Du4rxUglSpiU=; b=AKI4ftBCMAhinHCJz6k1VCHo+xhVqgjGYOOEhiwsHpxgVCfdsIoSNXNCL44yEi/XOE dsqEO5I4Ut513E6cQWKxDz6Faf3Eix3lhRYayWq/1XLTFZ+u8VZNPdwubqixvhdCJuLj o0P9bOA3gF9MOzk5Z8FAFL+8wF5oNZyYjHLss= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743109533; x=1743714333; 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=UyF9yV+q7HdGxjYeapc60IDH/reeh91Du4rxUglSpiU=; b=wTkPAg6YOz5EZG3W41eSPj6hILS4tjEJgyKW7NGroQri+qKywa8ZOvY3Eqzad6Q0R4 vV9eBqxAGkWKiA+TTLEAeF5mk0iAsgSZN7szjMhxovW6WPBOeugz9KnRJ6nzj+ikGL4+ /mw/i3T03w4pWTEWEcDkT6zQHqw0ghJW97q4+Jwqdt1UAVypMxeY0XrkJ+vK0K0AowoB ZQcKow+LipjqXytZvp8gU+p1Qfk4ZJ3AELIeOqYfXU0+1n/Ka5FmXrG0nPnGFvP8xj5P d17yG8z4Hvze7ukloWFIet5ocsimgX+8S9MOHmbPtmQeDYhhlqE+DF14nzJ+T4H34WyF Cf6Q== X-Forwarded-Encrypted: i=1; AJvYcCVDWUh3938vKLlULrljekmp5pql10SmsVgMKXEOdWGKh/ULCO8tFkP0Q/mr2+zl20MiKnWjsRPE0eYZukk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxh0JKSg8NAbIrTgiBWCxWaIKmBKuadh+X1Lb3KHA8pzfqTflGM mCQqtn1gKPlfbEmRJo+sNbyfhtLM/5ZbrEWmZaBbDMc3VP8EtJ1zo67857K4vw== X-Gm-Gg: ASbGncvDn7VWxxg2OAs5vu6CSEjBQ72ucLsMib5xRk5Jl40KqIpYdBmHa3zQUUovUaF tb8LqFaqIkhc+aXYHYHB7oabJazoUA7toqkKd+ORrqPBw1X00nt2qPBBHltEILJ+gJG3CdWS1om Qv+hH1JjdEJ4/FT+MUF9pj9/7r6Q6Ua9CJYHDwmRB+eJHlRPnUBcrrsXjRHMTgT7PJgy4kkbNGi aeEaluNw+Ho7EaRqU1RnaeEeYPxI4ppreQGnjwxlYRYXyrlInQl4CTLhi+lwg4kp01eQEgV0ki+ ba+wBDoyGo9fy5QZ+oe/PY1RS/YV7h6GrJ0m6IWoPZE7oWik0xa0D/+eUF+4UNSBQgFJWjomKDl Bfa//gGP8/4WQpSFXO8nLKg== X-Google-Smtp-Source: AGHT+IFuMMc1va0NxXgRq16C7VpNCV4wcIWIZAEQC7Wykd+RvFsh2EJN4046LsbERIAF/4anKeaZJQ== X-Received: by 2002:a05:622a:244f:b0:476:77ba:f7 with SMTP id d75a77b69052e-4776e1eeb22mr83967141cf.34.1743109532717; Thu, 27 Mar 2025 14:05:32 -0700 (PDT) Received: from denia.c.googlers.com (249.240.85.34.bc.googleusercontent.com. [34.85.240.249]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-47782a1070csm2275421cf.9.2025.03.27.14.05.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Mar 2025 14:05:32 -0700 (PDT) From: Ricardo Ribalda Date: Thu, 27 Mar 2025 21:05:29 +0000 Subject: [PATCH v6 3/5] media: uvcvideo: Increase/decrease the PM counter per IOCTL Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250327-uvc-granpower-ng-v6-3-35a2357ff348@chromium.org> References: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> In-Reply-To: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.2 Now we call uvc_pm_get/put from the device open/close. This low level of granularity might leave the camera powered on in situations where it is not needed. Increase the granularity by increasing and decreasing the Power Management counter per ioctl. There are two special cases where the power management outlives the ioctl: async controls and streamon. Handle those cases as well. In a future patch, we will remove the uvc_pm_get/put from open/close. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 37 +++++++++++++++++++++++++++---------- drivers/media/usb/uvc/uvc_v4l2.c | 39 ++++++++++++++++++++++++++++++++++++= +-- 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index cbf19aa1d82374a08cf79b6a6787fa348b83523a..3fad289e41fd5a757f8dcf30a62= 38c694fc4250c 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1812,38 +1812,49 @@ static void uvc_ctrl_send_slave_event(struct uvc_vi= deo_chain *chain, uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); } =20 -static void uvc_ctrl_set_handle(struct uvc_fh *handle, struct uvc_control = *ctrl, - struct uvc_fh *new_handle) +static int uvc_ctrl_set_handle(struct uvc_fh *handle, struct uvc_control *= ctrl, + struct uvc_fh *new_handle) { lockdep_assert_held(&handle->chain->ctrl_mutex); =20 if (new_handle) { + int ret; + if (ctrl->handle) dev_warn_ratelimited(&handle->stream->dev->udev->dev, "UVC non compliance: Setting an async control with a pending ope= ration."); =20 if (new_handle =3D=3D ctrl->handle) - return; + return 0; =20 if (ctrl->handle) { WARN_ON(!ctrl->handle->pending_async_ctrls); if (ctrl->handle->pending_async_ctrls) ctrl->handle->pending_async_ctrls--; + ctrl->handle =3D new_handle; + handle->pending_async_ctrls++; + return 0; } =20 + ret =3D uvc_pm_get(handle->chain->dev); + if (ret) + return ret; + ctrl->handle =3D new_handle; handle->pending_async_ctrls++; - return; + return 0; } =20 /* Cannot clear the handle for a control not owned by us.*/ if (WARN_ON(ctrl->handle !=3D handle)) - return; + return -EINVAL; =20 ctrl->handle =3D NULL; if (WARN_ON(!handle->pending_async_ctrls)) - return; + return -EINVAL; handle->pending_async_ctrls--; + uvc_pm_put(handle->chain->dev); + return 0; } =20 void uvc_ctrl_status_event(struct uvc_video_chain *chain, @@ -2137,15 +2148,16 @@ static int uvc_ctrl_commit_entity(struct uvc_device= *dev, =20 ctrl->dirty =3D 0; =20 + if (!rollback && handle && !ret && + ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) + ret =3D uvc_ctrl_set_handle(handle, ctrl, handle); + if (ret < 0) { if (err_ctrl) *err_ctrl =3D ctrl; return ret; } =20 - if (!rollback && handle && - ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) - uvc_ctrl_set_handle(handle, ctrl, handle); } =20 return 0; @@ -3222,6 +3234,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 @@ -3236,7 +3249,11 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) } } =20 - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i =3D 0; i < handle->pending_async_ctrls; i++) + uvc_pm_put(handle->stream->dev); } =20 /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1d5be045d04ecbf17e65e14b390e494a294b735f..8bccf7e17528b62f2594c0dad99= 405034532973d 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -697,6 +697,9 @@ static int uvc_v4l2_release(struct file *file) if (uvc_has_privileges(handle)) uvc_queue_release(&stream->queue); =20 + if (handle->is_streaming) + uvc_pm_put(stream->dev); + /* Release the file handle. */ uvc_dismiss_privileges(handle); v4l2_fh_del(&handle->vfh); @@ -862,6 +865,11 @@ static int uvc_ioctl_streamon(struct file *file, void = *fh, if (ret) return ret; =20 + ret =3D uvc_pm_get(stream->dev); + if (ret) { + uvc_queue_streamoff(&stream->queue, type); + return ret; + } handle->is_streaming =3D true; =20 return 0; @@ -879,7 +887,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, guard(mutex)(&stream->mutex); =20 uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming =3D false; + if (handle->is_streaming) { + handle->is_streaming =3D false; + uvc_pm_put(stream->dev); + } =20 return 0; } @@ -1378,9 +1389,11 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu= _control_query *kp, #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 +DEFINE_FREE(uvc_pm_put, struct uvc_device *, if (_T) uvc_pm_put(_T)) static long uvc_v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) { + struct uvc_device *uvc_device __free(uvc_pm_put) =3D NULL; struct uvc_fh *handle =3D file->private_data; union { struct uvc_xu_control_mapping xmap; @@ -1389,6 +1402,12 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, void __user *up =3D compat_ptr(arg); long ret; =20 + ret =3D uvc_pm_get(handle->stream->dev); + if (ret) + return ret; + + uvc_device =3D handle->stream->dev; + switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1423,6 +1442,22 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, } #endif =20 +static long uvc_v4l2_unlocked_ioctl(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle =3D file->private_data; + int ret; + + ret =3D uvc_pm_get(handle->stream->dev); + if (ret) + return ret; + + ret =3D video_ioctl2(file, cmd, arg); + + uvc_pm_put(handle->stream->dev); + return ret; +} + static ssize_t uvc_v4l2_read(struct file *file, char __user *data, size_t count, loff_t *ppos) { @@ -1507,7 +1542,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_unlocked_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl32 =3D uvc_v4l2_compat_ioctl32, #endif --=20 2.49.0.472.ge94155a9ec-goog From nobody Tue Dec 16 07:13:49 2025 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 D69DC1DDC15 for ; Thu, 27 Mar 2025 21:05:35 +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=1743109537; cv=none; b=IAHn5jSQmcXgDUA1vW5zP8gAnlmzCvpc1a2nxCBn3+Q5QteSAIBGzCKa+/6vzuUnj3Soj0kn5kROdDutay3NUwYDaDwkk4nnZGw9H9WTzNSx+UlTgUw2ptlRYQjYhj4DTlRvBARW9nr6P8Yqb7JxP2vwBtqgO73Xw7sFg5+OuSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109537; c=relaxed/simple; bh=L2k5FR77Tv3dGgxM6ZctNp7m5GtwwnmXlQlqknO9PRU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ugy6Xadp7k9LL4YR43VUjRxaAa1PyNFz8uJmBUPcQG4bzPm6Ue9XcteysYK992tLvUsEyK948mtgF+FJqAatKVjkbXHNgQmfFpP4Y5Hnc4b4jIMoriQ//eHHvf3l/SFRkR0Jctd3qfoi1CxLUKYgATJQOtbEWDhcip4oAkP25hM= 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=PNbOqpLw; 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="PNbOqpLw" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-47698757053so17748651cf.0 for ; Thu, 27 Mar 2025 14:05:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1743109535; x=1743714335; 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=aVmLiRlNaL4IhVq1RzG+BkUyav74o5P1Qd0pmx4xmZM=; b=PNbOqpLwsL7DDS66Nn5zOmQhwDPb/UKgDR647HHIC8H3x24vngjCh8e2jBtMQqQWq7 8PfzPvKgzrJfpgEe6Sg2Ok5B33oY7Ns1RJfn2Kyonw9A/mA5bnlIeE3yUy98uJtjWKAu C4fdNF1STp0vg9TEoyWiGukOIhtl66WDoot2U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743109535; x=1743714335; 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=aVmLiRlNaL4IhVq1RzG+BkUyav74o5P1Qd0pmx4xmZM=; b=ErwSB1daa7y+pOAhGMeZbsXAmbC0pFdgx2fdHeBDfQA1+EbSjqFF5avdvvV+a1ZZAu B24CxIHrAAFK1l5EFChSACIc8O6h7sOWZo4/5DaGqVwWVo65qWJL2ohyPIgaOaCGa7NI IY3SgtQd7BjcuVYZANeD8Nuu6Skl8YqRLzTH5vC0jeP6XWnFpP9MUNlLh2Ln95H7I+MV X9taUkz5OzUIc6t9pf+4pDrRIshxav3qIjPrvoIhF/nFzpcTeKOu1uyhAQThHKi+yw/n 2DgDCmFj4PY2fBRHYlGf/ZynPxFVtafhtoJHO0rawv5X7GJW0Wfjm0Hr0YzWv17mkM3O 5cUQ== X-Forwarded-Encrypted: i=1; AJvYcCWryC5G/9/Sw2HB63UhHKrl2nIM06FbZ9nShRopncgvy6zroeSGC3cWeN8FfLOyHTVWZXj0TOtvN3g7JiA=@vger.kernel.org X-Gm-Message-State: AOJu0YxWsdEi8K0l43CAWZsCwBsmo07y57YOmEetU0ShXkW/6oaWVuwl EkGpJobghXmroBDCw2oXSt8D6x82SttYaLpUkLhZ15D4O+TYTsWEReTz1tcbPQ== X-Gm-Gg: ASbGncvIjTItEfnB1kma3pry8E/FvlA5eTEkuq8itO2dZHTNz/6aG4/0FZv1yNftu6h viCyL+bpn/w4kPPkAk4KwwBDgPa3DSGGzTWZqMnnyC04t3PlUWZtyft+gpo8faF33uEbuYQRtBK 6JsneJv4YXUdWQtK0UAnGXRUc97qSDC7n48XDI6n6RNxViAb/xMNoWaF0EX9SsS1uzgWmjvPVNv 0M/QUSK2kLvCdPU4jn7YU2OcQY4ySGrWKXRxgTqDc5HjBPB1NN+MruGX7w7D69+U5x+TJQc90oZ G1J/TkLuyxVjX4VtDXoMdkfIva05AmTOtU/FLbM/Sh8i71uVCvvws/FGAFP+HSqn5FxSVKd/2e0 OaTPFyh4thvK8jdnpsfRDspL/oJg9rA4d X-Google-Smtp-Source: AGHT+IH4s+CzPmYUo81SjpBSF5aDALJnJGHTfmsABh7gIk5ZQT5giT5nYJXZvzSrxP/zvH19nGs8EA== X-Received: by 2002:a05:622a:17cf:b0:477:e78:5a14 with SMTP id d75a77b69052e-4776e07a71amr88643681cf.3.1743109534634; Thu, 27 Mar 2025 14:05:34 -0700 (PDT) Received: from denia.c.googlers.com (249.240.85.34.bc.googleusercontent.com. [34.85.240.249]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-47782a1070csm2275421cf.9.2025.03.27.14.05.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Mar 2025 14:05:34 -0700 (PDT) From: Ricardo Ribalda Date: Thu, 27 Mar 2025 21:05:30 +0000 Subject: [PATCH v6 4/5] media: uvcvideo: Make power management granular Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250327-uvc-granpower-ng-v6-4-35a2357ff348@chromium.org> References: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> In-Reply-To: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.2 Now that every ioctl takes care of their power management we can remove the "global" power management. Despite its size, this is a relatively big change. We hope that there are no size effects of it. If there are some specific devices that miss-behave, we can add a small quirk for them. This patch introduces a behavioral change for the uvc "trigger" button. Before the "trigger" button would work as long as userspace has opened /dev/videoX. Now it only works when the camera is actually streaming. We consider that this the most common (if not the only) usecase and therefore we do not think of this as a regression. Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart 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 8bccf7e17528b62f2594c0dad99405034532973d..0f1ed0387b2611c8d21e211afe2= 1a35101071d93 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -658,7 +658,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__); @@ -668,12 +667,6 @@ static int uvc_v4l2_open(struct file *file) if (!handle) return -ENOMEM; =20 - ret =3D uvc_pm_get(stream->dev); - if (ret) { - kfree(handle); - return ret; - } - v4l2_fh_init(&handle->vfh, &stream->vdev); v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; @@ -707,7 +700,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_pm_put(stream->dev); return 0; } =20 --=20 2.49.0.472.ge94155a9ec-goog From nobody Tue Dec 16 07:13:49 2025 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 C655D1DE4DD for ; Thu, 27 Mar 2025 21:05:36 +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=1743109538; cv=none; b=MTafcDzenLNGHPdYbpJUIvrRSSzOlRRgzWAoPO8e9oFXwt3008NtDwjr1EOpbPZ6VVSn50mxVp+asbls07CEPF8ZFsEfHJ58/tipKN4BNPk59tGkXhJO2x/9QV+IR5SWWemcvTe+NHBwGjKtwE/x/cIu1K+M8HYfOGUyRpzZBVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743109538; c=relaxed/simple; bh=u4IW1YMngcRYBzzFD/tv5aieQQ3z97khfAc/wS3zzUg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gacMsdRMFrVHBtxC7H7R5KFnQ5+HaV5nfxDcNeEnyn9bH9oc3ePFQYqY6S1wOnvJ+dU+w5gn6X6+C1gIThJd9S9U2pt1KH0orlMJFQF8zMWTMJGvjNwsUDhb0Jf4wgNFe/y96AHFhAQ5quPYhjfOxXNEZlGAgTYRO4zpjOVc5O8= 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=Cv8Qi2qn; 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="Cv8Qi2qn" Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-476a304a8edso14541271cf.3 for ; Thu, 27 Mar 2025 14:05:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1743109535; x=1743714335; 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=4KwjlyKhAU+wYuskPmvHPeSJQYXWx/0fJXM8H3E5Qeg=; b=Cv8Qi2qnhzE3haful29TGG0L2yPqkNpR0DQg5KHrGCJF/L0YyryKSG8LSep9LcVbJv eWdoelib5UfKTmMurcRn4xjnfQLPS7WMeBeNi5x+QVmdAT/PIOSyqwpOmFPoY1WRqCmY jrL03262tlf0Bh4K0Dcc2ZVOW7+/2BV02q/Io= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743109535; x=1743714335; 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=4KwjlyKhAU+wYuskPmvHPeSJQYXWx/0fJXM8H3E5Qeg=; b=UuEj6OafIV3xJoomqrp2Y54aEDkb9dLm0q5t//ZSISc8BareTGAR+xBBvFs0JBpHbR Fs0Q/L/3gTeUjQsSd6UovXYxvof+DlCgNs0FqqcY+UgBjftJqRI/Zl9wmXyYA4KII2th sn2b3p1cJ39ju66UcC99ih4h+yJ10oeOR8HV8G9JGL2yolGpDeoy5SIIek8CR+WnIbrO dn/QYzPK4wv9I+2c5b4Xyz7RbVCw7cmp4xife5cnQGNqH1zludihLJcaEZhXGRB+mEVO tjmQymDWHBPM+QrVKwqDXGlvnq4rwP4CQZYat0qQlxau7ZOocWYWNxOuikUdcoByrUBX aYug== X-Forwarded-Encrypted: i=1; AJvYcCX5IYm2DCdvOdOPAzU2Bl1L1ZWsEnwUXq6Ws/PkTPtCs+WYYE3kSNAGiNKKZ6TBEWBG1aNG70grOMpH5Rg=@vger.kernel.org X-Gm-Message-State: AOJu0YyBgFmlOnw4Ra9zlhPMZHVTd6QwqDu7rStTwl1+JDhWDMifhOYR U7z5wsFwRvRPCyOAFh4R/lvTdKrxf73+HlbkNxfUmPpsxQrKpvd1axu+vktznTyp+Pjy29VVyGZ wS514 X-Gm-Gg: ASbGncvdEG8204/YrbY1o/bGvqtWnxo8c9/t35LEwXOfs9vy2LJgr9jPZhePGp7Ny0d I+ZAeapWhQvb2rwjzbrEbzUu25BU0ixQ/mXh8hr77XwvlEr57V6SSX04nfufIfi/TmpdUS0Czto 0ZT+ETj8NOknTvi9Q/DTwIBkutlutj/iUqMNtFR6lWBVq4lxOdfB0ytN4TeOP8IBjR0y1dNShdL X7yqdai7Ygcp0Gw3kVPLu1iO5fT73vwHVZMXwLvISdI/HJxsUEDxfg4cm6cboVjPOHS7+5t99U+ akSFUIhOOudrg7rZcT/L7LdTH4wBv2w3yvlNr47G8ftwIBoZhq/ZMiwkNY9MhD39B/5nfN2KPvj /C5VQitOnRioSm7gbDyiaag== X-Google-Smtp-Source: AGHT+IEvWoj2opXBtmG7qnr+4ehjapoZ9QQ/ziUB6/R9e5qxlbmj76KkfS1jRPZ9mv2liy+lqer4fQ== X-Received: by 2002:a05:622a:552:b0:477:6e8e:138e with SMTP id d75a77b69052e-4776e8e1408mr72968861cf.2.1743109535478; Thu, 27 Mar 2025 14:05:35 -0700 (PDT) Received: from denia.c.googlers.com (249.240.85.34.bc.googleusercontent.com. [34.85.240.249]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-47782a1070csm2275421cf.9.2025.03.27.14.05.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Mar 2025 14:05:34 -0700 (PDT) From: Ricardo Ribalda Date: Thu, 27 Mar 2025 21:05:31 +0000 Subject: [PATCH v6 5/5] media: uvcvideo: Do not turn on the camera for some ioctls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250327-uvc-granpower-ng-v6-5-35a2357ff348@chromium.org> References: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> In-Reply-To: <20250327-uvc-granpower-ng-v6-0-35a2357ff348@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.2 There are some ioctls that do not need to turn on the camera. Do not call uvc_pm_get in those cases. Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart 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 0f1ed0387b2611c8d21e211afe21a35101071d93..668a4e9d772c6d91f045ca75e27= 44b3a6c69da6b 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1440,6 +1440,26 @@ static long uvc_v4l2_unlocked_ioctl(struct file *fil= e, struct uvc_fh *handle =3D file->private_data; int ret; =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); + } + ret =3D uvc_pm_get(handle->stream->dev); if (ret) return ret; --=20 2.49.0.472.ge94155a9ec-goog