• Michael Chan's avatar
    [TG3]: Fix tg3_restart_ints() · 04237ddd
    Michael Chan authored
    tg3_restart_ints() is called to re-enable interrupts after tg3_poll()
    has finished all the work. It calls tg3_cond_int() to force an interrupt
    if the status block updated bit is set. The updated bit will be set if
    there is a new status block update sometime during tg3_poll() and it can
    be very often. The worst part is that even if all the work has been
    processed, the updated bit remains set and an interrupt will be forced
    unnecessarily.
    
    The fix is to call tg3_has_work() instead to determine if new work is
    posted before forcing an interrupt. The way to force an interrupt is
    also changed to use "coalesce_now" instead of "SETINT". The former is
    generally a safer way to force the interrupt.
    
    Also deleted the first parameter to tg3_has_work() which is unused.
    Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    04237ddd
tg3.c 271 KB