On Tue, 11 May 2004, Oliver Neukum wrote:

> Hi Greg, hi list,
> 
> quoting Linus:
> 
> --
> > so there is no need to recheck the bit in do/while loop, because
> > there is no false wakeups now.
> 
> You should never assume this. You should assume that there are _always_
> false wakeups.
> 
> Why? Because Linux has always allowed people to leave wait-queues active,
> without being "atomic". For example, the tty read/write layer used to
> (still does?)  add itself on the wait-queue _once_, and then leave itself
> on the wait-queue while in a loop it does copies from/to user space.
> --
> 
> Unfortunately, this means us. Here's the first fix. Comments?

There are plenty of other places in the USB code that could use this sort
of cleanup.  How about defining and exporting a utility routine in usb.c
for this purpose?  Something like

        usb_sleep_ms(unsigned int ms, int sleep_state);
                where sleep_state could be TASK_INTERRUPTIBLE or
                TASK_UNINTERRUPTIBLE

        or

        usb_sleep_ms_interruptible(unsigned int ms);
        usb_sleep_ms_uninterruptible(unsigned int ms);

which would handle the conversion to jiffies, setting the task state, and 
the repeated calls to schedule_timeout().

Alan Stern





-------------------------------------------------------
This SF.Net email is sponsored by Sleepycat Software
Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to 
deliver higher performing products faster, at low TCO.
http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to