Hello Johannes, (all)
I hope I've written this mail to the right person(s) pointed from MAINTAINERS list.
Sorry if not or if this problem is already known ...
Summary:
Poll on /proc/bus/usb/devices is released before the device is logically connected to
the hub.
Keywords:
usb hub poll select /proc/bus/usb/devices
Kernel version:
2.4.22
Description:
There is a problem in hub.c code change from kernel 2.4.20 to 2.4.22. (I didn't check
2.4.21)
lines above 763 of hub.c
/* Run it through the hoops (find a driver, etc) */
if (!usb_new_device(dev)) {
hub->children[port] = dev;
goto done;
}
The routine usb_new_device will release condition variable for polling on file
/proc/bus/usb/devices.
The problem is that at this point hub->children[] is not set => usb_device_dump()
routine will not print new device connected to the hub.
If the process waiting on select() will be waked up, following read() returns
unchanged file /proc/bus/usb/devices, because read() calls usb_device_dump().
This process will just detect change on usb bus but will not find a new device.
2.4.20:
The behavior of 2.4.20 is ok because of the line 719 of hub.c:
hub->children[port] = dev;
So the hub tree contains the information about new device and this info will be dumped.
I didn't check all of the code in 2.4.22 to understand why this line was moved after
the routine usb_new_device(). Please check it if this is really a bug or not.
Thanks
Marek
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel