]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-5.0/bnxt_en-reset-device-on-rx-buffer-errors.patch
Linux 4.19.35
[thirdparty/kernel/stable-queue.git] / queue-5.0 / bnxt_en-reset-device-on-rx-buffer-errors.patch
1 From af2a09446e793fe72da3a2689d0139bb7e62fe44 Mon Sep 17 00:00:00 2001
2 From: Michael Chan <michael.chan@broadcom.com>
3 Date: Mon, 8 Apr 2019 17:39:55 -0400
4 Subject: bnxt_en: Reset device on RX buffer errors.
5
6 [ Upstream commit 8e44e96c6c8e8fb80b84a2ca11798a8554f710f2 ]
7
8 If the RX completion indicates RX buffers errors, the RX ring will be
9 disabled by firmware and no packets will be received on that ring from
10 that point on. Recover by resetting the device.
11
12 Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
13 Signed-off-by: Michael Chan <michael.chan@broadcom.com>
14 Signed-off-by: David S. Miller <davem@davemloft.net>
15 Signed-off-by: Sasha Levin <sashal@kernel.org>
16 ---
17 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++++
18 1 file changed, 6 insertions(+)
19
20 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
21 index 351417e74ae2..40ca339ec3df 100644
22 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
23 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
24 @@ -1610,11 +1610,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
25
26 rx_buf->data = NULL;
27 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {
28 + u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2);
29 +
30 bnxt_reuse_rx_data(rxr, cons, data);
31 if (agg_bufs)
32 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
33
34 rc = -EIO;
35 + if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
36 + netdev_warn(bp->dev, "RX buffer error %x\n", rx_err);
37 + bnxt_sched_reset(bp, rxr);
38 + }
39 goto next_rx;
40 }
41
42 --
43 2.19.1
44