usbhid: prevent deadlock during timeout
authorOliver Neukum <oliver@neukum.org>
Mon, 30 Apr 2012 07:13:46 +0000 (09:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 May 2012 17:22:13 +0000 (13:22 -0400)
commit8815bb09af21316aeb5f8948b24ac62181670db2
treea6667e719e124f06257f1b9cb11abe6bce9295b0
parent166cb70e97bd83d7ae9bbec6ae59a178fd9bb823
usbhid: prevent deadlock during timeout

On some HCDs usb_unlink_urb() can directly call the
completion handler. That limits the spinlocks that can
be taken in the handler to locks not held while calling
usb_unlink_urb()
To prevent a race with resubmission, this patch exposes
usbcore's infrastructure for blocking submission, uses it
and so drops the lock without causing a race in usbhid.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/usbhid/hid-core.c
drivers/usb/core/urb.c
include/linux/usb.h