ChangeSet 1.883.3.12, 2002/12/17 21:51:12-08:00, [EMAIL PROTECTED]
[PATCH] USB: speedtouch: eliminate sleep_on
diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
--- a/drivers/usb/misc/speedtouch.c Wed Dec 18 00:34:31 2002
+++ b/drivers/usb/misc/speedtouch.c Wed Dec 18 00:34:31 2002
@@ -432,17 +432,32 @@
strcpy (current->comm, "kSpeedSARd");
add_wait_queue (&udsl_wqh, &wait);
+ set_current_state(TASK_INTERRUPTIBLE);
for (;;) {
- interruptible_sleep_on (&udsl_wqh);
+ schedule();
if (signal_pending (current))
break;
PDEBUG ("SpeedSARd awoke\n");
+retry:
for (i = 0; i < MAX_UDSL; i++)
if (minor_data[i])
udsl_atm_processqueue (minor_data[i]);
+ set_current_state(TASK_INTERRUPTIBLE);
+ /* we must check for data recieved and restart processing if there's
+any */
+ for (i = 0; i < MAX_UDSL; i++) {
+ spin_lock_irq(&minor_data[i]->recvqlock);
+ if (!skb_queue_empty(&minor_data[i]->recvqueue)) {
+ spin_unlock_irq(&minor_data[i]->recvqlock);
+ set_current_state(TASK_RUNNING);
+ goto retry;
+ } else {
+ spin_unlock_irq(&minor_data[i]->recvqlock);
+ }
+ }
};
+ set_current_state(TASK_RUNNING);
remove_wait_queue (&udsl_wqh, &wait);
PDEBUG ("SpeedSARd is exiting\n");
complete_and_exit(&thread_grave, 0);
-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel