• Alan Stern's avatar
    USB: UDC core: Add udc_async_callbacks gadget op · 7dc0c55e
    Alan Stern authored
    The Gadget API has a theoretical race when a gadget driver is unbound.
    Although the pull-up is turned off before the driver's ->unbind
    callback runs, if the USB cable were to be unplugged at just the wrong
    moment there would be nothing to prevent the UDC driver from invoking
    the ->disconnect callback after the unbind has finished.  In theory,
    other asynchronous callbacks could also happen during the time before
    the UDC driver's udc_stop routine is called, and the gadget driver
    would not be prepared to handle any of them.
    
    We need a way to tell UDC drivers to stop issuing asynchronous (that is,
    ->suspend, ->resume, ->disconnect, ->reset, or ->setup) callbacks at
    some point after the pull-up has been turned off and before the
    ->unbind callback runs.  This patch adds a new ->udc_async_callbacks
    callback to the usb_gadget_ops structure for precisely this purpose,
    and it adds the corresponding support to the UDC core.
    
    Later patches in this series add support for udc_async_callbacks to
    several UDC drivers.
    Acked-by: default avatarFelipe Balbi <balbi@kernel.org>
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20210520202144.GC1216852@rowland.harvard.eduSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7dc0c55e
core.c 47.9 KB