From nobody Sat Feb 7 07:25:57 2026 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 384E91442E4 for ; Mon, 25 Mar 2024 16:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384298; cv=none; b=SOyQaW3Z2D8Cgfs8v3RR0w/BKZq7f7EtukiqOdi2lHWiNljsG02/6fj3vca0FhCjtEcJpw8sTYxb0UVK39U6xbZqyJgJdvU1Cs7Ryfp6kb7qveVjDGT6Z08hlEzptLuiAWxK32keeAdlRcUc+rCJ8b9jqVQ4GSb37gIdy81DS/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384298; c=relaxed/simple; bh=IbGWx43paY/eY3BoKH9LIehCJLKILNpJ3miMe4Ay6xU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GQp6hw1JSuSEWcGnTcx6osJsHSrNAET/EK7hoSwD2B+PoaRokzl/RSOmJsUInbZosoGfHnAE7aG4yk/y4rH38JJYdmUe1nRpmSDLKJOv2eE5VCpfsyDrkNYMWtrROMUnUZs/ZmiJSGND48A2ZeIejoaqtBsVaE88FiiEyz07oPM= 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=XALqHOUR; arc=none smtp.client-ip=209.85.219.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="XALqHOUR" Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-690bd329df2so25521906d6.2 for ; Mon, 25 Mar 2024 09:31:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1711384296; x=1711989096; 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=yu6CRq784zZk8JmoJH+VcllViInTfNkEV44O9xYOrqY=; b=XALqHOURwLxzSrUCmAtzogdBXLS0B10YeY7xXUN84e1uA57vs8G54f9t1Y15lCoT8t WpkWbGRHUb9R29DwN6A/Az5w6p9CJq1wX5t42u6je8wLdJb36RWtA8D8cYPRhDv4E2ll 1pdDG2ZiTdgYbtAaePhd2mdxyCXDYj6DIruk0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711384296; x=1711989096; 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=yu6CRq784zZk8JmoJH+VcllViInTfNkEV44O9xYOrqY=; b=K3qtdCcKbw4VYwcopYMVW87/6WlMdET94MVzbs5kiv1lYRx/R3NBHEAZaVA8H1JUH8 LZ5EuQBbIfR12qcXajeGrjcmfFMeKWcy9SWShtBKZr8mEDByreiC0NAalc3GdIMcIU1Z sdI98Ka182bJ7WbKfUr0CSesOIaHQrximGTbKK/ArmatBCwGGjeXdrbJ3gImSxn+Nr5A giyzty0gAsACkVMCCLf/grIA8+NNSN6+XLjPFp5X5Rz4QXvmZ8lJUtcX3BJLdk2UEpZ0 9yzGf2vAbLwtMbruS14IIFjGZ3kDW5jEt1jW3Tchakp/9R9bE11o1t54L/sq+cUlayUF vm7w== X-Forwarded-Encrypted: i=1; AJvYcCU4G0yPNrm6s2CqaYKiqbm2KcUjqQUmtLTTSyL9SQU7ePymI6y6nYESQTqZ2Ju7aVrzs4qSBUgQzxKy0KtmUMP9DvoMR2GPzVUGVXs/ X-Gm-Message-State: AOJu0YziI3IBe6QF4BN/4xb88YVCc+VJAmTl49DqduVZG8xSkT1xW72U 0ydbDvk7op+hOgCtuAFVwiR4rLiN7QlETb903n8t+Co9ph224cnetTEnLzKDEUwRhSTGd05K1+i OlA== X-Google-Smtp-Source: AGHT+IEtUg0mwiYcW1LyaV+FksxmaMuJ5FBKdGORci81ZmbE9EryF5lCqjbumq/U6M1tZw0jXCPXEQ== X-Received: by 2002:a05:6214:acc:b0:696:3705:fe5a with SMTP id g12-20020a0562140acc00b006963705fe5amr9938267qvi.7.1711384296101; Mon, 25 Mar 2024 09:31:36 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id jr9-20020a0562142a8900b006905c8b37bbsm376330qvb.133.2024.03.25.09.31.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 09:31:35 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 25 Mar 2024 16:31:33 +0000 Subject: [PATCH v3 1/3] media: uvcvideo: stop stream during unregister 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: <20240325-guenter-mini-v3-1-c4bc61d84e03@chromium.org> References: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> In-Reply-To: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , Max Staudt , Tomasz Figa , Laurent Pinchart , Alan Stern , Hans Verkuil , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Paul , Ricardo Ribalda , Sakari Ailus X-Mailer: b4 0.12.4 uvc_unregister_video() can be called asynchronously from uvc_disconnect(). If the device is still streaming when that happens, a plethora of race conditions can happen. Make sure that the device has stopped streaming before exiting this function. If the user still holds handles to the driver's file descriptors, any ioctl will return -ENODEV from the v4l2 core. This change make uvc more consistent with the rest of the v4l2 drivers using the vb2_fop_* and vb2_ioctl_* helpers. Suggested-by: Hans Verkuil Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_driver.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index bbd90123a4e76..17fc945c8deb6 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1911,8 +1911,19 @@ static void uvc_unregister_video(struct uvc_device *= dev) if (!video_is_registered(&stream->vdev)) continue; =20 + /* + * Serialize other access to the stream. + */ + mutex_lock(&stream->mutex); + uvc_queue_streamoff(&stream->queue, stream->type); video_unregister_device(&stream->vdev); video_unregister_device(&stream->meta.vdev); + mutex_unlock(&stream->mutex); + + /* + * Now the vdev is not streaming and all the ioctls will + * return -ENODEV + */ =20 uvc_debugfs_cleanup_stream(stream); } --=20 2.44.0.396.g6e790dbe36-goog From nobody Sat Feb 7 07:25:57 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (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 478F31442EF for ; Mon, 25 Mar 2024 16:31:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384299; cv=none; b=ZHKS7fEcYydq+5ZvtXL1I0Dk4eybR8ih+xKgTP4Li3FeKZk7/xHG6jRjfTC/wF470n5futDVMufTYdAAOh5OJ86QGOQkV39XUnDGZpJ6T2NUnanb4/LdoUZslUJ/9P8S62J24idtQrcyZQ3Cgr3X7LwjzrXfjnIb71Pne9rnpSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384299; c=relaxed/simple; bh=JlvQ9Yfn11uIbhjEgaTFQsmPGd/1yuqa1pSRCbtCi84=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nfuZgNE8PSP7VHDS+rsuWzQyNgYUj5+FP4b0WSVTtNHoeufLM3Mv/UI1n0Lq5xAiMzBXDRyYAR8AEfymWz71iHH6aDXSaB798fNPw/8xam9U0YH7/rn0Q/yj5fHSCdSjOulLUCwqxgQ8bTT6nuP9PTFuY/h/dvCHc/n6IjYahSY= 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=DvvLcanG; arc=none smtp.client-ip=209.85.210.49 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="DvvLcanG" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-6e6a5bd015dso2200021a34.2 for ; Mon, 25 Mar 2024 09:31:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1711384297; x=1711989097; 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=7Nvi44hWY4ZiLch2QLFxmRlfeQ6MV7x23bO6+n52bYE=; b=DvvLcanGWrqOM87X8pEfRNoLZSMOy9ii0EBYfXZWKEwbRaj5Leivm63pWXJzIZj7Z/ rVSKAFEb/2cKNeaKJH2vCt8a/PXjrFhpN5WMUkQttzM5vLFt5hfog0/0rsChxU0Yp05T m3dJlpWPEq+QBGqrgd0pDPeIo3YuX3fX+rF48= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711384297; x=1711989097; 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=7Nvi44hWY4ZiLch2QLFxmRlfeQ6MV7x23bO6+n52bYE=; b=SSMouERNLCwmoQRyqCE9lCnNHjjgqdoxppgcMoLU0gMOIOD0NUKyroBDKqT4E6Ratr gpiv09O0nq9tTj6JI0dKLg1KQ/aD6Xns7rAJaAIJZU9cWqS/Cpq1/vW3RKtz8DZ9cO+1 ZNftapaYVQEadys1w+e+GuGISRorBCV8NwroYZX4MP1ntExqSx3LmJqx2LtusbkLPzVN pgSFVM87Nv0UnHV7ReQ4KGRdFdZw7dG1axSqjGkT66AxOzBqr9r30XlmI/YVr90pZ5UO 3vwRT2Imhv5IakSUaC87U2BEMJX3f96tmrOqoorDaSU93qyiS+sZJNG19kDVHjgPt1hz IpUQ== X-Forwarded-Encrypted: i=1; AJvYcCUlAmUg2od7Bon/TW4hvJ1AQKTKsIITj6ol67zaDjW3jUsyKbmqXuETc1KxTiDRnenicb+intuwj4QaTE3jydW3v+ZgFFihkqCc6Kr2 X-Gm-Message-State: AOJu0YzGL5ES+2OYUesedg7/5rcD8aaVyGjxGyedyKh8OuELg2B7aK7m 6PLNTtvA822Op/Ztg5sy/5XkTP9ml1sQRt2UIsF6RJUNfIHG7yxs2o86SOXYtg== X-Google-Smtp-Source: AGHT+IGL6ElCSHpsFv9WEDn+/Rwz1Qq56BdY9L8OznTxh2JDZ+MC9Fj8h5NC3ublq3EXy1tW8YR6uA== X-Received: by 2002:a9d:69d9:0:b0:6e4:e561:6ba7 with SMTP id v25-20020a9d69d9000000b006e4e5616ba7mr9350669oto.25.1711384297319; Mon, 25 Mar 2024 09:31:37 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id jr9-20020a0562142a8900b006905c8b37bbsm376330qvb.133.2024.03.25.09.31.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 09:31:36 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 25 Mar 2024 16:31:34 +0000 Subject: [PATCH v3 2/3] media: uvcvideo: Refactor the status irq API 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: <20240325-guenter-mini-v3-2-c4bc61d84e03@chromium.org> References: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> In-Reply-To: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , Max Staudt , Tomasz Figa , Laurent Pinchart , Alan Stern , Hans Verkuil , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Paul , Ricardo Ribalda , Sakari Ailus X-Mailer: b4 0.12.4 There are two different use-cases of uvc_status(): - adding/removing a user when the camera is open/closed - stopping/starting when the camera is suspended/resumed Make the API reflect these two use-cases and move all the refcounting and locking logic to the uvc_status.c file. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_driver.c | 13 ++------- drivers/media/usb/uvc/uvc_status.c | 57 ++++++++++++++++++++++++++++++++++= ++-- drivers/media/usb/uvc/uvc_v4l2.c | 22 ++++----------- drivers/media/usb/uvc/uvcvideo.h | 10 ++++--- 4 files changed, 68 insertions(+), 34 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index 17fc945c8deb6..b579644ac0745 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2116,7 +2116,6 @@ static int uvc_probe(struct usb_interface *intf, INIT_LIST_HEAD(&dev->streams); kref_init(&dev->ref); atomic_set(&dev->nmappings, 0); - mutex_init(&dev->lock); =20 dev->udev =3D usb_get_dev(udev); dev->intf =3D usb_get_intf(intf); @@ -2282,10 +2281,7 @@ static int uvc_suspend(struct usb_interface *intf, p= m_message_t message) /* Controls are cached on the fly so they don't need to be saved. */ if (intf->cur_altsetting->desc.bInterfaceSubClass =3D=3D UVC_SC_VIDEOCONTROL) { - mutex_lock(&dev->lock); - if (dev->users) - uvc_status_stop(dev); - mutex_unlock(&dev->lock); + uvc_status_suspend(dev); return 0; } =20 @@ -2316,12 +2312,7 @@ static int __uvc_resume(struct usb_interface *intf, = int reset) return ret; } =20 - mutex_lock(&dev->lock); - if (dev->users) - ret =3D uvc_status_start(dev, GFP_NOIO); - mutex_unlock(&dev->lock); - - return ret; + return uvc_status_resume(dev); } =20 list_for_each_entry(stream, &dev->streams, list) { diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc= _status.c index a78a88c710e24..ff66482346dde 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -262,6 +262,8 @@ int uvc_status_init(struct uvc_device *dev) =20 uvc_input_init(dev); =20 + mutex_init(&dev->status_lock); + dev->status =3D kzalloc(sizeof(*dev->status), GFP_KERNEL); if (!dev->status) return -ENOMEM; @@ -292,7 +294,7 @@ int uvc_status_init(struct uvc_device *dev) =20 void uvc_status_unregister(struct uvc_device *dev) { - usb_kill_urb(dev->int_urb); + uvc_status_suspend(dev); uvc_input_unregister(dev); } =20 @@ -302,18 +304,22 @@ void uvc_status_cleanup(struct uvc_device *dev) kfree(dev->status); } =20 -int uvc_status_start(struct uvc_device *dev, gfp_t flags) +static int _uvc_status_start(struct uvc_device *dev, gfp_t flags) { + lockdep_assert_held(&dev->status_lock); + if (dev->int_urb =3D=3D NULL) return 0; =20 return usb_submit_urb(dev->int_urb, flags); } =20 -void uvc_status_stop(struct uvc_device *dev) +static void _uvc_status_stop(struct uvc_device *dev) { struct uvc_ctrl_work *w =3D &dev->async_ctrl; =20 + lockdep_assert_held(&dev->status_lock); + /* * Prevent the asynchronous control handler from requeing the URB. The * barrier is needed so the flush_status change is visible to other @@ -350,3 +356,48 @@ void uvc_status_stop(struct uvc_device *dev) */ smp_store_release(&dev->flush_status, false); } + +int uvc_status_resume(struct uvc_device *dev) +{ + int ret =3D 0; + + mutex_lock(&dev->status_lock); + if (dev->status_users) + ret =3D _uvc_status_start(dev, GFP_NOIO); + mutex_unlock(&dev->status_lock); + + return ret; +} + +void uvc_status_suspend(struct uvc_device *dev) +{ + mutex_lock(&dev->status_lock); + if (dev->status_users) + _uvc_status_stop(dev); + mutex_unlock(&dev->status_lock); +} + +int uvc_status_get(struct uvc_device *dev) +{ + int ret =3D 0; + + mutex_lock(&dev->status_lock); + if (!dev->status_users) + ret =3D _uvc_status_start(dev, GFP_KERNEL); + if (!ret) + dev->status_users++; + mutex_unlock(&dev->status_lock); + + return ret; +} + +void uvc_status_put(struct uvc_device *dev) +{ + mutex_lock(&dev->status_lock); + if (dev->status_users =3D=3D 1) + _uvc_status_stop(dev); + WARN_ON(!dev->status_users); + if (dev->status_users) + dev->status_users--; + mutex_unlock(&dev->status_lock); +} diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index f4988f03640ae..97c5407f66032 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -628,20 +628,13 @@ static int uvc_v4l2_open(struct file *file) return -ENOMEM; } =20 - mutex_lock(&stream->dev->lock); - if (stream->dev->users =3D=3D 0) { - ret =3D uvc_status_start(stream->dev, GFP_KERNEL); - if (ret < 0) { - mutex_unlock(&stream->dev->lock); - usb_autopm_put_interface(stream->dev->intf); - kfree(handle); - return ret; - } + ret =3D uvc_status_get(stream->dev); + if (ret) { + usb_autopm_put_interface(stream->dev->intf); + kfree(handle); + return ret; } =20 - stream->dev->users++; - mutex_unlock(&stream->dev->lock); - v4l2_fh_init(&handle->vfh, &stream->vdev); v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; @@ -670,10 +663,7 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - mutex_lock(&stream->dev->lock); - if (--stream->dev->users =3D=3D 0) - uvc_status_stop(stream->dev); - mutex_unlock(&stream->dev->lock); + uvc_status_put(stream->dev); =20 usb_autopm_put_interface(stream->dev->intf); return 0; diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 6fb0a78b1b009..00b600eb058cc 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -555,8 +555,6 @@ struct uvc_device { =20 const struct uvc_device_info *info; =20 - struct mutex lock; /* Protects users */ - unsigned int users; atomic_t nmappings; =20 /* Video control interface */ @@ -578,6 +576,8 @@ struct uvc_device { struct usb_host_endpoint *int_ep; struct urb *int_urb; struct uvc_status *status; + struct mutex status_lock; /* Protects status_users */ + unsigned int status_users; bool flush_status; =20 struct input_dev *input; @@ -744,8 +744,10 @@ int uvc_register_video_device(struct uvc_device *dev, int uvc_status_init(struct uvc_device *dev); void uvc_status_unregister(struct uvc_device *dev); void uvc_status_cleanup(struct uvc_device *dev); -int uvc_status_start(struct uvc_device *dev, gfp_t flags); -void uvc_status_stop(struct uvc_device *dev); +int uvc_status_resume(struct uvc_device *dev); +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 /* Controls */ extern const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limite= d; --=20 2.44.0.396.g6e790dbe36-goog From nobody Sat Feb 7 07:25:57 2026 Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) (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 749E014430F for ; Mon, 25 Mar 2024 16:31:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384301; cv=none; b=gAyCtpdh+luU/5hKxNqsfRdLEMGkn7OY5OHlWvTdFVbM1uVWGh0em3hIZosGGfw8rtVbiKWfgZjTsXgsSnN2f9AC99hzLXwF2RNJC97nbfSXUXOXTqdlE1MQNxerZ4HUbB6ZZ2GC8Rs+flCRGXYFYH/cJlZZeSE7ksQiz3pS950= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711384301; c=relaxed/simple; bh=aOOKQc0+BjjZOy3Vjv74lXq/IqKybd1rwgZmgeR9ipA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MuFSgkbNIlrm27dofo54zWoTQ5LuJMSiMDQQ23LZtdGrn8nUzgUti1lt5dbDZyEsyb0VBLvGimJ/qMDkX0y8z70zsLXeF3rx+a6ynlv7g5qMr+OLvBvDwybCg8HUIRM3E6mm5OF3wz/u1ZlFNb1BV6eCM9l2sOZRb0iBqJG1MD0= 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=OXYX0vK7; arc=none smtp.client-ip=209.85.219.49 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="OXYX0vK7" Received: by mail-qv1-f49.google.com with SMTP id 6a1803df08f44-690bd329df2so25522206d6.2 for ; Mon, 25 Mar 2024 09:31:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1711384298; x=1711989098; 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=BVxxZahJvjEwwum0ohe5k7ku49jCEwk4G4aHidn4xg0=; b=OXYX0vK7tfQH7jnw4traRHrdXVn5h7uu7+Bgvg76LCeecfwZ+kS3HLO4eCl3oj3JWg VDrwaV/1LJkcJNau0Rqwmpq/wEZ2fp906JYMrjLKCtGCBKu1LNXyKAMRNZJ4l3SVSqoD PaKb/AQZEZLfgjvFay1pKc0eFBEru+y+ZJnu8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711384298; x=1711989098; 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=BVxxZahJvjEwwum0ohe5k7ku49jCEwk4G4aHidn4xg0=; b=t1mQXQySmNtVNOaYBweQVMH/PzbEXGF+WCo3nXp4oN9Z4eaPoxdOa9XyYVKcdJokmZ Pm1yiwJfDKWNa8N1gajm4HEGEUBMlFN7aWVnA4o0tFenG8L1yiTB8NNTw/C6RYEc+iAF WgvJnsYMCd6O8NwV3VwkxwvrXJfXfsmm0k5Lz+ygS0JK1+xfJEW2yQ7iomywOf0s1N5Z TE3Xco+4J5sISwG4dQqJk2JdddsEtugKRiuM/b6+G4KIFdfhk+KKwAeaJfsxdnc18LKk +wmmJLkD8yFk2icPGwuczXrlJDFHobTm5NyQuz/4CRgFWtG2nmvzYSTlUEUSgzSlsoWC wPzw== X-Forwarded-Encrypted: i=1; AJvYcCWCjD6lAhE2D++WuI6/CO/8KgkGyLo+3OGLCJjPJbMGSiHlvNp1TTnMqY1C2QYmlY+O7ZK8nMKVpqEpQnQMZZuK1Xz6Q5INo+wBJgkI X-Gm-Message-State: AOJu0YxhzBH44M973dqhDVQeGGPt9rKGqjOKCopwsVg/8bA6vv2Hy1zU wAfObk2ag+Y3UdbVHL8cxP6Ne9mROuylQyXTvi0SHdl6JYmUbo0+w7/wfiXciQ== X-Google-Smtp-Source: AGHT+IFaAdbf/X8AXK38Yh+rghPapO/rYthILa86FqkUwUs85GXtW0rd0aFddwLw/d0hBD3qkfuVSw== X-Received: by 2002:ad4:4303:0:b0:696:8865:3437 with SMTP id c3-20020ad44303000000b0069688653437mr3182212qvs.65.1711384298419; Mon, 25 Mar 2024 09:31:38 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id jr9-20020a0562142a8900b006905c8b37bbsm376330qvb.133.2024.03.25.09.31.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 09:31:37 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 25 Mar 2024 16:31:35 +0000 Subject: [PATCH v3 3/3] media: uvcvideo: Exit early if there is not int_urb 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: <20240325-guenter-mini-v3-3-c4bc61d84e03@chromium.org> References: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> In-Reply-To: <20240325-guenter-mini-v3-0-c4bc61d84e03@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , Max Staudt , Tomasz Figa , Laurent Pinchart , Alan Stern , Hans Verkuil , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Paul , Ricardo Ribalda , Sakari Ailus X-Mailer: b4 0.12.4 If there is no in_urb there is no need to do a clean stop. Also we avoid calling usb_kill_urb(NULL). It is properly handled by the usb framework, but it is not polite. Now that we are at it, fix the code style in uvc_status_start() for consistency. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_status.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc= _status.c index ff66482346dde..f644ac7e67427 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -308,7 +308,7 @@ static int _uvc_status_start(struct uvc_device *dev, gf= p_t flags) { lockdep_assert_held(&dev->status_lock); =20 - if (dev->int_urb =3D=3D NULL) + if (!dev->int_urb) return 0; =20 return usb_submit_urb(dev->int_urb, flags); @@ -320,6 +320,9 @@ static void _uvc_status_stop(struct uvc_device *dev) =20 lockdep_assert_held(&dev->status_lock); =20 + if (!dev->int_urb) + return; + /* * Prevent the asynchronous control handler from requeing the URB. The * barrier is needed so the flush_status change is visible to other --=20 2.44.0.396.g6e790dbe36-goog