• Matt Carlson's avatar
    tg3: Fix std rx prod ring handling · 86cfe4ff
    Matt Carlson authored
    There are some tg3 devices that require the driver to post new rx
    buffers in smaller increments.  Commit
    4361935a, "tg3: Consider
    rx_std_prod_idx a hw mailbox" changed how the driver tracks the rx
    producer ring updates, but it does not make any special considerations
    for the above-mentioned devices.  For those devices, it is possible for
    the driver to hit the special case path, which updates the hardware
    mailbox register but skips updating the shadow software mailbox member.
    If the special case path represents the final mailbox update for this
    ISR iteration, the hardware and software mailbox values will be out of
    sync.  Ultimately, this will cause the driver to use a stale mailbox
    value on the next iteration, which will appear to the hardware as a
    large rx buffer update.  Bad things ensue.
    
    The fix is to update the software shadow mailbox member when the special
    case path is taken.
    Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
    Reviewed-by: default avatarMichael Chan <mchan@broadcom.com>
    Reported-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    86cfe4ff
tg3.c 395 KB