Based on the documentation of usb_enable_autosuspend(), the caller must hold udev's device lock.
Signed-off-by: Salah Triki salah.triki@gmail.com --- sound/usb/card.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/sound/usb/card.c b/sound/usb/card.c index 2f6a62416c05..9290ba0acd5f 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -907,8 +907,13 @@ static void usb_audio_disconnect(struct usb_interface *intf) } }
- if (chip->quirk_type & QUIRK_SETUP_DISABLE_AUTOSUSPEND) - usb_enable_autosuspend(interface_to_usbdev(intf)); + if (chip->quirk_type & QUIRK_SETUP_DISABLE_AUTOSUSPEND) { + struct usb_device *udev = interface_to_usbdev(intf); + + usb_lock_device(udev); + usb_enable_autosuspend(udev); + usb_unlock_device(udev); + }
chip->num_interfaces--; if (chip->num_interfaces <= 0) {