usb: gadget: udc: core: Offload usb_udc_vbus_handler processing
commit 50966da8 upstream. usb_udc_vbus_handler() can be invoked from interrupt context by irq handlers of the gadget drivers, however, usb_udc_connect_control() has to run in non-atomic context due to the following: a. Some of the gadget driver implementations expect the ->pullup callback to be invoked in non-atomic context. b. usb_gadget_disconnect() acquires udc_lock which is a mutex. Hence offload invocation of usb_udc_connect_control() to workqueue. UDC should not be pulled up unless gadget driver is bound. The new flag "allow_connect" is now set by gadget_bind_driver() and cleared by gadget_unbind_driver(). This prevents work item to pull up the gadget even if queued when the gadget driver is already unbound. Cc: stable@vger.kernel.org Fixes: 1016fc0c ("USB: gadget: Fix obscure lockdep violation for udc_mutex") Signed-off-by:Badhri Jagan Sridharan <badhri@google.com> Reviewed-by:
Alan Stern <stern@rowland.harvard.edu> Message-ID: <20230609010227.978661-1-badhri@google.com> Signed-off-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Loading
Please register or sign in to comment