From nobody Wed Oct 8 10:36:33 2025 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.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 1122B28DF33 for ; Mon, 30 Jun 2025 14:20:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751293238; cv=none; b=k8QPsXZ6xN1U1ICcQ9em1htV9KHdatO2X0fGdfEFyz5Q0ZNmLgpKKk40ReeASfTkpoSjUmpYRKnIAe+TOjtwcrqSMZEWOnw94D7EyRCBXI92BSjRwXv1VIh0a7U1j1XlQpbmJaZcGLxq5bfxJ/3zkMkferq6uDftRaGZ1cmAva4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751293238; c=relaxed/simple; bh=hUSTM0cz4lDmfgU98My5Gb8Nx4v9DP1TnSn7IZqRpUY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gyki5yiXeHQLiQP61p7kNa2w1ruEIzwOnz7XWVk5tfx0EOQ8C2hqCFehBfgOGBoeg7YptecauR5YUBohkZDN6LaU/Q6RShQoG/8bgmmap37EGte55mmcThE3Ak5zi/htqOBEjxBd3Re8TS65CgMppCCX4hh+mYP2UGa0bQXwoHY= 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=PiBvIEsN; arc=none smtp.client-ip=209.85.208.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="PiBvIEsN" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-32b50f357ecso20309911fa.2 for ; Mon, 30 Jun 2025 07:20:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1751293235; x=1751898035; 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=dnt386dfMPODMMm6G8wrSthRtbiPhPkQSBX13EJa6EE=; b=PiBvIEsNTvjHVdevvsOI2Uon/M/uZxjRxeM4doVgLpzxR3R5yStmBRrmtZFI+usV93 +2wEXtzKWomVl31FFLwWFsyaDILDYo6167xBxf2vT5eQoMljgGNAux58TIUlucz60lRi P6bijaVX8NufnvMwLV5zqKBgOWZJrkEcTrwHI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751293235; x=1751898035; 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=dnt386dfMPODMMm6G8wrSthRtbiPhPkQSBX13EJa6EE=; b=PJjYlf/Eqt5k5xFh3BRcNmy9g/pf93qVwBP6G8YO89OwrvdD5OASi4syqjAuXKxO+i EvBOUz8bQgOD6/+4ZI7SrI3K4h4LSABWkRcw+ewT5ojbxtakEdMyQfl65UEf7J76oNnk uMeKUHrIAHIASplgOvr2Kpxj4z/oUaGBRjAZ0nNYTdNiUROvtw1s4xPf0EhvcEnrJqUw XiyJooi9RHMkMOtzn9YO1nOxPbvC8HXcto1evDCjYpwhsbd56GVsnm7WYye5ltq5C7pq 5mZ+NOFvsvMF+oTtTN+OTczl9Q333rr4TzwBV2nyRNY4VbpNPjIvvJCQCZQVpeaNdoiS pFQQ== X-Forwarded-Encrypted: i=1; AJvYcCWYBq/ywcQg6kZtxkMM5zLZbtEiJ8DMZ78donT0WEhjhbfjSInUcqJw5tpl1auER+HtIpL4otyaqQH6mMc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+fC/eszw1J/JnbpRW17wRNUaRhuuvrK5f8XtqH508vkULCZFX v9x4irLDOqOrHVx/m6VtkuNhbtmpNBQtOQDgV0+ipXxIot1H3eet+sp1qjZWRk84fvl73tztH0g 2mJNQuA== X-Gm-Gg: ASbGncvhQvQjHHQSr3W5lj1SH4fPXbjwlu4DeqwO0kxRNji6reI2JgGc0TlB/zRLrNw GHfD9SlIZxSzZT0XuV6uyPxVgm9nqx/fQVgsT5YZ6aoW+b3vJ0p7norQn1g2RvdfRWYcArBHbSM Bl0cy4jaI+ZBu2L0atkaFXoYRTgWwDUXsYTk2z2mRgWKao0yqxZiLy5Cp4ZmXaoH4VZgHUwANMZ pSnGtr4F/++8bLcmM+rQoAH+9mUmG7cqGybSmT6Ae0vWa9yAcg4xyhCi1WUAQFtmOk/lxTl1ofF G53QLSynqngkfC8o8dnq6KQsT3J9tCDZunELfBDrS7jfAiWitFMnyTBY+c+3JBVmvzRFxOpEeiA 7b+AIF8KolwyYFKKt5zMhDuLG5XlLB+iFASsq1bcRXw== X-Google-Smtp-Source: AGHT+IGdwXnpgUB0vN6sIBFwmisdEJIRVa6FJTkVxayzmF/fNIKWfsG+a9C1TibVfwWUCEy4vc7WRA== X-Received: by 2002:a05:6512:3156:b0:553:34b7:5731 with SMTP id 2adb3069b0e04-5550b7eccf9mr3761330e87.3.1751293229598; Mon, 30 Jun 2025 07:20:29 -0700 (PDT) Received: from ribalda.c.googlers.com (166.141.88.34.bc.googleusercontent.com. [34.88.141.166]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5550b2d8ea8sm1432363e87.210.2025.06.30.07.20.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 07:20:29 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 30 Jun 2025 14:20:29 +0000 Subject: [PATCH v3 4/8] media: uvcvideo: Remove stream->is_streaming field 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: <20250630-uvc-grannular-invert-v3-4-abd5cb5c45b7@chromium.org> References: <20250630-uvc-grannular-invert-v3-0-abd5cb5c45b7@chromium.org> In-Reply-To: <20250630-uvc-grannular-invert-v3-0-abd5cb5c45b7@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab , Hans Verkuil , Hans de Goede , Hans de Goede Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The is_streaming field is used by modular PM to know if the device is currently streaming or not. With the transition to vb2 and fop helpers, we can use vb2 functions for the same functionality. The great benefit is that vb2 already tracks the streaming state for us. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda Link: https://lore.kernel.org/r/20250616-uvc-fop-v4-4-250286570ee7@chromium= .org Reviewed-by: Hans Verkuil Signed-off-by: Hans de Goede --- drivers/media/usb/uvc/uvc_queue.c | 9 +++++++ drivers/media/usb/uvc/uvc_v4l2.c | 51 ++---------------------------------= ---- drivers/media/usb/uvc/uvcvideo.h | 1 - 3 files changed, 11 insertions(+), 50 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_= queue.c index b11f56d62ec0495a8610580367486dfaa31c450d..790184c9843d211d34fa7d66801= 631d5a07450bd 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -175,12 +175,18 @@ static int uvc_start_streaming_video(struct vb2_queue= *vq, unsigned int count) =20 lockdep_assert_irqs_enabled(); =20 + ret =3D uvc_pm_get(stream->dev); + if (ret) + return ret; + queue->buf_used =3D 0; =20 ret =3D uvc_video_start_streaming(stream); if (ret =3D=3D 0) return 0; =20 + uvc_pm_put(stream->dev); + uvc_queue_return_buffers(queue, UVC_BUF_STATE_QUEUED); =20 return ret; @@ -189,11 +195,14 @@ static int uvc_start_streaming_video(struct vb2_queue= *vq, unsigned int count) static void uvc_stop_streaming_video(struct vb2_queue *vq) { struct uvc_video_queue *queue =3D vb2_get_drv_priv(vq); + struct uvc_streaming *stream =3D uvc_queue_to_stream(queue); =20 lockdep_assert_irqs_enabled(); =20 uvc_video_stop_streaming(uvc_queue_to_stream(queue)); =20 + uvc_pm_put(stream->dev); + uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR); } =20 diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index d06ecf3418a988152c6c413568ce32e60040fd87..7ab1bdcfb493fe9f47dbdc86da2= 3cba98d7d10ff 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -617,9 +617,6 @@ static int uvc_v4l2_release(struct file *file) =20 uvc_ctrl_cleanup_fh(handle); =20 - if (handle->is_streaming) - uvc_pm_put(stream->dev); - /* Release the file handle. */ vb2_fop_release(file); =20 @@ -676,50 +673,6 @@ static int uvc_ioctl_try_fmt(struct file *file, void *= fh, return uvc_v4l2_try_format(stream, fmt, &probe, NULL, NULL); } =20 -static int uvc_ioctl_streamon(struct file *file, void *fh, - enum v4l2_buf_type type) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - if (handle->is_streaming) - return 0; - - ret =3D uvc_pm_get(stream->dev); - if (ret) - return ret; - - ret =3D vb2_ioctl_streamon(file, fh, type); - if (ret) { - uvc_pm_put(stream->dev); - return ret; - } - - handle->is_streaming =3D true; - - return 0; -} - -static int uvc_ioctl_streamoff(struct file *file, void *fh, - enum v4l2_buf_type type) -{ - struct uvc_fh *handle =3D fh; - struct uvc_streaming *stream =3D handle->stream; - int ret; - - ret =3D vb2_ioctl_streamoff(file, fh, type); - if (ret) - return ret; - - if (handle->is_streaming) { - handle->is_streaming =3D false; - uvc_pm_put(stream->dev); - } - - return 0; -} - static int uvc_ioctl_enum_input(struct file *file, void *fh, struct v4l2_input *input) { @@ -1320,8 +1273,8 @@ const struct v4l2_ioctl_ops uvc_ioctl_ops =3D { .vidioc_expbuf =3D vb2_ioctl_expbuf, .vidioc_dqbuf =3D vb2_ioctl_dqbuf, .vidioc_create_bufs =3D vb2_ioctl_create_bufs, - .vidioc_streamon =3D uvc_ioctl_streamon, - .vidioc_streamoff =3D uvc_ioctl_streamoff, + .vidioc_streamon =3D vb2_ioctl_streamon, + .vidioc_streamoff =3D vb2_ioctl_streamoff, .vidioc_enum_input =3D uvc_ioctl_enum_input, .vidioc_g_input =3D uvc_ioctl_g_input, .vidioc_s_input =3D uvc_ioctl_s_input, diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index b300487e6ec9163ac8236803b9e819814233f419..3e6d2d912f3a1cfcf63b2bc8edd= 3f86f3da305db 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -629,7 +629,6 @@ struct uvc_fh { struct uvc_video_chain *chain; struct uvc_streaming *stream; unsigned int pending_async_ctrls; - bool is_streaming; }; =20 /* ------------------------------------------------------------------------ --=20 2.50.0.727.gbf7dc18ff4-goog