Re: [PATCH] usb: dwc3: gadget: Avoid starting DWC3 gadget during UDC unbind

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Wesley Cheng <wcheng@xxxxxxxxxxxxxx> writes:

> There is a race present where the DWC3 runtime resume runs in parallel
> to the UDC unbind sequence.  This will eventually lead to a possible
> scenario where we are enabling the run/stop bit, without a valid
> composition defined.
>
> Thread#1 (handling UDC unbind):
> usb_gadget_remove_driver()
> -->usb_gadget_disconnect()
>   -->dwc3_gadget_pullup(0)
> --> continue UDC unbind sequence
> -->Thread#2 is running in parallel here
>
> Thread#2 (handing next cable connect)
> __dwc3_set_mode()
>   -->pm_runtime_get_sync()
>     -->dwc3_gadget_resume()
>       -->dwc->gadget_driver is NOT NULL yet
>       -->dwc3_gadget_run_stop(1)
>       --> _dwc3gadget_start()
> ...
>
> Fix this by tracking the pullup disable routine, and avoiding resuming
> of the DWC3 gadget.  Once the UDC is re-binded, that will trigger the
> pullup enable routine, which would handle enabling the DWC3 gadget.
>
> Signed-off-by: Wesley Cheng <wcheng@xxxxxxxxxxxxxx>

This looks okay to me, but needs to be tested by a few folks ;-)

Acked-by: Felipe Balbi <balbi@xxxxxxxxxx>

-- 
balbi



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux