]> git.baikalelectronics.ru Git - kernel.git/commit
bnxt_en: Add workaround to detect bad opaque in rx completion (part 1)
authorMichael Chan <michael.chan@broadcom.com>
Tue, 10 May 2016 23:17:59 +0000 (19:17 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 May 2016 03:46:09 +0000 (23:46 -0400)
commit0a5b08abfc0995c72c7a73449ceff3690e632033
tree5a55fdc7b2d013effdf0fdd7c5e4217deb754e16
parentbb9aeb7361fedde397d5afa7b9f2d325970a6480
bnxt_en: Add workaround to detect bad opaque in rx completion (part 1)

There is a rare hardware bug that can cause a bad opaque value in the RX
or TPA completion.  When this happens, the hardware may have used the
same buffer twice for 2 rx packets.  In addition, the driver will also
crash later using the bad opaque as the index into the ring.

The rx opaque value is predictable and is always monotonically increasing.
The workaround is to keep track of the expected next opaque value and
compare it with the one returned by hardware during RX and TPA start
completions.  If they miscompare, we will not process any more RX and
TPA completions and exit NAPI.  We will then schedule a workqueue to
reset the function.

This patch adds the logic to keep track of the next rx consumer index.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h