mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 23:21:46 +00:00
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>
This commit is contained in:
parent
166cb70e97
commit
8815bb09af
3 changed files with 79 additions and 6 deletions
|
@ -1369,6 +1369,7 @@ extern int usb_unlink_urb(struct urb *urb);
|
|||
extern void usb_kill_urb(struct urb *urb);
|
||||
extern void usb_poison_urb(struct urb *urb);
|
||||
extern void usb_unpoison_urb(struct urb *urb);
|
||||
extern void usb_block_urb(struct urb *urb);
|
||||
extern void usb_kill_anchored_urbs(struct usb_anchor *anchor);
|
||||
extern void usb_poison_anchored_urbs(struct usb_anchor *anchor);
|
||||
extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
|
||||
|
@ -1381,6 +1382,8 @@ extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor);
|
|||
extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor);
|
||||
extern int usb_anchor_empty(struct usb_anchor *anchor);
|
||||
|
||||
#define usb_unblock_urb usb_unpoison_urb
|
||||
|
||||
/**
|
||||
* usb_urb_dir_in - check if an URB describes an IN transfer
|
||||
* @urb: URB to be checked
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue