* [PATCH] USB hotplug race
@ 2004-03-17 14:27 Petr Baudis
2004-03-26 23:05 ` Greg KH
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Petr Baudis @ 2004-03-17 14:27 UTC (permalink / raw)
To: linux-hotplug
Hello,
so I finally upgraded from 2.4 to 2.6 (2.6.4), and one of the few
problems I've hit is hotplug. Basically, when I start up hotplug while
my Zaurus is plugged, everything works fine and usbnet gets loaded,
however when I plug Zaurus after hotplug was loaded, it trashes the
event.
After populating the hotplug scripts with plethora of debug prints,
I've tracked it down to usb_convert_vars() - basically, immediatelly
after the USB device is plugged and the signal is already delivered to
hotplug, the sysfs tree isn't yet populated by all the relevant data
and only detach_state is present there - no bDeviceClass or so.
Looking at drivers/usb/core/message.c:usb_set_configuration(),
device_add() is called first (which I suppose calls /sbin/hotplug
through platform_notify ?), and _then_ this set of files is created. It
doesn't look like there would be a lot of time to trigger the race, but
I personally get a _very_ high reproducibility rate (actually I'm not
sure if I ever managed not to trigger it).
I don't know how to fix it in the kernel since we would probably need to
first add kobject, then pop out and create the sysfs nodes, and _then_ call the
userspace helper. So I just created a trivial bandaid for
/etc/hotplug/usb.agent, which fixes this for me:
--- hotplug-2004_03_11/etc/hotplug/usb.agent Fri Mar 12 00:18:23 2004
+++ hotplug-2004_03_11+pasky/etc/hotplug/usb.agent Wed Mar 17 00:17:47 2004
@@ -354,9 +354,14 @@
# they happen to issue requests at the same time ... it happens easily
# with slow HID devices and "usbmodules".
# starting with 2.5 (DEVPATH set), all hcds must queue control traffic.
+
+ # However by the time of 2.6.4, the kernel has an easy-to-trigger (at
+ # least for me) race condition when /sbin/hotplug already got called but
+ # the sysfs device directory is not yet populated with all the neccessary
+ # files. --pasky
- if [ "$DEVPATH" = "" ]; then
+ # if [ "$DEVPATH" = "" ]; then
sleep 3
- fi
+ # fi
usb_convert_vars
Please consider applying.
PS: By the way, usb.agent.(orig|rej) slipped into the 2004_03_11
distribution.
Kind regards,
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all
progress depends on the unreasonable man. -- George Bernard Shaw
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id\x1470&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] USB hotplug race
2004-03-17 14:27 [PATCH] USB hotplug race Petr Baudis
@ 2004-03-26 23:05 ` Greg KH
2004-03-27 0:05 ` Oliver Neukum
2004-03-27 0:12 ` Greg KH
2 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2004-03-26 23:05 UTC (permalink / raw)
To: linux-hotplug
On Wed, Mar 17, 2004 at 03:27:17PM +0100, Petr Baudis wrote:
> Hello,
>
> so I finally upgraded from 2.4 to 2.6 (2.6.4), and one of the few
> problems I've hit is hotplug. Basically, when I start up hotplug while
> my Zaurus is plugged, everything works fine and usbnet gets loaded,
> however when I plug Zaurus after hotplug was loaded, it trashes the
> event.
>
> After populating the hotplug scripts with plethora of debug prints,
> I've tracked it down to usb_convert_vars() - basically, immediatelly
> after the USB device is plugged and the signal is already delivered to
> hotplug, the sysfs tree isn't yet populated by all the relevant data
> and only detach_state is present there - no bDeviceClass or so.
Yes, it's quite easy to race the kernel with this. But how about
putting the proper patch in by sitting and spinning until we see the
file we are looking for (or erroring out after a time period.)
That's much cleaner than always sleeping. On a SMP box, you usually
never need to sleep :)
thanks,
greg k-h
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id\x1470&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] USB hotplug race
2004-03-17 14:27 [PATCH] USB hotplug race Petr Baudis
2004-03-26 23:05 ` Greg KH
@ 2004-03-27 0:05 ` Oliver Neukum
2004-03-27 0:12 ` Greg KH
2 siblings, 0 replies; 4+ messages in thread
From: Oliver Neukum @ 2004-03-27 0:05 UTC (permalink / raw)
To: linux-hotplug
> > After populating the hotplug scripts with plethora of debug prints,
> > I've tracked it down to usb_convert_vars() - basically, immediatelly
> > after the USB device is plugged and the signal is already delivered to
> > hotplug, the sysfs tree isn't yet populated by all the relevant data
> > and only detach_state is present there - no bDeviceClass or so.
>
> Yes, it's quite easy to race the kernel with this. But how about
> putting the proper patch in by sitting and spinning until we see the
> file we are looking for (or erroring out after a time period.)
>
> That's much cleaner than always sleeping. On a SMP box, you usually
> never need to sleep :)
It seems to me the proper patch would be for the kernel to wait for
the creation of any files it refers to when generating a hotplug invocation.
Regards
Oliver
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id\x1470&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] USB hotplug race
2004-03-17 14:27 [PATCH] USB hotplug race Petr Baudis
2004-03-26 23:05 ` Greg KH
2004-03-27 0:05 ` Oliver Neukum
@ 2004-03-27 0:12 ` Greg KH
2 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2004-03-27 0:12 UTC (permalink / raw)
To: linux-hotplug
On Sat, Mar 27, 2004 at 01:05:52AM +0100, Oliver Neukum wrote:
>
> > > After populating the hotplug scripts with plethora of debug prints,
> > > I've tracked it down to usb_convert_vars() - basically, immediatelly
> > > after the USB device is plugged and the signal is already delivered to
> > > hotplug, the sysfs tree isn't yet populated by all the relevant data
> > > and only detach_state is present there - no bDeviceClass or so.
> >
> > Yes, it's quite easy to race the kernel with this. But how about
> > putting the proper patch in by sitting and spinning until we see the
> > file we are looking for (or erroring out after a time period.)
> >
> > That's much cleaner than always sleeping. On a SMP box, you usually
> > never need to sleep :)
>
> It seems to me the proper patch would be for the kernel to wait for
> the creation of any files it refers to when generating a hotplug invocation.
Heh, yeah, that would be "nice" to have, but unfortunatly due to the way
the stupid stupid stupid programmer [1] who wrote that code, it's quite
difficult (if not impossible) to do...
It's a 2.7 thing...
thanks,
greg k-h
[1] yeah, it was me, go ahead, blame me, who knew hotplug would be so
fast...
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id\x1470&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-03-27 0:12 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-17 14:27 [PATCH] USB hotplug race Petr Baudis
2004-03-26 23:05 ` Greg KH
2004-03-27 0:05 ` Oliver Neukum
2004-03-27 0:12 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).