• Mathias Nyman's avatar
    USB: xhci: Reset a halted endpoint immediately when we encounter a stall. · 8e71a322
    Mathias Nyman authored
    If a device is halted and reuturns a STALL, then the halted endpoint
    needs to be cleared both on the host and device side. The host
    side halt is cleared by issueing a xhci reset endpoint command. The device side
    is cleared with a ClearFeature(ENDPOINT_HALT) request, which should
    be issued by the device driver if a URB reruen -EPIPE.
    
    Previously we cleared the host side halt after the device side was cleared.
    To make sure the host side halt is cleared in time we want to issue the
    reset endpoint command immedialtely when a STALL status is encountered.
    
    Otherwise we end up not following the specs and not returning -EPIPE
    several times in a row when trying to transfer data to a halted endpoint.
    
    Fixes: bcef3fd5 (USB: xhci: Handle errors that cause endpoint halts.)
    Cc: <stable@vger.kernel.org> # v2.6.33+
    Tested-by: default avatarFelipe Balbi <balbi@ti.com>
    Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8e71a322
xhci-ring.c 121 KB