[PATCH] Fix for USB ugen panics
jay at evilrealms.net
Wed Jan 7 18:32:14 PST 2004
> Good news: the panic is gone.
But I managed to test this with my Speedtouch USB modem, so no surprises there. ;)
> I'm _trying_ to write a small capture program for my webcam
> (Creative Videoblaster Webcam Go). I'm not very successful.
> I managed to get a stream of black(?) pixels from my webcam,
> using the so-called isochronous transfer mode. The program is
> called "camtest".
> I was doing some experiments with ugen to check out why only
> black pixels are coming from the interface and so I tried out
> a sysctl "USB_SET_CONFIG". That caused a panic instantly.
> I removed all unnecessary code around the sysctl-call to
> submit a PR and called the program "camtest-panic".
Yep, the panic was caused by ugen not expecting to be asked to USB_SET_CONFIG
a value of zero.
> - you can start "camtest" as many times as you want after
> fresh reboot and the isochronous transfer can be established
> - after starting "camtest-panic", first time there is no error
At this point, you've called USB_SET_CONFIG with a value of 0. This value is
reserved as a way to put the device into the "unconfigured" state. From here
(as I was discussing with Bernd on freebsd-hackers@), the only way to leave
the state is to either reset the USB hub or detach/reattach the device.
> - after starting "camtest-panic" only one time, you will not
> get past the sysctl-call "USB_SET_ALTINTERFACE" in "camtest",
> it stops with the message (from perror): "Invalid argument"
Correct, according to the USB spec interfaces are unavailable when the device
is in the "unconfigured" state.
> - after starting "camtest-panic" first time, you get an error
> when starting it (e.a. "camtest-panic") more times after the
> sysctl-call "USB_SET_CONFIG", it stops with the message
> (perror): "Input/output error"
The device is in configuration zero at this point. No further configuration
changes can be made now, until the device has been put back into the
As discussed in the post to freebsd-hackers@, both I and Bernd think that
USB_SET_CONFIG probably shouldn't let the user set configuration zero in case
it happens accidentally. But I haven't disallowed this in the patch until I've
got in touch with the USB stack developer, and confirmed that would be
> I hope you can see from my description that there is still
> something weird going on with ugen. I wish I could help, but
> I don't know much about USB and just started my first program.
> It just looks for me like there is something not being
> cleaned up correctly after the USB_SET_CONFIG-sysctl in
I think you're on the right lines, but all that's going wrong is setting the
device configuration to zero. You need to look up the technical specs for your
USB webcam to see which configurations are available, and what interfaces and
endpoints are available in each configuration.
If it says that configuration zero is an acceptable configuration, then I'm
Certainly my USB modem lets you set configuration 1, and operates correctly in
that configuration. As it only has one configuration, I can only presume USB
devices generally start from configuration 1 onwards.
> Thanks for the patch,
Thanks for testing it. :)
http://www.evilrealms.net/ - Systems Administrator & Developer
http://www.imperial.ac.uk/ - 3rd year CS student
More information about the freebsd-current