FAILED: patch "[PATCH] bnxt_en: Fix offline ethtool selftest with RDMA enabled" failed to apply to 5.10-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6758f937669dba14c6aac7ca004edda42ec1b18d Mon Sep 17 00:00:00 2001
From: Michael Chan <[email protected]>
Date: Sun, 20 Feb 2022 04:05:48 -0500
Subject: [PATCH] bnxt_en: Fix offline ethtool selftest with RDMA enabled
For offline (destructive) self tests, we need to stop the RDMA driver first. Otherwise, the RDMA driver will run into unrecoverable errors when destructive firmware tests are being performed.
The irq_re_init parameter used in the half close and half open sequence when preparing the NIC for offline tests should be set to true because the RDMA driver will free all IRQs before the offline tests begin.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +5 -5
@@ -10330,12 +10330,12 @@ int bnxt_half_open_nic(struct bnxt *bp) goto half_open_err; } - rc =bnxt_alloc_mem (bp, false); + rc =bnxt_alloc_mem (bp, true);if (rc) {netdev_err (bp->dev,"bnxt_alloc_mem err: %x\n" , rc); goto half_open_err; } - rc =bnxt_init_nic (bp, false); + rc =bnxt_init_nic (bp, true);if (rc) {netdev_err (bp->dev,"bnxt_init_nic err: %x\n" , rc); goto half_open_err;
@@ -10344,7 +10344,7 @@ int bnxt_half_open_nic(struct bnxt *bp) half_open_err:bnxt_free_skbs (bp); -bnxt_free_mem (bp, false); +bnxt_free_mem (bp, true);dev_close (bp->dev);return rc; }
@@ -10354,9 +10354,9 @@ int bnxt_half_open_nic(struct bnxt *bp)*/ void bnxt_half_close_nic (struct bnxt *bp) { -bnxt_hwrm_resource_free (bp, false, false); +bnxt_hwrm_resource_free (bp, false, true);bnxt_free_skbs (bp); -bnxt_free_mem (bp, false); +bnxt_free_mem (bp, true); }void bnxt_reenable_sriov (struct bnxt *bp)
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +9 -3
@@ -25,6 +25,7 @@#include "bnxt_hsi.h" #include "bnxt.h" #include "bnxt_hwrm.h" +#include "bnxt_ulp.h" #include "bnxt_xdp.h" #include "bnxt_ptp.h" #include "bnxt_ethtool.h"
@@ -3551,9 +3552,12 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,if (!offline) {bnxt_run_fw_tests (bp, test_mask, &test_results); }else { - rc =bnxt_close_nic (bp, false, false); -if (rc) +bnxt_ulp_stop (bp); + rc =bnxt_close_nic (bp, true, false); +if (rc) { +bnxt_ulp_start (bp, rc);return ; + }bnxt_run_fw_tests (bp, test_mask, &test_results); buf[BNXT_MACLPBK_TEST_IDX ] =1 ;
@@ -3563,6 +3567,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,if (rc) {bnxt_hwrm_mac_loopback (bp, false); etest->flags |=ETH_TEST_FL_FAILED ; +bnxt_ulp_start (bp, rc);return ; }if (bnxt_run_loopback (bp))
@@ -3588,7 +3593,8 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, }bnxt_hwrm_phy_loopback (bp, false, false);bnxt_half_close_nic (bp); - rc =bnxt_open_nic (bp, false, true); + rc =bnxt_open_nic (bp, true, true); +bnxt_ulp_start (bp, rc); }if (rc ||bnxt_test_irq (bp)) { buf[BNXT_IRQ_TEST_IDX ] =1 ;