USB: gadget: cdc-acm deadlock fix
authorDavid Brownell <dbrownell@users.sourceforge.net>
Wed, 12 Nov 2008 19:35:13 +0000 (11:35 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 20 Nov 2008 22:54:51 +0000 (14:54 -0800)
commitccc737870153d1b73c99f3bcfafc6e09ea6b718b
treef11f71b3c242e830b791175cf2cc20a9e6312cb4
parent2630765e027d3cd600839b8dd59e7d5691428aff
USB: gadget: cdc-acm deadlock fix

commit e50ae572b33646656fa7037541613834dcadedfb upstream.

This fixes a deadlock appearing with some USB peripheral drivers
when running CDC ACM gadget code.

The newish (2.6.27) CDC ACM event notification mechanism sends
messages (IN to the host) which are short enough to fit in most
FIFOs.  That means that with some peripheral controller drivers
(evidently not the ones used to verify the notification code!!)
the completion callback can be issued before queue() returns.

The deadlock would come because the completion callback and the
event-issuing code shared a spinlock.  Fix is trivial:  drop
that lock while queueing the message.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/f_acm.c