• Vincent Palatin's avatar
    usb: dwc2: avoid leaking DMA channels on disconnection · 7252f1bf
    Vincent Palatin authored
    When the HCD is disconnected, the DMA transfers still in-flight were cleaned-up
    but the count of available DMA channels (e.g. available_host_channels) was not
    reset.
    The pool of DMA channels can be depleted when doing unclean
    disconnection of USB peripherals, and reaches the point where no
    transfer was possible until the next reboot/reload of the driver.
    
    Tested by putting a programmable USB mux on the port and randomly
    plugging/unpluging a USB HUB with USB mass-storage key, USB-audio and
    USB-ethernet dongle connected to its downstream ports, and also doing the
    disconnection early while the devices are still enumerating to get more URBs
    in-flight.
    After the patch, the devices are still enumerating after thousands of cycles,
    while the port was totally dead before.
    Signed-off-by: default avatarVincent Palatin <vpalatin@chromium.org>
    Acked-by: default avatarJohn Youn <johnyoun@synopsys.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    7252f1bf
hcd.c 84 KB