• Arnd Bergmann's avatar
    xhci: free the correct ring · f76a28a6
    Arnd Bergmann authored
    gcc warns about what first looks like a reference to an uninitialized
    variable:
    
    drivers/usb/host/xhci-ring.c: In function 'handle_cmd_completion':
    drivers/usb/host/xhci-ring.c:753:4: error: 'ep_ring' may be used uninitialized in this function [-Werror=maybe-uninitialized]
        xhci_unmap_td_bounce_buffer(xhci, ep_ring, cur_td);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/usb/host/xhci-ring.c:647:20: note: 'ep_ring' was declared here
      struct xhci_ring *ep_ring;
                        ^~~~~~~
    
    It's clear to see that the list_empty() check means it can never be
    uninitialized, however it still looks wrong:
    
    When ep->cancelled_td_list contains more than one entry, the
    ep_ring variable will point to the ring that was retrieved
    from the last urb, and we have to look it up again in the
    second loop instead, which fixes the behavior and gets rid of the
    warning too.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Fixes: f9c589e1 ("xhci: TD-fragment, align the unsplittable case with a bounce buffer")
    Acked-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f76a28a6
xhci-ring.c 125 KB