Recent commit added logic to determine the appropriate statistics block
size to allocate and the size is stored in bp->hw_ring_stats_size.  But
if the firmware spec is older than 1.6.0, it is 0 and not initialized.
This causes the allocation to fail with size 0 and bnxt_open() to
abort.  Fix it by always initializing bp->hw_ring_stats_size to the
legacy default size value.

Fixes: 4e7485066373 ("bnxt_en: Allocate the larger per-ring statistics block 
for 57500 chips.")
Reported-by: Jonathan Lemon <jonathan.le...@gmail.com>
Signed-off-by: Michael Chan <michael.c...@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 4c790ff..b9ad43d 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -4985,6 +4985,7 @@ static int bnxt_hwrm_vnic_qcaps(struct bnxt *bp)
        struct hwrm_vnic_qcaps_input req = {0};
        int rc;
 
+       bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
        if (bp->hwrm_spec_code < 0x10600)
                return 0;
 
@@ -5004,8 +5005,6 @@ static int bnxt_hwrm_vnic_qcaps(struct bnxt *bp)
                if (bp->max_tpa_v2)
                        bp->hw_ring_stats_size =
                                sizeof(struct ctx_hw_stats_ext);
-               else
-                       bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
        }
        mutex_unlock(&bp->hwrm_cmd_lock);
        return rc;
-- 
2.5.1

Reply via email to