• Michael Chan's avatar
    bnxt_en: Implement RX ring reset in response to buffer errors. · 8fbf58e1
    Michael Chan authored
    On some older chips, it is necessary to do a reset when we get buffer
    errors associated with an RX ring.  These buffer errors may become
    frequent if the RX ring underruns under heavy traffic.  The current
    code does a global reset of all reasources when this happens.  This
    works but creates a big disruption of all rings when one RX ring is
    having problem.  This patch implements a localized RX ring reset of
    just the RX ring having the issue.  All other rings including all
    TX rings will not be affected by this single RX ring reset.
    
    Only the older chips prior to the P5 class supports this reset.
    Because it is not a global reset, packets may still be arriving
    while we are calling firmware to reset that ring.  We need to be
    sure that we don't post any buffers during this time while the
    ring is undergoing reset.  After firmware completes successfully,
    the ring will be in the reset state with no buffers and we can start
    filling it with new buffers and posting them.
    Reviewed-by: default avatarPavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8fbf58e1
bnxt.c 340 KB