• David S. Miller's avatar
    [TG3]: Add tagged status support. · fac9b83e
    David S. Miller authored
    When supported, use the TAGGED interrupt processing support
    the chip provides.  In this mode, instead of a "on/off" binary
    semaphore, an incrementing tag scheme is used to ACK interrupts.
    
    All MSI supporting chips support TAGGED mode, so the tg3_msi()
    interrupt handler uses it unconditionally.  This invariant is
    verified when MSI support is tested.
    
    Since we can invoke tg3_poll() multiple times per interrupt under
    high packet load, we fetch a new copy of the tag value in the
    status block right before we actually do the work.
    
    Also, because the tagged status tells the chip exactly which
    work we have processed, we can make two optimizations:
    
    1) tg3_restart_ints() need not check tg3_has_work()
    2) the tg3_timer() need not poke the chip 10 times per
       second to keep from losing interrupt events
    
    Based upon valuable feedback from Michael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fac9b83e
tg3.c 274 KB