From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oo1-f47.google.com (mail-oo1-f47.google.com [209.85.161.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D51311D63FD for ; Tue, 26 Nov 2024 16:20:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638027; cv=none; b=EUplJzEJcQywT7NXyaruUhmAN8IjVHuuzrNQi2QM5e+E1w3rcPd98JlAOtta07Pu1hQvYo+vfKxSn+aqKvsJE0rs1RuhPPYP5g3EF81jXQevz6SJc0NMlNSoC9PkZpKj7rB7TQ0MpJwG88i2w5BuXVB1UlwQg8ofHosLw0Kqn/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638027; c=relaxed/simple; bh=P7cJDdqJWrLuL8K2uEZRvjaoWn4MVm6+xAAkGWyiVYg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s0gyrgD4NR5gFWHYCHRixk7rYhOOrFtGc/XN0UPdNn993hzDjR1G7FXWqN00bUO1G45yCOxDDs8Nwcm2ep7Eu4Y0qQUYj5QtRlfTM4cZNjdHwz+dnn6WPVlaqj3GjfcMpSTE/sJ6C+wnQakfnMM/d8mJMNo0YYQJHCiPjNSRxcw= 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=cgn8Km/S; arc=none smtp.client-ip=209.85.161.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="cgn8Km/S" Received: by mail-oo1-f47.google.com with SMTP id 006d021491bc7-5f1e73033cbso1090679eaf.3 for ; Tue, 26 Nov 2024 08:20:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638025; x=1733242825; 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=HKrUO2mKilVMnb8uGrp8DPUwicBtZJtjKmdkARmt5l4=; b=cgn8Km/SwG/fy7Su2kBHmgQdxp4jgrnKQwgxfpOGNl+ypdIaiXrPknhCQbvMIZTfJt R/a0qS+xkU7kokODG50CKAm8vWLzvpdd08E7KhjxJu90MNRAOdLwjmZpuMmjCvI6v7Ao Ygjfa1A1G1bBqu0wWOTFffn5hwQpFNco8sVeE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638025; x=1733242825; 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=HKrUO2mKilVMnb8uGrp8DPUwicBtZJtjKmdkARmt5l4=; b=oZO5MKjYfouk5jv5QMTqzUBMhJEWF7Wz8CjErYRyKoLhTKzc+ETmtzjxLqfL8Gn4sV +JoH5eDqELlVmTrfQt25+LLrWJOvj/s7yzhXoU1+fxQ+r+Scb3m4/BLYX0qxOhyk6wmd mI7F4SdnaIddTM4hBUNmRWqezQexU+33pIdFpaues50Fw1Zy/nDVBYWJvYfLx/HJMrjx WjOJb/I0FHLFOQIIcoxWbVt2s5HXAbaZBWdi1tgacZCj20EvHus794gdMhWY4V8YuXPv BuyzzoIysqIbT6j7WlVyxxBWhN5YcwqVey2ogcSJZATQn/XO3mI7hL/P5S/MO1bxQbnC 1pJQ== X-Forwarded-Encrypted: i=1; AJvYcCWTgncUhNmbW+I63Ej/A3XhJhyKJGonOxM3si3+uVvik9iHoH+/NAdOhNCdxt5K90CLsnwlJabc0bBfMfk=@vger.kernel.org X-Gm-Message-State: AOJu0YzdXL5whQ+56KnbSMuSkZbT1CaaLCdf7Vft/zO/vde4oZ9NQfOG dmPLIpgS6MJBvu/dVK9eu1g5NBQSVgaoXQO2vwYRpUKgkgSjOS2b43fdBNk8Pw== X-Gm-Gg: ASbGnctC6p8gBzd3fb/8bherkAqhp5zCBX6gQBGmSS0/mCkEsuRbS+LMTZBCv1BeD17 iMXSV4YFsducz2LioGO8c4KbbM8c1O7qCjArhaCVrr5UeTesPOwPHfM430PwwZZw+6uKj6gRHQA I7ijbq17zWQtqarx2qK0lndeuCzyZlJEoWxJVy44GHufdu2nxkgCiml/IGb4MXBufHgJ6FDsDWh v489KLGTQerVMPKjB+0HROYX1IwyKVT/jkAZTu9UfqiLccQQTvqir6e3Kh8NpawN6+Bg5dnVFtq u2/nJN2mdzIjEbNsZMcoQ0mQ X-Google-Smtp-Source: AGHT+IFdNgRDGrF5CTdu4yR9Csg3r8Ps+A7V5ZKG5GFvlDcY4AMEGEJVb3A2Xw6tVAlAoAPaVnBh7Q== X-Received: by 2002:a05:6358:52c8:b0:1ca:9839:5d09 with SMTP id e5c5f4694b2df-1ca98395ef6mr446689555d.8.1732638024799; Tue, 26 Nov 2024 08:20:24 -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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:24 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:51 +0000 Subject: [PATCH 1/9] media: uvcvideo: Do not set an async control owned by other fh 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: <20241126-uvc-granpower-ng-v1-1-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@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 , stable@vger.kernel.org X-Mailer: b4 0.13.0 If a file handle is waiting for a response from an async control, avoid that other file handle operate with it. Without this patch, the first file handle will never get the event associated to that operation. Cc: stable@vger.kernel.org Fixes: e5225c820c05 ("media: uvcvideo: Send a control event when a Control = Change interrupt arrives") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 4fe26e82e3d1..5d3a28edf7f0 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1950,6 +1950,10 @@ int uvc_ctrl_set(struct uvc_fh *handle, if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR)) return -EACCES; =20 + /* Other file handle is waiting a response from this async control. */ + if (ctrl->handle && ctrl->handle !=3D handle) + return -EBUSY; + /* Clamp out of range values. */ switch (mapping->v4l2_type) { case V4L2_CTRL_TYPE_INTEGER: --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oo1-f45.google.com (mail-oo1-f45.google.com [209.85.161.45]) (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 967A81D90B1 for ; Tue, 26 Nov 2024 16:20:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638030; cv=none; b=oDPob+tPo0CFfORqfJWmkQxvHeRSa/PfeYoZZYORwjZ8yF4NgqUokiv5LjgPoigXYYuPT030vhIAtk2MVn26DOp6zWnVQZpPrVnpn/Pp5ZgfBYcTihOREucMfOuqhigmVPWgC8dX5FZBsD3qnXQ3ff8xW52+RXGGKg1VJZiqbp8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638030; c=relaxed/simple; bh=bePKgiLEtOHWWqdfEmU/XMv+SebhE/yNQeG1T0V3x24=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C+g9HQr/+hDutSLY27X6KxyC/kSfo3vurgoDlamWjeEUEgClc+ropKa1ApmRW4CO1eyrP636cgtfcqmwjfQXUyJJxH6qYc1JotrHXvRExa6a9ZaYhBniMFp73NMaAmHc7W5U4QUvMf/+Z6HUvyUCiLowDHFZCXOFz+2b6HVd1/Y= 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=n1pC5ZRk; arc=none smtp.client-ip=209.85.161.45 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="n1pC5ZRk" Received: by mail-oo1-f45.google.com with SMTP id 006d021491bc7-5f205c4625dso266058eaf.3 for ; Tue, 26 Nov 2024 08:20:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638027; x=1733242827; 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=wWYCqdEsM1ywI2Gtcd8gKpH4aZIyvZJP5EwMGSKse/E=; b=n1pC5ZRkKg5+lJn6bXhLCgHK5vlrNXDky9eTBqNcXFgaLWiGc1qt/AJNdhX532ie8B J829HiOfuWSQwRcoI0sWJdPHYh4Cv3784OpX7uPAWuFguf4tGNvYrnz3Fb6AhtjefNlo iZCRXARmquTkCxhHk4Ff8nClZCF7S6MRVRf9w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638027; x=1733242827; 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=wWYCqdEsM1ywI2Gtcd8gKpH4aZIyvZJP5EwMGSKse/E=; b=CHk2UtAydZFdbHK+xREtIvxy2cQKgnd+Trv5qO/eCY+bge8Adl2T8df4qZ8fNPEoc/ sgYWpJ2uybkIzkB4FoT3EoQ+5ZwAHlIgSD3Mly4xhi/agOWdrKayyiQNjH7w9CwkHjza 4uLBTQmPqn3Ncs3SJFoTLsjklFwvXiJC8AVbR0047qHj3qpGmS09aZGeaEARZqGoNwRG s7gRmZDFr2Y5dSGjhdDvvIiohz8FlpffbXQz6IXKLRZ0HnW05CZgDUShThXlSMJpNs4G eNRkYeawv94PYAzFpDbx501qH80sldAyIf5JWxKAWunKvBSDfbw93pcsuNz2YMkzRpl1 KuSQ== X-Forwarded-Encrypted: i=1; AJvYcCWiG5vQoIwiXaljSP9DiuRxruPqVq9VIvxMz3/WKnpTrdzLxyFE9mBtSFm4HbyIrKBrA9S7V1Zilh2dQbA=@vger.kernel.org X-Gm-Message-State: AOJu0Yyeh6ZstpZp9DzyT9vig97HmjiyqzKKiDMOJN9t49XFJkYRTH47 7ahrNR4bLUz2KZork3GyjGg9V0U+QJ8bvtUBHt8pD3rqqJMjO2uV8fAmEnlENw== X-Gm-Gg: ASbGncuNvEZGjDzoMmgRIGl0rBxNNwdS1SeM9N5cTIRUu6vwBrgqDRElzSFyDk9Ua7h vzt8y1J7v15fS0gGZylIsETrC3z18khd5mAbo3GppXZ9316+DtETk3lktky73p171KmPHgNbZoP 4mMUCkjgUN0hCrJ0pPyujqVeQrQUX1d872qIUwpe24ywKT6hvYH2AC/n/KtQl6m6dC1MbSh5Vjj CSo9LpV+dL9DX9QU+6bq17/vKP1giEhihcLDdK7NRsboO0N7SX4V840AfxvXE3OEWprS70KLiuK +b7E6I1LPUV4N9XN/cyLX3Z0 X-Google-Smtp-Source: AGHT+IFP7tn9XGl7nTv1mz1ZVEhZf7iMYG/c3Vw4razkI9b6q1iBbwoYYcil2Tl02KVex3tVQ1+aRw== X-Received: by 2002:a05:6358:949f:b0:1c6:1d18:7c44 with SMTP id e5c5f4694b2df-1ca79708784mr853391955d.6.1732638026153; Tue, 26 Nov 2024 08:20:26 -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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:25 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:52 +0000 Subject: [PATCH 2/9] media: uvcvideo: Remove dangling pointers 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: <20241126-uvc-granpower-ng-v1-2-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@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 , stable@vger.kernel.org X-Mailer: b4 0.13.0 When an async control is written, we copy a pointer to the file handle that started the operation. That pointer will be used when the device is done. Which could be anytime in the future. If the user closes that file descriptor, its structure will be freed, and there will be one dangling pointer per pending async control, that the driver will try to use. Keep a counter of all the pending async controls and clean all the dangling pointers during release(). Cc: stable@vger.kernel.org Fixes: e5225c820c05 ("media: uvcvideo: Send a control event when a Control = Change interrupt arrives") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 40 ++++++++++++++++++++++++++++++++++++= ++-- drivers/media/usb/uvc/uvc_v4l2.c | 2 ++ drivers/media/usb/uvc/uvcvideo.h | 3 +++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 5d3a28edf7f0..11287e81d91c 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1589,7 +1589,12 @@ void uvc_ctrl_status_event(struct uvc_video_chain *c= hain, mutex_lock(&chain->ctrl_mutex); =20 handle =3D ctrl->handle; - ctrl->handle =3D NULL; + if (handle) { + ctrl->handle =3D NULL; + WARN_ON(!handle->pending_async_ctrls) + if (handle->pending_async_ctrls) + handle->pending_async_ctrls--; + } =20 list_for_each_entry(mapping, &ctrl->info.mappings, list) { s32 value =3D __uvc_ctrl_get_value(mapping, data); @@ -2050,8 +2055,11 @@ int uvc_ctrl_set(struct uvc_fh *handle, mapping->set(mapping, value, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) + if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) { + if (!ctrl->handle) + handle->pending_async_ctrls++; ctrl->handle =3D handle; + } =20 ctrl->dirty =3D 1; ctrl->modified =3D 1; @@ -2774,6 +2782,34 @@ int uvc_ctrl_init_device(struct uvc_device *dev) return 0; } =20 +void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) +{ + struct uvc_entity *entity; + + guard(mutex)(&handle->chain->ctrl_mutex); + + if (!handle->pending_async_ctrls) + return; + + list_for_each_entry(entity, &handle->chain->dev->entities, list) { + int i; + + for (i =3D 0; i < entity->ncontrols; ++i) { + struct uvc_control *ctrl =3D &entity->controls[i]; + + if (!ctrl->handle || ctrl->handle !=3D handle) + continue; + + ctrl->handle =3D NULL; + if (WARN_ON(!handle->pending_async_ctrls)) + continue; + handle->pending_async_ctrls--; + } + } + + WARN_ON(handle->pending_async_ctrls); +} + /* * Cleanup device controls. */ diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 97c5407f6603..b425306a3b8c 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -652,6 +652,8 @@ static int uvc_v4l2_release(struct file *file) =20 uvc_dbg(stream->dev, CALLS, "%s\n", __func__); =20 + uvc_ctrl_cleanup_fh(handle); + /* Only free resources if this is a privileged handle. */ if (uvc_has_privileges(handle)) uvc_queue_release(&stream->queue); diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 07f9921d83f2..2f8a9c48e32a 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -612,6 +612,7 @@ struct uvc_fh { struct uvc_video_chain *chain; struct uvc_streaming *stream; enum uvc_handle_state state; + unsigned int pending_async_ctrls; /* Protected by ctrl_mutex. */ }; =20 struct uvc_driver { @@ -797,6 +798,8 @@ int uvc_ctrl_is_accessible(struct uvc_video_chain *chai= n, u32 v4l2_id, int uvc_xu_ctrl_query(struct uvc_video_chain *chain, struct uvc_xu_control_query *xqry); =20 +void uvc_ctrl_cleanup_fh(struct uvc_fh *handle); + /* Utility functions */ struct usb_host_endpoint *uvc_find_endpoint(struct usb_host_interface *alt= s, u8 epaddr); --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oo1-f42.google.com (mail-oo1-f42.google.com [209.85.161.42]) (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 0B5061D8DFD for ; Tue, 26 Nov 2024 16:20:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638029; cv=none; b=d+ZgN5QMNb73Mf/Jfqxfjhrwe4NyaKDdNuIpgEvwQVQVbFwAwyplzk6MsUFGhQR2AmSTlsz8ungdLqrTPAa0ht/4IRAErCrpFGsNdTFbQ37eqdiqO2T7Lgsq76JMMG3f+sDrKirSRii5ceOdQzkbV43cipW+IGqeYG6jRcF+ZVI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638029; c=relaxed/simple; bh=+QRDEeTl7+1Tb8QYvDBOC4J4A2Fgnf7J9axjy/zTuzI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YkHtlDSD0QJ5fTZvT56Xe1fnc207W4JuyfMbkuIj3p0J2QyO25ZkWKs72yddlfNXOxnApSYQDa5O8dmYxHw82x5pjLqAjnONufTybQNAF3+x3i5nytHFLJ8ycptKXhyOghDCKlLZI0it+KKG+TwkF84PlY7O9CjgZ9ATkddpsRc= 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=SMqT6XFK; arc=none smtp.client-ip=209.85.161.42 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="SMqT6XFK" Received: by mail-oo1-f42.google.com with SMTP id 006d021491bc7-5f1eb278d85so947697eaf.3 for ; Tue, 26 Nov 2024 08:20:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638027; x=1733242827; 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=7Ec+aWUlYjfVkeFGABKzygP7a2zM71aZZNNdskYbc+0=; b=SMqT6XFKwwx794539RRBfMKLXbV11L7MVNP7bWUF5I7VzK0PNRKuMvfe7a1x5jfgYg /2I1hMC9l/GPsru1DjVWWMXayn9szsU3SKOLa2hGzrVIgTrN/21E9cOEwV+3nxAe8cfu d52t5c7Hn90hzeiYgqW/3e4fbpmBMcwagokxc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638027; x=1733242827; 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=7Ec+aWUlYjfVkeFGABKzygP7a2zM71aZZNNdskYbc+0=; b=RP4ZmIZ7kqi5FJeVrsAW4D8Jhubp+fslJYYqb8rfe3Mf8WHHsdwn7Qa3DUNadwfIMg DfU1Vn4FygkNZRYd/tQTttqyl9nX9IoSQ6kxwooVECeYGDxOB4h9NYejXsTpudR+66j+ F3fUQfoh7Gb3U9Ugzjcyed8P3h8mqCOHc2Ieamkv3TNjA6R5hqoamIjPjxbEx07pOr5s 6NfIU5ABTpP442h1uwda4zrYdXbT1ZTojrv8A5EKBjvxqHLCamizpnwGBQIDHH5xa9D6 q1yJOgMFgM0btRYJdquKg8eQt+O8gPTiK6iKT27bfiz+JoPTVag4Zea68wG91W+zlheu Ryxw== X-Forwarded-Encrypted: i=1; AJvYcCWYHjZGpj1m+zP7H3OTnVciazUzHq7zhMQwpYWjJEANtcDKSvezctoDQByLaT+D3ZwcAJBItlt+TRZqw5E=@vger.kernel.org X-Gm-Message-State: AOJu0YwuWmlxWmpL5rqn1XtFowIQGTT0INkYFErI2d/z/KzL8Y646uzm aPNRXYK4HmA/advPF1zaPGOxvoebArzbr/iRjvoFhVyYdNj76IeoTC38jhPvwQ== X-Gm-Gg: ASbGncva1R0ro3jS4sRHjq5vUKI1nbrMMiG3v1slNgREh2MUtEHrEo8bM6NlzOkIECL /8LEWdEYtAfA+1YJCusWtjuCllm4mPp1QuiwkCh8GUogYm2mpnnz+99c1i9JdcbYZtA5NIks5rH RlIncTbzCLSKS18BEiQZV3hee4FRQe730pZXIkXDsc6mSWHHnTFOjFtBDTizaCFSrANY4BwnxDG aT3mmw+cAQUxbRkBGhv41QWxDRvVrVocBEYR6zVedmD1G4/Oe/JpSzJ2npD02P4ZucyMj+PxIOk oMO/cZpD2/h0LaJUO6G8m02P X-Google-Smtp-Source: AGHT+IGTu9xdPCRBJlFbRHegd6Xyp4UDrX/YIXUIDxaC3+Jb94GTMDjckF9lM49VwilT9480EVlfVg== X-Received: by 2002:a05:6358:d386:b0:1ca:90da:3c1e with SMTP id e5c5f4694b2df-1ca90da3ce2mr516421655d.19.1732638027057; Tue, 26 Nov 2024 08:20:27 -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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:26 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:53 +0000 Subject: [PATCH 3/9] 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: <20241126-uvc-granpower-ng-v1-3-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.13.0 Add a variable in the file handle state to figure out if a camera is in the streaming state or not. This variable will be used in the future for power management policies. Now that we are at it, make use of guards to simplify the code. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 15 +++++++++++---- drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index b425306a3b8c..712a531e52f9 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -888,11 +888,17 @@ static int uvc_ioctl_streamon(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret =3D uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (!ret) + handle->is_streaming =3D true; =20 return ret; + } =20 static int uvc_ioctl_streamoff(struct file *file, void *fh, @@ -904,9 +910,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 2f8a9c48e32a..b63194a9c64e 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -613,6 +613,7 @@ struct uvc_fh { struct uvc_streaming *stream; enum uvc_handle_state state; unsigned int pending_async_ctrls; /* Protected by ctrl_mutex. */ + bool is_streaming; }; =20 struct uvc_driver { --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.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 D54BB1D7E4A for ; Tue, 26 Nov 2024 16:20:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638031; cv=none; b=C+h5pBpEm6RZRdg+ENaZp03DzISMoRpPwCVS+xAUT7HMr594RtJl/0f32VwqmSDe5kCiM0e6wo88m1iO8aH4nlTLrxkJKuxlYSjdXHgT2K4jJeGsNktevSGAqaL+JVi+yMezM+7bpOhCa9HDCto09nnyinUQi/8BYhYyb8iR6WU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638031; c=relaxed/simple; bh=fXeP6hP7d8DZLK/SqBOauBVNxZJD+zSrN3SPVgFuloQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AcVlpBsgBYRPLAMX9/a0UpkECIkgwUPMC8wYlnfYlqf6UBJCev9yR7e0Z1w70XYVTe0Dc+BGhHNTEwt6vdpAjnnplwJMCYvufzmILerbKYKmre4D5zm436PX0XZIgzFu5n0p2TnAOxkid3Yfc/h/mJ2ExKvUVubzky569s4rZ2k= 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=DmSxJ0aU; arc=none smtp.client-ip=209.85.167.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="DmSxJ0aU" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3ea55a2a38bso836174b6e.1 for ; Tue, 26 Nov 2024 08:20:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638029; x=1733242829; 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=oM5gW83DYtkyi5mVaIPybDtzyFce7hGSIn88DXzP1bc=; b=DmSxJ0aUTJE88jjHa7rYqcK3D8fHKMEgdaV3YR8oskWrS11RSeRQYWYzOZ/WBRX95N PyGO83C/ye+5pnCOQn3iWPqqjatS2P4XoAnwIPHjGPqp7k9LGtP68FgfxYVvYDKYxIrY uNFjvv4zFtOuoXbIWeoj0KkmleYzwdqatjwmk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638029; x=1733242829; 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=oM5gW83DYtkyi5mVaIPybDtzyFce7hGSIn88DXzP1bc=; b=qG2El5bnV+r/b+XZxpyeJ8mXgwjnoNsYcpJLjBTsRjcqgNIFURUl+LBdsiCq6bcEZs lyE/THqGhCf/bYIOIBmMc3hm+Vb+TrIAYhK3FyhHM5dA37knhmFsWaO0xPy3BxfbNDoe zjLsOA3c5FoBXxruvHUPr3MyBPyYUM+m0Jpy5v4/0G7770aR/HRONSdEv7wDuhELDFVd VjkSgp7T+HDhUi7OLnidal2CAC1yqG6wFvOYkiZSaQ8r2E1IkCvwC81Xwfw0hTRMRMfT Rw6kjuNQzxvsyAcCtLo6ZSKEK6ee8f17xXQ8u8sCTIVK8Yf7J1AEyqfvQ+P/wPTdygOA BiTg== X-Forwarded-Encrypted: i=1; AJvYcCXtslnNZrsSqnvxg9NILmz8z39ZDAETEBAXR5ML8iTZaeeXQnbXw97arKcyeJc3w5yaA60Chzx+KFct5es=@vger.kernel.org X-Gm-Message-State: AOJu0YzDdYIYQCS0/pke2kXkOcxlm5hHZYXseS7RWny99Zy3+6HiJI+a qITTYPvu1n3L2KhyaShl+wiN4390PZ22Lje6ThyhuTc0VRhrku5eoCHM6Dk+gQ== X-Gm-Gg: ASbGncvvDUO/o6zwKd8Fyw1KGcnonDad0d3czFnQsilKFBox4ef5KCRjj+nsv9kTW1C z5Md545bRtGrjCInF/1DiCiIk/GI2do/ktJmEx/ZeNFAW6an4XQIPBkjcYVMpxU/VuVMG927wWe wFFKDnFmbW5QzMCcDFZbRw9OWelhEi6xINtmJs+q/OYB9xlpKZZNJiHZ6aACZCPBV7j9VBnkVgJ je0i2zX1B+Eu9YsQ3gQCBNm3q96lVpmFA1T+cMAf1GJght6x/0xZlU4gne8PEEiUJ7DF7HyYLzl K2litvEj4ZZe/RBOXj7Z+D4h X-Google-Smtp-Source: AGHT+IEx0/z2upzwZa1v2tR9ixIeTv9UvY1/QA26N8uIiVqTdq7qHENYY8qRduqIG+j0i0J9NC7t4A== X-Received: by 2002:a05:6358:5699:b0:1c3:84de:4d5c with SMTP id e5c5f4694b2df-1ca797bb7d5mr904727555d.23.1732638028680; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:28 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:54 +0000 Subject: [PATCH 4/9] media: uvcvideo: Move usb_autopm_(get|put)_interface to status_get Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241126-uvc-granpower-ng-v1-4-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@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 06c867510c8f..f7531ed0fa84 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -378,7 +378,7 @@ void uvc_status_suspend(struct uvc_device *dev) uvc_status_stop(dev); } =20 -int uvc_status_get(struct uvc_device *dev) +static int _uvc_status_get(struct uvc_device *dev) { int ret; =20 @@ -395,13 +395,41 @@ int uvc_status_get(struct uvc_device *dev) return 0; } =20 -void uvc_status_put(struct uvc_device *dev) +int uvc_status_get(struct uvc_device *dev) +{ + int ret; + + ret =3D usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret =3D _uvc_status_get(dev); + + if (ret) + usb_autopm_put_interface(dev->intf); + + return ret; +} + +static int _uvc_status_put(struct uvc_device *dev) { guard(mutex)(&dev->status_lock); =20 if (dev->status_users =3D=3D 1) uvc_status_stop(dev); - WARN_ON(!dev->status_users); - if (dev->status_users) - dev->status_users--; + + if (WARN_ON(!dev->status_users)) + return -EIO; + + dev->status_users--; + return 0; +} + +void uvc_status_put(struct uvc_device *dev) +{ + int ret; + + ret =3D _uvc_status_put(dev); + if (!ret) + usb_autopm_put_interface(dev->intf); } diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 712a531e52f9..1d4db712137e 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -617,20 +617,13 @@ static int uvc_v4l2_open(struct file *file) stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); =20 - ret =3D usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle =3D kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle =3D=3D NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } =20 ret =3D uvc_status_get(stream->dev); if (ret) { - usb_autopm_put_interface(stream->dev->intf); kfree(handle); return ret; } @@ -666,8 +659,6 @@ static int uvc_v4l2_release(struct file *file) file->private_data =3D NULL; =20 uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); return 0; } =20 --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oo1-f41.google.com (mail-oo1-f41.google.com [209.85.161.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32C701DA10C for ; Tue, 26 Nov 2024 16:20:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638031; cv=none; b=YfPVqDw9stz2xCXtNMudzMbS3CS+Ydtck+81rj2fYSBcd5ItuulWuwth2aczVEOXsG+pHjHyjOXTgh1sGa0dCbt8IF4uGEATEEyHKrE/CzE2lSL6lYpn8jG7DCbD4418XLv44/tkiU5Zh3nC8X0uwbMMatDcHkFDN2Ow+5+y5j4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638031; c=relaxed/simple; bh=HyqCzaymRik4He7GN3tEcdLeiRbjJnfCdIYBk4WebLk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rpv3+lLY/mIs6CmtuKgUdpdwJWcX9/2mew5RJ/AX95MsGT03ashAsrjClKAR3lbX2UQguM2yzVgzCSdALDAWwItptxHM+rnkRxXod2lydUmBAfSg8G6TnHcYDO4qNcuEtShZUeB8ut0sqPr4ePPYRnZ9Dde5eUOvVET47Jzk9AQ= 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=HIvJtrmV; arc=none smtp.client-ip=209.85.161.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="HIvJtrmV" Received: by mail-oo1-f41.google.com with SMTP id 006d021491bc7-5f205c4625dso266074eaf.3 for ; Tue, 26 Nov 2024 08:20:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638029; x=1733242829; 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=oqSWPss0imTjEBvgoF+O3/N5JaCFfxEYIjh5jyzakaE=; b=HIvJtrmVAwGkxd67/HmMmk6/2TZfIMvu60ERUNIt/x1wZ7BQT1jFskbWfHuvlfgq/I TZP28N353+K2rKyksjfJw8qiCQAMYF7ONIpTTVJQx5eMe17xUb5iD9TIqaWdMd8ytU41 HkN+7IisnUfqA1uz4qlewA2na3kGXoIRonSZ8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638029; x=1733242829; 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=oqSWPss0imTjEBvgoF+O3/N5JaCFfxEYIjh5jyzakaE=; b=pv3zSVLlPPGSi1HFvpFkl2AB6WTBnMRYJxU0UmUiJECm8cdHAqyLbunwWbxUZ39Lsb 6pnyyznMjjWWO9sk5z81aOPisxRFHnh+gQRjZ4bg744SMhQKrCMjYOwOyzP7tUkA9tnO h4kDLCy7DUOPNDVLQyFs2BDdBGgqeBB9wsFXoQvNnP7JkzpsV8t6L1Z3vCFKphC1u6t5 LaPxTG+CzggzJnUYjQ3EZJ3otMkzfvFpn+Ljtt4goGuMuCk91E9lKoRLkyPMz/yrv1Ul X8sA42pA1sNHSDd+6d4xfQWfJm/tHzoI4TQj2U9kH+vSpA1Cv9tdH2NI7+prwfEDjezQ +f+g== X-Forwarded-Encrypted: i=1; AJvYcCUxXl0gHX3pCFIBR/hANX8+uxr4PKpjWHSi+qwvn8pjuZMZgDEFmAkyzNGlotPGYGdmicXX5KQ781P1l24=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/MHhRy/5fqpO92sm+6jX3yNLoRFbaFcMz+K2rH3K4Iu93rRwB 7Mq278GvdutpSuymRM0++q89s997KhWR+kgGWhiPJx48Z3sU7yvqsvj6ZysQpg== X-Gm-Gg: ASbGnctwAAXQAirMhseK2rlMJE02DkbrOPhdZMamI9SEwRW5TRXeBAGL1OgnHh6Cpg+ EwtBE7Z4RW9kmMOSaQZupN8MxeBXNXY1xBPXiIasaCPfo+DTJC/skq8tZTUiQTW5KCJvqbIvq5M blX1swjTCvTZMYeWyh2VQvvclV21zhLh8uX0Si73rvA4a4ZTusELWKP0meJoaK5zZLynCyJvNIC WoCAkyT4IvkLx28ST0Sylb85MX04nw2k2HkepcDIBTb2IPfFUtAH8YuQU7BABlBKRra+TBx704d fbeetJNE3pcYhCd37QcUdi0E X-Google-Smtp-Source: AGHT+IFSeCLAxLBaIb6/TUqzxFH7lB3SI+CE6KSiFU+YQRWCA4HwT+r88u630f7asyH+jTHjbUh/lA== X-Received: by 2002:a05:6358:9209:b0:1b8:f18:3e6e with SMTP id e5c5f4694b2df-1ca79724369mr996360055d.12.1732638029389; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:29 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:55 +0000 Subject: [PATCH 5/9] media: uvcvideo: Add a uvc_status guard Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241126-uvc-granpower-ng-v1-5-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.13.0 It helps will help will the error handling of PM functions. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvcvideo.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index b63194a9c64e..c38ddd10307c 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -759,6 +759,8 @@ void uvc_status_suspend(struct uvc_device *dev); int uvc_status_get(struct uvc_device *dev); void uvc_status_put(struct uvc_device *dev); =20 +DEFINE_GUARD(uvc_status, struct uvc_device *, uvc_status_get(_T), uvc_stat= us_put(_T)) + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) (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 39FBE1DACA1 for ; Tue, 26 Nov 2024 16:20:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638032; cv=none; b=DFMi4qZZUXo68Ib1FgX805eorofH1lCLuuhmsK61dzYsg+Ez3+wNZGAf47y9+Q7YADKpAlSR+58+csLNESTYKemH1/+10ixNlW1Q/w3muVUN6PG0bvVZcq1WYHnB3Ci3nAX0+6LJluddFyy0+J+C50SXvOsOTm8l9BbtTyeu/7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638032; c=relaxed/simple; bh=IVh0R9nGIq7LQxrxeUzuHltM/Lda0LYF+qcuGJP4GWg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S/Gv0eLRxspbx9JnZsQTHVW0b08ZA8tblT6Qb/4GNSaO++Uvq1qcE6P7/UKi8cBNN4rq6oYAO2VkFd1oUd+2KepDtpiCSPvZ779Lf++j1v9mZNXyRvDljvUd6xcGRUTOrxtg19YFjy+UccIJ9/udyc90XxakTriFupGJkKosCdU= 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=oeuDtTxO; arc=none smtp.client-ip=209.85.210.51 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="oeuDtTxO" Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-71d551855c2so942732a34.3 for ; Tue, 26 Nov 2024 08:20:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638030; x=1733242830; 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=85TfWs0jEmA8k141RAfWvOKiiPy4fhc+Ar2L/ksYixU=; b=oeuDtTxOIJIBx4K92ClrNlMWu7iquec/UZ3pJ8kc0qTwVYIkEUG0Cu1MHMh0acL9f3 Ue1sL9C3EL33xadY//+cwJxeb2nV9K4sIGmKK9dV0t9E5Y83WnMcJEIQiyYWuVjccTgB 853ZpEjLtXlyf9HSW3Cw0a0Zg3S1D4qE/tnyA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638030; x=1733242830; 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=85TfWs0jEmA8k141RAfWvOKiiPy4fhc+Ar2L/ksYixU=; b=vCYFb7hcEjV5TVs3QyYKeKkU0nQPwkkpimTDMs2ete77nPC6f8s6G6MA6DUtfUA7Jr 4kFs99T8D8KS5yO3/fhtFcFS/nQ1P4VkmI8Mp9YHL1wv1WTX4ooirJPVbGP1epjayw5s 7WtM9v0k0ZI3pIEbldXr766D8+RERkJM1RZVRUHJEiW/T3XpdppOaryvOP6qnUNjYFuT cW6jnI28m3FzzCGcbVAAptMWDb/vznL4CtOM9zDvzbMWBbvDwiraBH7h9dcaSmU19il9 qNaOmLp11qU/xHj6nSWMZj2Cb0/35cfbJBnnTzcFGMFWMbdmJDC+Ndvxo4DU5IsGCJ4A YGfg== X-Forwarded-Encrypted: i=1; AJvYcCUaFp3+XJACh+6XbogssyjtizXejmBfi/HHAkW+FUknx0yxpYi60KTR0NtZEUcncwITxPtPusZIkwGqOhc=@vger.kernel.org X-Gm-Message-State: AOJu0YyGnJUBJQrqcmspUoKheAI1sCxcCgyufqz1a9VEihFBuZZlsPlU IKFja1eCDnJtkeBbFJ19uQRqMAF56/k0b/zRcdKt2VL/YD7OqXeFZfXSaH5yQA== X-Gm-Gg: ASbGnctR4/+G/SVgZwvCQSgmIiil7FyBP/92uTDvr9oSqXMUYPZa4fBbJw5ME4Jmxc6 oPfdbfK67T/WBDhQ6Yre6rII18OLwNab1CiG0ZiXBAh04+FK1hUKptC3oxpjJbGw22FnxVjD5bC 0q2pwyyJjOy8va04eIEIv1LPnt2nVrGR+lnisHO681ADvU2alcA3gZvbPQzv4uaIj1dkMAAEAW7 iG95PeEb9F2KKZCtm6N3hMNE1NJwO1ii4K1qZLWzARZAuKEeyf33ECbR4ip9qr0wBqZPNHSHxTk 3qs4Cu1kphLEMM312si/hHD6 X-Google-Smtp-Source: AGHT+IGHcqzY+WUpuzKBkzRidLiPH4hUJ9H+BZBkHvQLlWb2ivbtOxMoXrTejhoPwoNuH+vicDxvPg== X-Received: by 2002:a05:6358:988b:b0:1c6:204b:c5a7 with SMTP id e5c5f4694b2df-1ca7972f8aamr942012555d.10.1732638030198; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:29 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:56 +0000 Subject: [PATCH 6/9] 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: <20241126-uvc-granpower-ng-v1-6-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@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 | 18 +++++++++++++----- drivers/media/usb/uvc/uvc_v4l2.c | 26 +++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 11287e81d91c..2e2aa1b2f53d 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1592,8 +1592,10 @@ void uvc_ctrl_status_event(struct uvc_video_chain *c= hain, if (handle) { ctrl->handle =3D NULL; WARN_ON(!handle->pending_async_ctrls) - if (handle->pending_async_ctrls) + if (handle->pending_async_ctrls) { handle->pending_async_ctrls--; + uvc_status_put(chain->dev); + } } =20 list_for_each_entry(mapping, &ctrl->info.mappings, list) { @@ -2056,8 +2058,10 @@ int uvc_ctrl_set(struct uvc_fh *handle, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); =20 if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) { - if (!ctrl->handle) + if (!ctrl->handle) { handle->pending_async_ctrls++; + uvc_status_get(chain->dev); + } ctrl->handle =3D handle; } =20 @@ -2785,6 +2789,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 @@ -2792,8 +2797,6 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) return; =20 list_for_each_entry(entity, &handle->chain->dev->entities, list) { - int i; - for (i =3D 0; i < entity->ncontrols; ++i) { struct uvc_control *ctrl =3D &entity->controls[i]; =20 @@ -2804,10 +2807,15 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) if (WARN_ON(!handle->pending_async_ctrls)) continue; handle->pending_async_ctrls--; + uvc_status_put(handle->stream->dev); } } =20 - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i =3D 0; i < handle->pending_async_ctrls; i++) + uvc_status_put(handle->stream->dev); } =20 /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1d4db712137e..1972ede38c70 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -651,6 +651,9 @@ static int uvc_v4l2_release(struct file *file) if (uvc_has_privileges(handle)) uvc_queue_release(&stream->queue); =20 + if (handle->is_streaming) + uvc_status_put(stream->dev); + /* Release the file handle. */ uvc_dismiss_privileges(handle); v4l2_fh_del(&handle->vfh); @@ -885,8 +888,10 @@ static int uvc_ioctl_streamon(struct file *file, void = *fh, return 0; =20 ret =3D uvc_queue_streamon(&stream->queue, type); - if (!ret) + if (!ret) { handle->is_streaming =3D true; + uvc_status_get(stream->dev); + } =20 return ret; =20 @@ -904,7 +909,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, guard(mutex)(&stream->mutex); =20 uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming =3D false; + if (handle->is_streaming) { + handle->is_streaming =3D false; + uvc_status_put(stream->dev); + } =20 return 0; } @@ -1450,6 +1458,16 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu= _control_query *kp, return 0; } =20 +static long uvc_v4l2_video_ioctl2(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle =3D file->private_data; + + guard(uvc_status)(handle->stream->dev); + + return video_ioctl2(file, cmd, arg); +} + #define UVCIOC_CTRL_MAP32 _IOWR('u', 0x20, struct uvc_xu_control_mapping32) #define UVCIOC_CTRL_QUERY32 _IOWR('u', 0x21, struct uvc_xu_control_query32) =20 @@ -1464,6 +1482,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up =3D compat_ptr(arg); long ret; =20 + guard(uvc_status)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1583,7 +1603,7 @@ const struct v4l2_file_operations uvc_fops =3D { .owner =3D THIS_MODULE, .open =3D uvc_v4l2_open, .release =3D uvc_v4l2_release, - .unlocked_ioctl =3D video_ioctl2, + .unlocked_ioctl =3D uvc_v4l2_video_ioctl2, #ifdef CONFIG_COMPAT .compat_ioctl32 =3D uvc_v4l2_compat_ioctl32, #endif --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-oo1-f52.google.com (mail-oo1-f52.google.com [209.85.161.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 EF1761DB52D for ; Tue, 26 Nov 2024 16:20:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638033; cv=none; b=F8afPUgqfboEIFFbxF3Wggc1jt+7CdD6PElR6Key14b82rS9kTPSHEaSg7UMwi3zwdoaNPIP03Pd2uijmQW1xiYCVRJFIwxJp3J57+4q0yj7+9Wa+u8Z6xb6tntHQGQDGGKq1ZOlKk4PUNywCMPzKdKqkAYTC6bKaF5JPAnA/xY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638033; c=relaxed/simple; bh=3Dzgzh4yU33ztM7bLdskr2zw4uRmtMH9ym8FV6irr3o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NLy7gEeQpmrzyAzwqOEgcsbf+kJTXprouS7IL0brANddVwYov2HJN7I3Tf7QCq5QhKdbKC1xs0UxE8FxKVQBZf7B6LL7ve1i1BuFgTCE5oqs4gwWYs5Ewb+hYz63Bn+VlNQ/C6NaG8zfJaz/ZX2lUBwpXy+APpe1+UrlE6WTAAE= 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=cGVCOFTA; arc=none smtp.client-ip=209.85.161.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="cGVCOFTA" Received: by mail-oo1-f52.google.com with SMTP id 006d021491bc7-5f1d1068451so1184164eaf.1 for ; Tue, 26 Nov 2024 08:20:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638031; x=1733242831; 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=j/lu/EGVVDXuMSIzdRCxVlnfxSM4yuT3W6HrMPORjdo=; b=cGVCOFTAmJgqnFtFVRgf0nmNWSofQXtS1eTM85jrTLPQ2LrLa3KCDgBcGKiPRor7pB 3mEUg5dO7E4dBDzwuAyUm9c7rXNTJ+yIc+g+nW5F40S0P4Ld6y0iu6WPwnFxoRMHW1TN KundA9BsmwBPjYx1YoxQWFtmESbXHur5EkwAU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638031; x=1733242831; 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=j/lu/EGVVDXuMSIzdRCxVlnfxSM4yuT3W6HrMPORjdo=; b=mj7Uib/LHI7z11J75PWvrCm6tAC4DCTzEhSJ8nGCy7JBgPYUw0HvEgwghqjeF8CdkX wkVwVIbXkLeVChWgNrgSUM+l9CugxscAVPWRn+qExdSPrxw2h6kttHtVBHPNAvt4eCvH 82Ez3uCxK952C06Ecs6++XXnjYe7p8Ose+DFYK5u+lJobqiCfFNk5eHmAz5SH4VyjQng uT1lTBaptuYBIr6pxj0xFNp17zvvxEFuWD9R02JsIgG+HW8ae3LbcUVp+z9V0shEGCC/ O4gFtjyea34HWIJwa0q3gcf5T8wadOyjMairRYP+OVBK3dY5Oz7TUUNT3KUx9SY4S4pV tbAQ== X-Forwarded-Encrypted: i=1; AJvYcCXi/vNLkYTNYWSfRJFzASP1Hyp/8x9Q7a/p+0mtZ4dabJwFujfR5oFcc1Rod0K9smBoaZQFmvMh7oxF/WY=@vger.kernel.org X-Gm-Message-State: AOJu0YzSm174TnyKbYCb2WRf5seGGpU8cdtFlS08eQR+vSmqVYek3G1t nY7HE2mxgRWUxYjXvahRAP2AoRRgO34W0ouHXK+skVSesX9aDtOGa+0bnZt6hg== X-Gm-Gg: ASbGncsOzEE2HgQLpUYnAXONNjm0kNjRrILHHIQuW5rhtrrd5vZrg0tqW9O7/Q+sXS9 mLGavBjI0CEYFvWmnOaeBD13APvNK3k1r+rcfwEeS07YkelBz2+/o1IPeCpOPFtBjUib2jWika9 jLFfD/6paPdU0hFW5TXWaTAtn50dr9x2ZrMS6slIx8Ud1XEcj/iLaJCBlkodv+wzrTK12f8DNSP 9obTgXQxeEORvdLLlf7xRYY0VxOT7ZZeFnFKVFFgXDN1R4NlCkqDHXXiu9eiN9FTrNJn1ruaH1f nY0r6sSHcfi/QK+/uGDjDlpL X-Google-Smtp-Source: AGHT+IFPBjhCNlx/WOQpP/DrR9JEp90XgxFyirfWiypz7tV1QsQQ+4YXuQ598fwfKwMo0jUvpfnh+Q== X-Received: by 2002:a05:6359:5cc2:b0:1ca:a77a:e9b8 with SMTP id e5c5f4694b2df-1caa77aeac9mr318229855d.17.1732638030982; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:30 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:57 +0000 Subject: [PATCH 7/9] 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: <20241126-uvc-granpower-ng-v1-7-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.13.0 Now that every ioctl takes care of their power management we can remove the "global" power management. Despite its size, this is a relatively big change. We hope that there are no size effects of it. If there are some specific devices that miss-behave, we can add a small quirk for them. This patch introduces a behavioral change for the uvc "trigger" button. It will not work unless the camera is streaming. We consider that this the most common (if not the only) usecase and therefore we do not consider it a regression. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1972ede38c70..3595f67fd7e2 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -612,7 +612,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__); @@ -622,12 +621,6 @@ static int uvc_v4l2_open(struct file *file) if (!handle) return -ENOMEM; =20 - ret =3D uvc_status_get(stream->dev); - if (ret) { - kfree(handle); - return ret; - } - v4l2_fh_init(&handle->vfh, &stream->vdev); v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; @@ -661,7 +654,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_status_put(stream->dev); return 0; } =20 --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (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 B65F41DC04A for ; Tue, 26 Nov 2024 16:20:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638034; cv=none; b=aeQrDyzywXzN6qv9vsExkQEXAOBj5N8dodnO1bfoPMHahVWqhgTryViEL6AD8rBmlIy1XUDBROFp75H4SlHxMAfseWABwoxdfY6EX4ASwQfczA/Z2AWrVHf+mcEV30hl5tudGw+dGbOc1VyQmiUQsCxW8XO1WnH8/Niksc5XZuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638034; c=relaxed/simple; bh=3AS4904ZrJWWmtzo+XQDjxmA+Exv2p0QUHnWYejIDuM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NDTJOqj3Tj3eD9RZuTQKDjaG017IYCpVY2uj4+NehX27ujz1IhzT17WUqXNN9ZaQop6LY0yrAbirwc8OyIe39VeBuLqXhy0yttaAyvwMIDNhQ55ioUKVV7Bs0+UpE6JhHOpp7+veQYC+wkWFUlXtNU159bpDes1sEqTiP2nwUj0= 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=jtS5RrYw; arc=none smtp.client-ip=209.85.219.45 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="jtS5RrYw" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-6d42b87aceaso60756326d6.0 for ; Tue, 26 Nov 2024 08:20:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638032; x=1733242832; 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=38DVVdNZ+9OXPNjKWQaX+5zY7dH2BnytoxnJmJsLz5s=; b=jtS5RrYw9EeCtS2ZR2MwAnH1UDCU407zwTtDCQKj3ekRSvqxLdi6ftIBIOwPrZBZq4 0VDChiwy+jBjcz7V5VIzhsL6AHlxXjBza4rzkDdCyIv9YlC75i7jLswYisWdcMlgb19U 8QHMY0f9AK0qy7RTvtP4CsB2oYjcBcTlThnxs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638032; x=1733242832; 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=38DVVdNZ+9OXPNjKWQaX+5zY7dH2BnytoxnJmJsLz5s=; b=v+oGk8/Ms4NBVqJPxWHjCrLK7oHbybpHWgazXSe6FgUueq5fZvG9nRcnWaaIKzS4EU F2E8Ic7mYQDuuESG8o0uNQkZ29W1gvQ1W+S1P8YM1G74Djmk39xg+B/cgp1SwrRyWdh6 /SRM57RU1TVh90oe1eBaR5CztimLhscd4Jw3nSD7Re4/M4OFQJyzbWFn+NbphGj412jE +KunACDZSeqBqzMXztKRwnSyl3h+Bz25kV4IDbldVjwGzbEYQkiai+V2bbBrVvzRGsdB mmxG9Q1BqNdu3TupqqzbN9xIAHXCvJTcIMKgb4s8rHAX5hHO+n6KjbOINO6mfW7Lcxt1 s92A== X-Forwarded-Encrypted: i=1; AJvYcCXS70Fa+NpMU0+FapOGrEpHLkDCDSW6eLgEOnsp5ISFuxWUepPaWqZPcnSp1XnF2IYeHlklvtB4xSOPZkI=@vger.kernel.org X-Gm-Message-State: AOJu0YzTlfMD1ZdJOLRJ2dYBebQIoAUOfznCM0Tv2E0etbaIa2kS9DVP G+awE9Z/2FJe8l/eby+Bfj0M72YUih0sFqgkP6HveMqO8thFGc5XjGrafPE2dw== X-Gm-Gg: ASbGncsXk2Y6o69rnpPOiqrAgxHgDn8RXd8Cp30u049GhTaf9npvBdU5Eocopk3M0p9 i+wZu9mpy9TWqSiIJrewO6ziZq4V0P/8LHmNqFUhrgBpB6l10VhcXeFs1GOb4u4XevFzWAgvwMX 82998t5MNV0ySUT5dvAdXG5Dzxeq3D6QZbYg3ioLCvbWFgcznRAqXklkYvG+ZnPR5iaqcIG3NaK OaL0VYkU8INV5akBs0gS51RZt3Ca9ZbxH6C08E4OQlrIv2g5/h/LD5PYVxWtxpoBl/vIzGl+YOq 22kfZaJdafHQ9PwSzYdWVXEc X-Google-Smtp-Source: AGHT+IGr/+2B6+LJ1kyUP+IBLvQ2LLQlOOS30Ru02Ofx3ziT/PGCoQW+M+Ou9DSuWC6URGy5iQFp+g== X-Received: by 2002:a05:6214:268f:b0:6cb:c9cf:cd40 with SMTP id 6a1803df08f44-6d856bd1e51mr59641196d6.8.1732638031784; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:31 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:58 +0000 Subject: [PATCH 8/9] 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: <20241126-uvc-granpower-ng-v1-8-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.13.0 There are some ioctls that do not need to turn on the camera. Do not call uvc_status_get in those cases. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 3595f67fd7e2..0a058798d075 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1455,6 +1455,26 @@ static long uvc_v4l2_video_ioctl2(struct file *file, { struct uvc_fh *handle =3D file->private_data; =20 + /* The following IOCTLs do not need to turn on the camera. */ + switch (cmd) { + case VIDIOC_CREATE_BUFS: + case VIDIOC_DQBUF: + case VIDIOC_ENUM_FMT: + case VIDIOC_ENUM_FRAMEINTERVALS: + case VIDIOC_ENUM_FRAMESIZES: + case VIDIOC_ENUMINPUT: + case VIDIOC_EXPBUF: + case VIDIOC_G_FMT: + case VIDIOC_G_PARM: + case VIDIOC_G_SELECTION: + case VIDIOC_QBUF: + case VIDIOC_QUERYCAP: + case VIDIOC_REQBUFS: + case VIDIOC_SUBSCRIBE_EVENT: + case VIDIOC_UNSUBSCRIBE_EVENT: + return video_ioctl2(file, cmd, arg); + } + guard(uvc_status)(handle->stream->dev); =20 return video_ioctl2(file, cmd, arg); --=20 2.47.0.338.g60cca15819-goog From nobody Mon Feb 9 10:11:32 2026 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (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 264391DDC35 for ; Tue, 26 Nov 2024 16:20:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638037; cv=none; b=VqOgcBjnRxOs4waFQbZYzyYAYqp1XjNUho1/006remxmhIBlkJR4IeK2Fwwb2vYEwkYy8oEMASxN3CfdRBuKCiZDLF4Ln5vF1l09SWRrIWhvS4JpM81tC5gXdItE7QOT/pcqk1bxyEXbFwFCI71raKPzzgzSLsnFFX06l9O487Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732638037; c=relaxed/simple; bh=x5kYRVcSK4regsPtlTEktgdS6fXUdjiyw9Jv/VfqSKI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Nv24oF9fNfSBRl6/W+aq2ueoXYTuND4X3p2B8BwKL/QueWwDg3srj0DdJV9f4LbBKq/qwAGu7UBIG6I1XFWXtlWMDVHxoL0239tpnmninapYuhY87rHGY7ZFFb7hpLK+WaGOP93UaaWP6qCsREQADbS9Er5mA56ffgxzwC8pp18= 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=BhwTGNUp; arc=none smtp.client-ip=209.85.210.50 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="BhwTGNUp" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-71d40003870so774886a34.0 for ; Tue, 26 Nov 2024 08:20:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1732638033; x=1733242833; 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=yxOLHw2VBQB5L41d2F/BZfaylw/KjmpdZ2BT3uiOSdE=; b=BhwTGNUporFl25ZPpR1NvU06BawTuoW47fC+3eZQpOZVhREAMB029UbplE7PMG0lTB Gbu0rWMp6oZyb15A3wnbi+hYJqtF1SXdOm4at+dXs3Vsxaj/yGgU+52W9V0XdRQTPJfM YGLYZDdy2O5GdW7O9mJlwGvu3nCZO5dEQ60VY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732638033; x=1733242833; 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=yxOLHw2VBQB5L41d2F/BZfaylw/KjmpdZ2BT3uiOSdE=; b=oZ7bTHW6MzrJkaGuWm+tSxONWBFbg153zhY3UOsqzWGqUa1G7YT7YXB3ymmX7H32YA r5Y3L+eIlh+zThGTJMHSRg8viSjwf+NwHX73I+8ck/Qc5lMf6vqzk5Ho5b0E0o/0yvNN K0LyBkGaJzWXnOziCQKEUMl9a3kZoSyTWhFOL4DeXXTOdw0mBysvt5XMmpUahGx2Wtqj sLqtIVkIIodLIyVfNPcYIdq47/FTcNPi3d10bv1D2XXxNVY4v6Pq0zQQw/kFwdSXkKRD uKKYUHxtSwclyCb8fKA2uneMZk1alBTXgAu1qHILqXugFIbutfhJ8k9/b+DWu2EGBcWW jIDg== X-Forwarded-Encrypted: i=1; AJvYcCUanj1kibeMQKmrXcQ4OkiDVQIrXJKXr1/g/zD9iP9OVb/D1pwDK97uX6bihQbveN30b3SkYj+jjNZ5kbA=@vger.kernel.org X-Gm-Message-State: AOJu0YzYyJVjBLWvG7JhqdC5gPI5P+YpgUiSIslS3LPI/CfhmK6HutoR jQVTy/x2ClATOawRbsXYlLAm8djTqUyOfQI3nxXjt6qQkSkadYZOVGIb6rSUmA== X-Gm-Gg: ASbGnctxY2t8+NmJT1q2r5TWhTlW67OYaR4f44x9jb7DFeGy0b8lAiTCs7i61ZasuRi nddG0+hAtS45x1Ds+ewXIp+1cPgaDhHrhES87IFlgi/T2VOuI+au083NUrAXL0K55QLkG7diCzT tyfkn38tTVh0g2vgeOJUSdgiPMfrOqekzqUGFkmvpuzTK0eIBit8OyUTIDx2mfO5eact7ss3kjX txamTJcFZreUqkhTxRibLgqZoynuvZDvbNl4TB7XLYsIsVAh6xrzilaVUhlnjdrAaXy+Dbv4fNb e2jN2TEmEBkIQcgVE74cNYqs X-Google-Smtp-Source: AGHT+IH9UXCX+Ay1aMbd9HmFc/mZX4tEK6BZIIou4isklRZcLG+NWhVRDKABiscK2ZTOUwj4/Pc5Ow== X-Received: by 2002:a05:6358:52c7:b0:1ca:adf1:2e98 with SMTP id e5c5f4694b2df-1caadf1307bmr111624355d.1.1732638033244; Tue, 26 Nov 2024 08:20: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 a1e0cc1a2514c-85b4e8205fdsm346532241.1.2024.11.26.08.20.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2024 08:20:32 -0800 (PST) From: Ricardo Ribalda Date: Tue, 26 Nov 2024 16:18:59 +0000 Subject: [PATCH 9/9] media: uvcvideo: Remove duplicated cap/out code 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: <20241126-uvc-granpower-ng-v1-9-6312bf26549c@chromium.org> References: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@chromium.org> In-Reply-To: <20241126-uvc-granpower-ng-v1-0-6312bf26549c@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 The *_vid_cap and *_vid_out helpers seem to be identical. Remove all the duplicated code. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_v4l2.c | 112 ++++++++---------------------------= ---- 1 file changed, 22 insertions(+), 90 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 0a058798d075..cc32ce3275da 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -361,9 +361,11 @@ static int uvc_v4l2_try_format(struct uvc_streaming *s= tream, return ret; } =20 -static int uvc_v4l2_get_format(struct uvc_streaming *stream, - struct v4l2_format *fmt) +static int uvc_ioctl_g_fmt(struct file *file, void *fh, + struct v4l2_format *fmt) { + struct uvc_fh *handle =3D fh; + struct uvc_streaming *stream =3D handle->stream; const struct uvc_format *format; const struct uvc_frame *frame; int ret =3D 0; @@ -395,9 +397,11 @@ static int uvc_v4l2_get_format(struct uvc_streaming *s= tream, return ret; } =20 -static int uvc_v4l2_set_format(struct uvc_streaming *stream, - struct v4l2_format *fmt) +static int uvc_ioctl_s_fmt(struct file *file, void *fh, + struct v4l2_format *fmt) { + struct uvc_fh *handle =3D fh; + struct uvc_streaming *stream =3D handle->stream; struct uvc_streaming_control probe; const struct uvc_format *format; const struct uvc_frame *frame; @@ -673,11 +677,13 @@ static int uvc_ioctl_querycap(struct file *file, void= *fh, return 0; } =20 -static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream, +static int uvc_ioctl_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *fmt) { - const struct uvc_format *format; + struct uvc_fh *handle =3D fh; + struct uvc_streaming *stream =3D handle->stream; enum v4l2_buf_type type =3D fmt->type; + const struct uvc_format *format; u32 index =3D fmt->index; =20 if (fmt->type !=3D stream->type || fmt->index >=3D stream->nformats) @@ -695,82 +701,8 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *st= ream, return 0; } =20 -static int uvc_ioctl_enum_fmt_vid_cap(struct file *file, void *fh, - struct v4l2_fmtdesc *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - return uvc_ioctl_enum_fmt(stream, fmt); -} - -static int uvc_ioctl_enum_fmt_vid_out(struct file *file, void *fh, - struct v4l2_fmtdesc *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - return uvc_ioctl_enum_fmt(stream, fmt); -} - -static int uvc_ioctl_g_fmt_vid_cap(struct file *file, void *fh, - struct v4l2_format *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - return uvc_v4l2_get_format(stream, fmt); -} - -static int uvc_ioctl_g_fmt_vid_out(struct file *file, void *fh, - struct v4l2_format *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - - return uvc_v4l2_get_format(stream, fmt); -} - -static int uvc_ioctl_s_fmt_vid_cap(struct file *file, void *fh, - struct v4l2_format *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - - return uvc_v4l2_set_format(stream, fmt); -} - -static int uvc_ioctl_s_fmt_vid_out(struct file *file, void *fh, - struct v4l2_format *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - ret =3D uvc_acquire_privileges(handle); - if (ret < 0) - return ret; - - return uvc_v4l2_set_format(stream, fmt); -} - -static int uvc_ioctl_try_fmt_vid_cap(struct file *file, void *fh, - struct v4l2_format *fmt) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - struct uvc_streaming_control probe; - - return uvc_v4l2_try_format(stream, fmt, &probe, NULL, NULL); -} - -static int uvc_ioctl_try_fmt_vid_out(struct file *file, void *fh, - struct v4l2_format *fmt) +static int uvc_ioctl_try_fmt(struct file *file, void *fh, + struct v4l2_format *fmt) { struct uvc_fh *handle =3D fh; struct uvc_streaming *stream =3D handle->stream; @@ -1576,14 +1508,14 @@ static unsigned long uvc_v4l2_get_unmapped_area(str= uct file *file, =20 const struct v4l2_ioctl_ops uvc_ioctl_ops =3D { .vidioc_querycap =3D uvc_ioctl_querycap, - .vidioc_enum_fmt_vid_cap =3D uvc_ioctl_enum_fmt_vid_cap, - .vidioc_enum_fmt_vid_out =3D uvc_ioctl_enum_fmt_vid_out, - .vidioc_g_fmt_vid_cap =3D uvc_ioctl_g_fmt_vid_cap, - .vidioc_g_fmt_vid_out =3D uvc_ioctl_g_fmt_vid_out, - .vidioc_s_fmt_vid_cap =3D uvc_ioctl_s_fmt_vid_cap, - .vidioc_s_fmt_vid_out =3D uvc_ioctl_s_fmt_vid_out, - .vidioc_try_fmt_vid_cap =3D uvc_ioctl_try_fmt_vid_cap, - .vidioc_try_fmt_vid_out =3D uvc_ioctl_try_fmt_vid_out, + .vidioc_enum_fmt_vid_cap =3D uvc_ioctl_enum_fmt, + .vidioc_enum_fmt_vid_out =3D uvc_ioctl_enum_fmt, + .vidioc_g_fmt_vid_cap =3D uvc_ioctl_g_fmt, + .vidioc_g_fmt_vid_out =3D uvc_ioctl_g_fmt, + .vidioc_s_fmt_vid_cap =3D uvc_ioctl_s_fmt, + .vidioc_s_fmt_vid_out =3D uvc_ioctl_s_fmt, + .vidioc_try_fmt_vid_cap =3D uvc_ioctl_try_fmt, + .vidioc_try_fmt_vid_out =3D uvc_ioctl_try_fmt, .vidioc_reqbufs =3D uvc_ioctl_reqbufs, .vidioc_querybuf =3D uvc_ioctl_querybuf, .vidioc_qbuf =3D uvc_ioctl_qbuf, --=20 2.47.0.338.g60cca15819-goog