usb/auerswald: use wait_event_timeout()
Subsystems (2)
PATCH 34/39 usb/auerswald: use wait_event_timeout()
Hi,
Please consider applying.
Description: 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]>
drivers/usb/misc/auerswald.c +3 -16
@@ -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 @@ static void auerchain_blocking_completio/* 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 @@ static int auerchain_start_wait_urb (pauinit_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?!! */
_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors