Hi, you must use set_current_state() only after usb_submit_urb() with GFP_KERNEL as second argument, because it may sleep to allocate memory and is woken up resetting the state to TASK_RUNNING. In that case you had a busy polling loop. Furthermore, always use wake_up unconditionally. It checkes anyway.
Regards Oliver You can import this changeset into BK by piping this whole message to: '| bk receive [path to repository]' or apply the patch as usual. =================================================================== [EMAIL PROTECTED], 2004-03-18 16:29:27+01:00, [EMAIL PROTECTED] - small clean up - fix race due to memory allocations affecting current_status ati_remote.c | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) diff -Nru a/drivers/usb/input/ati_remote.c b/drivers/usb/input/ati_remote.c --- a/drivers/usb/input/ati_remote.c Thu Mar 18 16:40:52 2004 +++ b/drivers/usb/input/ati_remote.c Thu Mar 18 16:40:52 2004 @@ -354,8 +354,7 @@ ati_remote->send_flags |= SEND_FLAG_COMPLETE; wmb(); - if (waitqueue_active(&ati_remote->wait)) - wake_up(&ati_remote->wait); + wake_up(&ati_remote->wait); } /* @@ -377,17 +376,17 @@ ati_remote->out_urb->dev = ati_remote->udev; ati_remote->send_flags = SEND_FLAG_IN_PROGRESS; - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&ati_remote->wait, &wait); + retval = usb_submit_urb(ati_remote->out_urb, GFP_KERNEL); if (retval) { - set_current_state(TASK_RUNNING); - remove_wait_queue(&ati_remote->wait, &wait); dev_dbg(&ati_remote->interface->dev, "sendpacket: usb_submit_urb failed: %d\n", retval); return retval; } + + set_current_state(TASK_INTERRUPTIBLE); + add_wait_queue(&ati_remote->wait, &wait); while (timeout && (ati_remote->out_urb->status == -EINPROGRESS) && !(ati_remote->send_flags & SEND_FLAG_COMPLETE)) { @@ -575,7 +574,7 @@ __FUNCTION__, urb->status); } - retval = usb_submit_urb(urb, SLAB_ATOMIC); + retval = usb_submit_urb(urb, GFP_ATOMIC); if (retval) dev_err(&ati_remote->interface->dev, "%s: usb_submit_urb()=%d\n", __FUNCTION__, retval); =================================================================== This BitKeeper patch contains the following changesets: 1.1181 ## Wrapped with gzip_uu ## begin 664 bkpatch5105 M'XL(``3#64```[64:T_;,!2&/\>_XDA("`1-[-S;J:CE,E;!1E7*IVV*W,1M MHS9QYPL,*3]^3C)@8QN#:>2BQ/'Q:Y_W//$67$DF>A9?Y]=,H"UXQZ7J6>:] MT!DK[9+IE2YL+A:F;\*YZ7.6O&!..\"9"L:DL\Y++3NN'2`3-:8J78+IE#V+ MV-[]%W6[83UK<G)Z=3Z<(-3OP]&[EMAIL PROTECTED]<4W7F1Q0M5SSTE:"EK)@ MBMHI+ZK[T,K%V#5G0"(/!V%%0NQ'54HR0JA/6(9=/PY]U"YO\)L\?I;RL4=B M''H^\:[EMAIL PROTECTED],,('0.Q"8D)8-_!GD-B(&'/[?;<:`^3'L;P9VG8(]#!Z!#^;RY' M*(4.R(*NUY"N&2U!;YI/\_PK")HRR#0S<T+!"BYNP<3QE*J<EQ+H?,Y2E9<+ M2+40K%2)5%1IB<[EMAIL PROTECTED]@8HO%#%5#GA0="F&)T`&K)Y_."E@,J2BZ,(>KC0K#% MYRH3M572T7+FY.5&*\<L*Q%FF8K9:>N_ZT;&`=<-*H*]**BZOI]U9XQV_;D? M4?:$W<[EMAIL PROTECTED]<>6&.'(;[IX>U\#XBAFA6FFP$IPN:QQ>(.QASP@;5BLO MPH'?H!H\YI3$S^`TA$[T2IQF'&[HBB5ZL[,+NDQYF>4UBX;*VQ9D\[^W$!HZ [EMAIL PROTECTED]&N8+4L-X2_'U$(U!WGKX=)Y"74C&:`9_#Y?GP M,#%0MT6^@(ZX:[EMAIL PROTECTED]'[(^](`(7C;S`N(ZLNWRW'V0[!S<T5[MO3&B, MFU"SHQ#TJ6X'3;N+P4,6LHP=R8__)MN9#B_/DM&'Z<ED<C6>[EMAIL PROTECTED]/3XR.1;,L MJ363+YII]NM<^[!]-V40U<L:M0]+,&6*#/U'/N^8>[_Q<3B]>#\Z,@/OM^IT 6R=*5U$4_GL=9ZG=C]`WZRA+F*`8````` ` end ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel