ChangeSet 1.2020.1.21, 2005/03/07 22:33:54-08:00, [EMAIL PROTECTED]

[PATCH] usb/auerswald: use wait_event_timeout()

Use wait_event_timeout() instead of custom wait-queue code. There
might be a problem with returning without adding/removing to the waitqueue
before wait_event_timeout() is called. I am not sure if this is a problem or
not.

Signed-off-by: Nishanth Aravamudan <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>


 drivers/usb/misc/auerswald.c |   19 +++----------------
 1 files changed, 3 insertions(+), 16 deletions(-)


diff -Nru a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
--- a/drivers/usb/misc/auerswald.c      2005-03-08 16:54:35 -08:00
+++ b/drivers/usb/misc/auerswald.c      2005-03-08 16:54:35 -08:00
@@ -29,6 +29,7 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/init.h>
+#include <linux/wait.h>
 #undef DEBUG                   /* include debug macros until it's done */
 #include <linux/usb.h>
 
@@ -605,7 +606,6 @@
 /* Starts chained urb and waits for completion or timeout */
 static int auerchain_start_wait_urb (pauerchain_t acp, struct urb *urb, int 
timeout, int* actual_length)
 {
-       DECLARE_WAITQUEUE (wait, current);
        auerchain_chs_t chs;
        int status;
 
@@ -613,26 +613,13 @@
        init_waitqueue_head (&chs.wqh);
        chs.done = 0;
 
-       set_current_state (TASK_UNINTERRUPTIBLE);
-       add_wait_queue (&chs.wqh, &wait);
        urb->context = &chs;
        status = auerchain_submit_urb (acp, urb);
-       if (status) {
+       if (status)
                /* something went wrong */
-               set_current_state (TASK_RUNNING);
-               remove_wait_queue (&chs.wqh, &wait);
                return status;
-       }
-
-       while (timeout && !chs.done)
-       {
-               timeout = schedule_timeout (timeout);
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               rmb();
-       }
 
-       set_current_state (TASK_RUNNING);
-       remove_wait_queue (&chs.wqh, &wait);
+       timeout = wait_event_timeout(chs.wqh, chs.done, timeout);
 
        if (!timeout && !chs.done) {
                if (urb->status != -EINPROGRESS) {      /* No callback?!! */



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&op=click
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to