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

Reply via email to