From: Henry Lin <henryl@nvidia.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
"Mauro Carvalho Chehab" <mchehab@kernel.org>
Cc: <linux-media@vger.kernel.org>, <linux-usb@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, Henry Lin <henryl@nvidia.com>
Subject: [RFC PATCH 0/1] media: uvcvideo: reset interface on bulk stream stop
Date: Mon, 25 May 2026 18:20:27 +0000 [thread overview]
Message-ID: <20260525182028.2148267-1-henryl@nvidia.com> (raw)
Hi,
I would like to revive an old UVC bulk-streaming issue originally reported
by Hans Yang. I am sending this RFC on his behalf for discussion before
submitting a non-RFC patch.
Hans previously proposed making uvcvideo call usb_set_interface(..., 0)
when stopping a bulk-based stream, before clearing halt on the bulk endpoint.
The issue was discussed here:
https://www.spinics.net/lists/linux-usb/msg171584.html
The current upstream stop path calls usb_set_interface(..., 0) only when the
streaming interface has more than one alternate setting. For single-altsetting
bulk devices, uvcvideo only sends CLEAR_FEATURE(ENDPOINT_HALT) to the bulk
endpoint.
The patch in this RFC changes uvc_video_stop_streaming() to always call
usb_set_interface(..., 0) to reset the streaming interface first. For
bulk devices, the existing CLEAR_FEATURE(ENDPOINT_HALT) request is still
sent afterwards.
On the affected devices, current upstream stop/start sequence can leave
the next bulk stream failing immediately with transfer errors such as:
uvcvideo: Non-zero status (-71) in video completion handler.
USB bus traces show that, without usb_set_interface(..., 0), the host
continues the next bulk stream with the previous stream's sequence state,
while the device expects the new stream to start from the initial sequence
state. With usb_set_interface(..., 0), the host and device sequence states
match again and repeated stop/start cycles complete successfully.
The affected devices we have seen include:
- ID 8086:0b07 Intel Corp. RealSense D435
- ID 2560:c1d0 e-con Systems See3CAM_CU130
- ID 2b03:f582 STEREOLABS ZED camera
I understand that the earlier discussion raised two important concerns:
1. Whether this should be fixed in uvcvideo or lower in the USB/xHCI stack,
since CLEAR_FEATURE(ENDPOINT_HALT) should normally reset the endpoint
halt condition and data toggle/sequence state.
2. Whether calling usb_set_interface(..., 0) for single-altsetting bulk UVC
devices could regress existing devices.
For the first point, my understanding is that the kernel helper
usb_set_interface(..., 0) issues SET_INTERFACE and lets the USB core
reinitialize the endpoints for the selected alternate setting, including their
data toggle/sequence state. The traces suggest that, in this stop/start path,
CLEAR_FEATURE(ENDPOINT_HALT) alone is not enough to make the host and device
restart the next bulk stream from the same sequence state. The additional
usb_set_interface(..., 0) call makes repeated stop/start cycles reliable on
the affected hardware.
For the second point, I can provide before/after test results from the
affected hardware listed above. I can also test a quirk-based version if that
would be preferred over changing the generic bulk-stream stop path.
I would appreciate guidance on whether this one-patch RFC is the preferred
direction, or whether upstream would prefer a UVC quirk-based change for the
affected devices listed above.
Thanks,
Henry
next reply other threads:[~2026-05-25 18:21 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-25 18:20 Henry Lin [this message]
2026-05-25 18:20 ` [RFC PATCH 1/1] " Henry Lin
2026-05-25 19:40 ` [RFC PATCH 0/1] " Alan Stern
2026-05-26 9:57 ` Henry Lin
2026-05-25 23:55 ` Michal Pecio
2026-05-26 9:55 ` Henry Lin
2026-05-26 10:16 ` Michal Pecio
2026-05-28 8:36 ` Henry Lin
2026-05-28 16:45 ` Michal Pecio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260525182028.2148267-1-henryl@nvidia.com \
--to=henryl@nvidia.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mchehab@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome