On Sat, Jun 07, Wout Mertens wrote:

> Hi Olaf,
> 
> Is the waiting absolutely necessary?
> 
> Could it be shorter? Or could you make it only do that during coldplug
> phase?
> 
> The reason I'm asking is because I use my USB memory key to log in, and
> that needs to wait 3 seconds (I patch it out of course) for no reason
> whatsoever.

You mean you need the sleep 3 or you do not need the sleep 3?
And with the current way, a 3 seonds delay will happen anyway, with the
patch it will only wait 1 second for the first event.

If you are worried about usb.rc, there will be no delay if the events
are already finished. I'm not sure if we should wait for all background
events before proceeding. A little testing shows that it could take up
to 30 seconds, depending on the amound and kind of connected USB
devices. Really slow hid devices are a pain...

We could improve things alot if /proc/bus/usb/devices had a better
design :(
It is updated dynamically, reading it can take an unknown amount of time
and it triggers bus traffic. You can not do 
grep -Eq '^I: .* Driver=\(none\)$' /proc/bus/usb/devices
Alot bus traffic could be avoided if the content would be static, no
poking with usbmodules needed if there is no device without a driver ->
no delay needed at all in such a case. There are probably ways in 2.5 to
check for devices without drivers in /sys, but I have not verified it.

-rw-r--r--    1 root     root          225 2003-06-08 07:26:57.000000000 +0200 /tmp/a
-rw-r--r--    1 root     root         3022 2003-06-08 07:27:01.000000000 +0200 /tmp/b
-rw-r--r--    1 root     root          980 2003-06-08 07:27:26.000000000 +0200 /tmp/c

This was my test patch:

     # there could be still some active hotplug events
     # wait for them because other rc scripts may need the drivers
+    echo /var/run/usb/*.queue.* > /tmp/a
     sleep 3 & DELAY_PID=$!
     until [ "`ls /var/run/usb/*.queue.* 2>/dev/null`" = "" ] ; do
        test -d /proc/$DELAY_PID || break
     done
+    echo /var/run/usb/*.queue.* > /tmp/b
+    ps axf >> /tmp/b
+    until [ "`ls /var/run/usb/*.queue.* 2>/dev/null`" = "" ] ; do
+       sleep 1
+    done
+    echo /var/run/usb/*.queue.* > /tmp/c
+    ps axf >> /tmp/c


> > +    # there could be still some active hotplug events
> > +    # wait for them because other rc scripts may need the drivers
> > +    sleep 3 & DELAY_PID=$!
> > +    until [ "`ls /var/run/usb/*.queue.* 2>/dev/null`" = "" ] ; do
> > +           test -d /proc/$DELAY_PID || break
> > +    done

-- 
USB is for mice, FireWire is for men!


-------------------------------------------------------
This SF.net email is sponsored by:  Etnus, makers of TotalView, The best
thread debugger on the planet. Designed with thread debugging features
you've never dreamed of, try TotalView 6 free at www.etnus.com.
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to