| From ff3495052af48f7a2bf7961b131dc9e161dae19c Mon Sep 17 00:00:00 2001 | 
 | From: Richard Röjfors <richard.rojfors@endian.se> | 
 | Date: Sat, 15 Nov 2008 19:53:24 -0800 | 
 | Subject: USB: gadget rndis: send notifications | 
 |  | 
 | From: Richard Röjfors <richard.rojfors@endian.se> | 
 |  | 
 | commit ff3495052af48f7a2bf7961b131dc9e161dae19c upstream. | 
 |  | 
 | It turns out that atomic_inc_return() returns the *new* value | 
 | not the original one, so the logic in rndis_response_available() | 
 | kept the first RNDIS response notification from getting out. | 
 | This prevented interoperation with MS-Windows (but not Linux). | 
 |  | 
 | Fix this to make RNDIS behave again. | 
 |  | 
 | Signed-off-by: Richard Röjfors <richard.rojfors@endian.se> | 
 | Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> | 
 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | 
 |  | 
 | --- | 
 |  drivers/usb/gadget/f_rndis.c |    2 +- | 
 |  1 file changed, 1 insertion(+), 1 deletion(-) | 
 |  | 
 | --- a/drivers/usb/gadget/f_rndis.c | 
 | +++ b/drivers/usb/gadget/f_rndis.c | 
 | @@ -303,7 +303,7 @@ static void rndis_response_available(voi | 
 |  	__le32				*data = req->buf; | 
 |  	int				status; | 
 |   | 
 | -	if (atomic_inc_return(&rndis->notify_count)) | 
 | +	if (atomic_inc_return(&rndis->notify_count) != 1) | 
 |  		return; | 
 |   | 
 |  	/* Send RNDIS RESPONSE_AVAILABLE notification; a |