bnxt_en: Fix allocation of zero statistics block size regression.
authorMichael Chan <michael.chan@broadcom.com>
Fri, 23 Aug 2019 05:51:41 +0000 (01:51 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 24 Aug 2019 23:34:41 +0000 (16:34 -0700)
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.lemon@gmail.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Tested-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 4c790ffa1a73a4f5d07af39263f696d2a5f17155..b9ad43d3dc51c560bba06a04e5092f4811b8e825 100644 (file)
@@ -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;