• A
    xhci: free the correct ring · f76a28a6
    Arnd Bergmann 提交于
    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: NArnd Bergmann <arnd@arndb.de>
    Fixes: f9c589e1 ("xhci: TD-fragment, align the unsplittable case with a bounce buffer")
    Acked-by: NMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f76a28a6
xhci-ring.c 124.9 KB