Jia-Ju Bai <baijiaju1990@xxxxxxxxx> writes: > The driver may sleep with holding a spinlock. > The function call paths (from bottom to top) in Linux-4.16.7 are: > > [FUNC] msleep > drivers/usb/gadget/udc/r8a66597-udc.c, 839: > msleep in init_controller > drivers/usb/gadget/udc/r8a66597-udc.c, 96: > init_controller in r8a66597_usb_disconnect > drivers/usb/gadget/udc/r8a66597-udc.c, 93: > spin_lock in r8a66597_usb_disconnect That should not happen... If think the issue you have is that your usb_connect() and usb_disconnect() are called from interrupt context. I think the proper fix, as what is done in most udc phys, is to schedule a workqueue, see drivers/usb/phy/phy-gpio-vbus-usb.c, gpio_vbus_data.vbus. Cheers. -- Robert -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html