From nobody Thu Feb 12 15:47:51 2026 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) (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 0C805171099 for ; Tue, 11 Jun 2024 08:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093532; cv=none; b=brGgz5vVZE4zGcXoUVnj0BKjlgx4oYlgTnhXNlXqi0RQRB3/fMqcDlJTA8i7q+v1J8M5GV07W7DsupHrKJE4jaoTq9R3bXtu9hPqv62K6vHpSD/8S/3rfHKh7NHVWS7897ZOEKk7Jxf6v1bAh9DbHL1MRsZFLBQHUbcIJGsc3ZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093532; c=relaxed/simple; bh=VBjl8MShjb4jhR/wD8VA+h2otUV+ZOfH5etejEqA764=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bi2ow0LtMtqUHnmr4zMP/vhSqMJooxTWxMcUSzkDS06KEIMqPzlZxJ6a/2MjHsEHELcbenF4z3truql5PZOJG999RZW6XLOOpLUrTwBKw1f3ku+LPgJCo+5oUVsAgvS/7m3Xvi+xzsf3ltrGD5QwbkGTKx9L1e8Dl1YSYkLrr9w= 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=dQ3GW1cG; arc=none smtp.client-ip=209.85.219.53 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="dQ3GW1cG" Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6b06bdbf9fdso4822236d6.0 for ; Tue, 11 Jun 2024 01:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718093530; x=1718698330; 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=i8v2HQzZnsAarKFZFIMw3d0cEESgGzGkmVZsX2rItjw=; b=dQ3GW1cGwHS6WY7hLP8xLKQ/QFBn0kB0bn+iMZlaGl6loEJnPjk1UT9x5PEmRw1zRP uN8LSed9YT4v2soVzdfBsZfEYLylW69olvevfUFEuB5EiQ5bsAVAobeB9f6I0Vh/mwT2 4PdxyDRNz23oUwD/QsAJaniqMIpSARxGWRs0o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718093530; x=1718698330; 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=i8v2HQzZnsAarKFZFIMw3d0cEESgGzGkmVZsX2rItjw=; b=IRjfuU+hggvtcNmPk8QuvRCRRSnboZX1lJCAzh2blLKPBhIa7EkeDJqyRp5vWNeUI2 XbDHt3ShmrS7b1w9d7STuO3X9kFebX/8+znCi60dU87nNnpQ1hXtqxt0LcoVQ/NLANBC y7lSawJdDs9ff+Mm8oa/XC5eo+dJoiEZRTbgHRLLsq5nngoeMSar3fFoRmmQzeMY8Wsc M3daO+15dbiAEAIKe7VmxYwOx7tPjTUmVB5VBRsSYTQV/iBG3ToPlsc+NhaRS1bL/hX5 F73jy9MKkRHRHhUGnGgyL76lVBhiHzZPdYhvI5+seArjkbfuLq0KwOotdbR4YlFPr9Kq YhaA== X-Forwarded-Encrypted: i=1; AJvYcCXQXFaIL84elh/PpyxvDD+WA+LAL4dF2Nf1xy+k40fkwa7+Nb3wBO45K+ywXid6mbQUKbl78q7sGw13a4PjbnVqLC4bVnoQxxklMCA7 X-Gm-Message-State: AOJu0YzzSoFsgMmMhOSmfJ+QjlOf6bOX83wwDQ3n5T1arSN36E6oMKBh aKnaS7GGfQRKBVbMW1KmWSZOLyy1Mh90ld80N/O8TJy75Z/putqFI4sIkV4+JA== X-Google-Smtp-Source: AGHT+IHJrD3aaT0KJbL4s5UWU+yxBKPow1+9VOCVV8mz/2gwC8+wamLfq6YRjGQFX/uJQr7Tf9Tp0g== X-Received: by 2002:a05:6214:3186:b0:6b0:8b2d:b6e with SMTP id 6a1803df08f44-6b08b2d3a43mr14553876d6.63.1718093529989; Tue, 11 Jun 2024 01:12:09 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b09039c2b9sm1548886d6.28.2024.06.11.01.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 01:12:08 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 11 Jun 2024 08:12:06 +0000 Subject: [PATCH v5 1/4] 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: <20240611-guenter-mini-v5-1-047b6fe5d08b@chromium.org> References: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> In-Reply-To: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , 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.13.0 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 Reviewed-by: Hans Verkuil --- drivers/media/usb/uvc/uvc_driver.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index bbd90123a4e7..f1df6384e738 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1908,11 +1908,41 @@ static void uvc_unregister_video(struct uvc_device = *dev) struct uvc_streaming *stream; =20 list_for_each_entry(stream, &dev->streams, list) { + /* Nothing to do here, continue. */ if (!video_is_registered(&stream->vdev)) continue; =20 + /* + * For stream->vdev we follow the same logic as: + * vb2_video_unregister_device(). + */ + + /* 1. Take a reference to vdev */ + get_device(&stream->vdev.dev); + + /* 2. Ensure that no new ioctls can be called. */ video_unregister_device(&stream->vdev); - video_unregister_device(&stream->meta.vdev); + + /* 3. Wait for old ioctls to finish. */ + mutex_lock(&stream->mutex); + + /* 4. Stop streamming. */ + uvc_queue_streamoff(&stream->queue, stream->type); + + mutex_unlock(&stream->mutex); + + put_device(&stream->vdev.dev); + + /* + * For stream->meta.vdev we can directly call: + * vb2_video_unregister_device(). + */ + vb2_video_unregister_device(&stream->meta.vdev); + + /* + * Now both vdevs are not streaming and all the ioctls will + * return -ENODEV. + */ =20 uvc_debugfs_cleanup_stream(stream); } --=20 2.45.2.505.gda0bf45e8d-goog From nobody Thu Feb 12 15:47:51 2026 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.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 E200617334E for ; Tue, 11 Jun 2024 08:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093536; cv=none; b=lmbFnHTEZ8eBwJUXRiKxPF4a9TAO4am5tqVU2XFnqW2Y/rGUOVaUMKuAulHPC/JO20SUBDEMMEbut8RUCU/SzbUbVbhEWXt6jSPjOJ5PqNeHhtImug0vuyDpPaUnM6iKvSHsCVrUM1L72f+X5aUL7mfTFGf/23+QfsN8mn2S4uQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093536; c=relaxed/simple; bh=64alHD74cnDTIfHQOlIz+XywS99iYHgMLqGlSmRdKn0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=id96vBQKARQOQuc5nu2MFZ8N/pRjA5vTy20/8zZwjY81lZYz5HEIMY4drg5V+rmwdhktXaORr7RxcMbsQ6pfdKAIq1aWSV9zM+/WMBU8IAPN+AiRZY1G6GS5LQwdfAllMssj3s6rVI405upHjZzGC0MIg/nLvs9a79vOohoU/eg= 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=EYrlbsNF; arc=none smtp.client-ip=209.85.219.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="EYrlbsNF" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-6b060f0f48aso4280516d6.1 for ; Tue, 11 Jun 2024 01:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718093532; x=1718698332; 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=EOMaXZDQx8tFTSRH/17UvPzHD6txAvg9gMmc9mkFLc0=; b=EYrlbsNFlqU7UlOXwXFRLpxZs1ELmSEIgSwC/VOo31hy6JHrCCFdUJ81uUN77Weqjd neBxiic6vit+o3v6OUwsdGrxGDx1JmuvKmUZb63E2EQLJriGXPXiPYqWTfxIPx38596p qvivmwk5PGc7yZK+XvOED5pxKiabflCrhnM6Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718093532; x=1718698332; 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=EOMaXZDQx8tFTSRH/17UvPzHD6txAvg9gMmc9mkFLc0=; b=p9h5/CYOGDpOcHobpOXnlmZ+qNYYE0PS5de6JUZgOxlths58PtTWuCfFF+1oLDSBFi mYJXiYLOC91ZFpjgqwJT0HWNdvm3h/ZdSjGPXUESH3YTID874KQn4uz9dByxlup+JzJJ W/4eiR8IPUMtrVKZP90yufQ0j6llsVQKI94UO+A0/eJMZX3g8V6QYalA+Vhfu9S7bMzV H5L26ohkOlLC4rAjURXgpItk/a7Elxn4ooWYx1X9jvHo4hxfPmGhIJGg8u7QML+yyX33 eJJU2dFMICnBgzC2RKnHCVTFIqRg5D8UGi9WXCrhgpjnhnUYqDGKiClsPIk8iIQBPVpK kWzQ== X-Forwarded-Encrypted: i=1; AJvYcCWYsYeXFuu10dUgK0ExURYvnME3QuycMegE8yXSvmVKLTXNaJ2+g+63i69CKiG/AfzJh73cmIqJ4PzHgl6xcfQuhxIqDLxVkMa8A2Og X-Gm-Message-State: AOJu0Yy+CgF3XDSk1MxOLNU2yfWbxf9Kkb2K5qS+3rRTh6ouQw8pfH/r TWDbUUdQyaoLCoI5zYqt2VzRCg9e99Orq4/wmEEnmN0AB67ShQbrysQ4O20rHA== X-Google-Smtp-Source: AGHT+IGJ+4NUXCKFlk1lZknsxWrx0lQOFKK6eC9/TccyOHyB219dw2R65Gykyu0l1FHZsE4vR0WQQw== X-Received: by 2002:a05:6214:4486:b0:6a3:294b:5622 with SMTP id 6a1803df08f44-6b059b712camr137350906d6.17.1718093531754; Tue, 11 Jun 2024 01:12:11 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b09039c2b9sm1548886d6.28.2024.06.11.01.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 01:12:11 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 11 Jun 2024 08:12:07 +0000 Subject: [PATCH v5 2/4] 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: <20240611-guenter-mini-v5-2-047b6fe5d08b@chromium.org> References: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> In-Reply-To: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , 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.13.0 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 | 55 ++++++++++++++++++++++++++++++++++= ++-- drivers/media/usb/uvc/uvc_v4l2.c | 22 +++++---------- drivers/media/usb/uvc/uvcvideo.h | 10 ++++--- 4 files changed, 67 insertions(+), 33 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index f1df6384e738..078b8fb05b54 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2135,7 +2135,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); @@ -2301,10 +2300,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 @@ -2335,12 +2331,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 a78a88c710e2..375a95dd3011 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -257,6 +257,8 @@ int uvc_status_init(struct uvc_device *dev) unsigned int pipe; int interval; =20 + mutex_init(&dev->status_lock); + if (ep =3D=3D NULL) return 0; =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 f4988f03640a..97c5407f6603 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 6fb0a78b1b00..00b600eb058c 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.45.2.505.gda0bf45e8d-goog From nobody Thu Feb 12 15:47:51 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 81867174EFA for ; Tue, 11 Jun 2024 08:12:14 +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=1718093536; cv=none; b=Ydo9Ygf/+0yUnsYiz3lFveMtE/xBXLTkbz1nKrBShJKOpRRRildJLHiL7r3ynHnIDi/0+AztTBadZrE2zCZm/BEDEY4PYrMiuw5iWsy6Cfm2/u0AFuG9g2LLM3PwFlKvHbHh3dtVs7MGGCDgkxeuJAi85d6A0zFCi1CpHt8YbgA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093536; c=relaxed/simple; bh=hVLGmVR1HMkUx7+t5Nvw+6vPF4SbFF3ImKNPy0MAlEU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MTvz/0RNM9bXPVZg+Aglyra0m1ilpm2UuzO+Ao6neNvpb2gLgu9/1u2UtDyouteI4L7+cd5NgU7UFY0nJu1eai30UFOteHcuoTKIEivok77BaNX7yFFPIeX1BrYY1IvTD1d3zHjPkZXiwx7Xs2AAPlVj89jsTwt181xEf173iSQ= 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=Uc5Zv05L; 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="Uc5Zv05L" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-6b06f1f9a06so12869226d6.3 for ; Tue, 11 Jun 2024 01:12:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718093533; x=1718698333; 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=1qcNpYr9SkPtRLJMkT2pD1WoLD/0+PdytNXdst5BZm8=; b=Uc5Zv05L3zx0B+t6IHfmS25NKwjWRsoWfUBKmZgHSW0INbbFCiQLjODl8S/s7aAhAo FWN5QbQzDDAZd3eut+Ei3LP47sQwcdMLIuhkK5BvAdSf+n5mjYzQ5XHdrqMvpnYRTWKr twlnQ9LiWmKCBx3g4589rrXy4rL/OxM+87O8A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718093533; x=1718698333; 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=1qcNpYr9SkPtRLJMkT2pD1WoLD/0+PdytNXdst5BZm8=; b=GwLGa5NagzSXCDhVnK/VuM/bT5pJ1l0C15WpqDebR8RdOwx1vC81WCbDiKNR3LIgpK Eipl9df9PVvruXv5ijyZmU5/VMnXRYSGgQijF+yn7uiA9+slmzUUVL/OxrSEo0se3kkn fqC44OWUMFSxOywPvaBQFxQp+Bsgz875KT5D9o9IQnYwi2h83wAfDxuVl3dZegCTkkDh nbXDXwF5xdgIoYK0LYE00QfjLUrpB3nPs+ay9OIAfJP4dPAWImY9I8IjCcYcA0ezVGGF IV2+TQ5FzRk2VRsHLiu8Xp7Ju27wITwc7C6rnjZKwP08NZHA9U1dpc7oBloBZba+Nh7j wHaw== X-Forwarded-Encrypted: i=1; AJvYcCXMHRwF/HwgbIyw4JbJS1KuoSSI8u1lh8kD/85Cj+nEdKpNOamrm7Crl8R8iH+I7b0Wd2PWY4KNiTqJq7StnKb9FuYKapYtlBXrCjew X-Gm-Message-State: AOJu0YyQV8NjAW6n5is5xV43s08GsChwwh3aiuQO6i17cGCPvdg57d3B w/CzWoUYwpFyutZy0mSnsfD2KhPnFkX42tisMUM+V0nyb0hmMsWZY+ck5AgOWA== X-Google-Smtp-Source: AGHT+IH48KT7q9z49yEVjuF/xwKgCzBz70RWMzOb4ndYUOF7z0Kudt/BHMFgmwtck1NHVeX9Opq37Q== X-Received: by 2002:a05:6214:3912:b0:6b0:7ba0:ef67 with SMTP id 6a1803df08f44-6b07ba0f05cmr47438746d6.31.1718093533266; Tue, 11 Jun 2024 01:12:13 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b09039c2b9sm1548886d6.28.2024.06.11.01.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 01:12:12 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 11 Jun 2024 08:12:08 +0000 Subject: [PATCH v5 3/4] media: uvcvideo: Avoid race condition 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: <20240611-guenter-mini-v5-3-047b6fe5d08b@chromium.org> References: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> In-Reply-To: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , 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.13.0 The control events are handled asynchronously by the driver. Once the control event are handled, the urb is re-submitted. If we simply kill the urb, there is a chance that a control event is waiting to be processed, which will re-submit the urb after the device is disconnected. uvc_status_suspend() flushes the async controls and stops the urb in a correct manner. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc= _status.c index 375a95dd3011..8fd8250110e2 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -294,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 --=20 2.45.2.505.gda0bf45e8d-goog From nobody Thu Feb 12 15:47:51 2026 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) (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 C60CC17555C for ; Tue, 11 Jun 2024 08:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093537; cv=none; b=dUsd/48QXFYxawAEUgnZsrC9KUCVxGkbHfg9gkD2qq9kXaP5nN7am0Jwo3aqwv7FfKk4nHkHhOXXHJt98QXXwBDbc9+OIgGgNKyslZY3ZTYTnXdO/5hSFOUHzB+Jo8Au2pldybXY3rP79RuTMJ0udHOd4HaNDGuGESsv2GYKPEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718093537; c=relaxed/simple; bh=lM/AUoiIFm5wy7ofM3hcaSkgrO99OY8cJt9TzA0Mu0s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f4YY9OLqK/89nppk5OY78hGQK8Oqgaf5n8s6+xiM36/QKdhb9w21fHrdNK6rOSbjjltSh3WYGXdWns94Xm7MpyxARd23c6z5S8SWc5RSBYqob/FxKF0u0yM9BkU+5qzd9b4wCMtctPflRPrhy2AZvB+WphvblpEvCsBLgwk0cec= 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=nStDVCZe; arc=none smtp.client-ip=209.85.222.178 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="nStDVCZe" Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-79776e3e351so100852685a.3 for ; Tue, 11 Jun 2024 01:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718093535; x=1718698335; 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=8IVYq4GaETsYJZvHz4dUOl+klY8inCplH9StLoFX6IE=; b=nStDVCZevNT9SyOrBoB7mnUoLKiiwGVSD2F0TwP1bKY+x2bwmBZN/GpYSeH03U0bqH dL45y9NWX4S2Fn1TUpxlwCFbvZpa+taWRc2SIaixMEOhP5OdQ8MvBN2qmAEC5LEcGL1G qky0ntj2rb3YUpHQS4/NzdBz79DmVpUNmQ1YE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718093535; x=1718698335; 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=8IVYq4GaETsYJZvHz4dUOl+klY8inCplH9StLoFX6IE=; b=fReXVuX2EifIFJNV52bhOvhHQ2juTih7oAoEuIp2QZ91jRL5oJ8cxcvJ3TfwY5UHNd yzJFCfjCzqQIBoqhXtwKwkzg6Y0Qt7lTQd0lTkw3HjScz+LHXj35d39OjFIqnNh7w4H0 GPp1gDdOzg8iYsdZly/XbYs5xoRaBcdbxRP76dqIPykwp3ROsOerthRdxxtP1cmtllCg myZ8vAoz1NvF2zOZiQ0tKatC1K15cVr+HdHmugZcDnva+JdMRz9Qdf7esDdYn+CtUcyT dHd4EfpaBZMvHaV95enTHj/ZWEp9p2KeOdwzQoctpvQZ2WJ9VflDL2hB5HpFTF3NtkBA g1dw== X-Forwarded-Encrypted: i=1; AJvYcCWQxpXqAi6z4CvYdAP5hUJiKdAiicj2NH5Zx0FQRevlek1KvP8tRd6QAWikgjnlDaMTF3cL3fgU0s1QUHbxWcPOkXZKPQVnZoOGw2xo X-Gm-Message-State: AOJu0YzH2tpD3igOn254H3hkAnH4Qmo3ZPmK6vahxlDZevk5sG4+ZtJf dmscYhDRVeMzCeeW2p0wI3pUklHVZlJz3M+kW3owuUqPKXM2Im8y1gv8LzSxtw== X-Google-Smtp-Source: AGHT+IEjrTQrxUo5zhixs+9k+Fjq2LfdHnJzlQOexh9ApNRRB0qiNKvKRrFodyQbd3JFr46awJRgPA== X-Received: by 2002:a05:6214:319b:b0:6b0:8e1d:f71b with SMTP id 6a1803df08f44-6b08e1dfafcmr6921546d6.49.1718093534519; Tue, 11 Jun 2024 01:12:14 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b09039c2b9sm1548886d6.28.2024.06.11.01.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 01:12:13 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 11 Jun 2024 08:12:09 +0000 Subject: [PATCH v5 4/4] 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: <20240611-guenter-mini-v5-4-047b6fe5d08b@chromium.org> References: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> In-Reply-To: <20240611-guenter-mini-v5-0-047b6fe5d08b@chromium.org> To: Mauro Carvalho Chehab Cc: Guenter Roeck , 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.13.0 If there is no int_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 8fd8250110e2..9108522beea6 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, g= fp_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.45.2.505.gda0bf45e8d-goog