| From af2a09446e793fe72da3a2689d0139bb7e62fe44 Mon Sep 17 00:00:00 2001 |
| From: Michael Chan <michael.chan@broadcom.com> |
| Date: Mon, 8 Apr 2019 17:39:55 -0400 |
| Subject: bnxt_en: Reset device on RX buffer errors. |
| |
| [ Upstream commit 8e44e96c6c8e8fb80b84a2ca11798a8554f710f2 ] |
| |
| If the RX completion indicates RX buffers errors, the RX ring will be |
| disabled by firmware and no packets will be received on that ring from |
| that point on. Recover by resetting the device. |
| |
| Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") |
| Signed-off-by: Michael Chan <michael.chan@broadcom.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
| index 351417e74ae2..40ca339ec3df 100644 |
| --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
| +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
| @@ -1610,11 +1610,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, |
| |
| rx_buf->data = NULL; |
| if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) { |
| + u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2); |
| + |
| bnxt_reuse_rx_data(rxr, cons, data); |
| if (agg_bufs) |
| bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs); |
| |
| rc = -EIO; |
| + if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) { |
| + netdev_warn(bp->dev, "RX buffer error %x\n", rx_err); |
| + bnxt_sched_reset(bp, rxr); |
| + } |
| goto next_rx; |
| } |
| |
| -- |
| 2.19.1 |
| |