• Ming Lei's avatar
    USB: URB documentation: claim complete() will be run with IRQs enabled · 85721d45
    Ming Lei authored
    There is no good reason to run complete() in hard interrupt
    disabled context.
    
    After switch to run complete() in tasklet, we will enable local IRQs
    when calling complete() since we can do it at that time.
    
    Even though we still disable IRQs now when calling complete()
    in tasklet, the URB documentation is updated to claim complete()
    will be run in tasklet context and local IRQs will be enabled, so
    that USB drivers can know the change and avoid one deadlock caused
    by: assume IRQs disabled in complete() and call spin_lock() to
    hold lock which might be acquired in interrupt context.
    
    Current spin_lock() usages in drivers' complete() will be cleaned
    up at the same time, and once the cleanup is finished, local IRQs
    will be enabled when calling complete() in tasklet.
    
    Also fix description about type of usb_complete_t, and remove the
    advice of running completion handler in tasklet for decreasing
    system latency.
    
    Cc: Oliver Neukum <oliver@neukum.org>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarMing Lei <ming.lei@canonical.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    85721d45
URB.txt 10.3 KB