[lkml]   [2007]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectUSB HCD: avoid duplicate local_irq_disable()
    usb_hcd_flush_endpoint() has a retry loop that starts with a spin_lock_irq(),
    but only gives up the spinlock, not the irq_disable before jumping to the
    rescan label.

    Split the spin_lock_irq into the retryable part and the local_irq_disable()
    that is only done once as a micro-optimization and slight cleanup.

    Signed-off-by: Arnd Bergmann <>


    On Tuesday 23 October 2007, I wrote:
    > I tried the trivial annotation below and (with lockdep enabled) got a few
    > warnings at boot time, but only one that I could still find in the log
    > buffer:

    One more such example that was not found by lockdep. I guess this counts
    as a false positive, as it is clearly harmless, but working around
    it is a small optimization for the case where local_irq_disable()
    is a hypervisor call.

    Should we try to fix this class of (non-)problem in other places?
    Will this patch cause a different warning with lockdep since now we
    are pairing spin_lock() with spin_unlock_irq()?

    --- a/drivers/usb/core/hcd.c
    +++ b/drivers/usb/core/hcd.c
    @@ -1312,8 +1312,9 @@ void usb_hcd_flush_endpoint(struct usb_device *udev,
    hcd = bus_to_hcd(udev->bus);

    /* No more submits can occur */
    + local_irq_disable();
    - spin_lock_irq(&hcd_urb_list_lock);
    + spin_lock(&hcd_urb_list_lock);
    list_for_each_entry (urb, &ep->urb_list, urb_list) {
    int is_in;

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at
     \ /
      Last update: 2007-10-23 03:31    [W:0.022 / U:18.732 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site