diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_lib.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_lib.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 40562600a8cf..09a3297cd63c 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c @@ -89,8 +89,13 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)  	if (!vsi->rx_rings)  		goto err_rings; -	/* XDP will have vsi->alloc_txq Tx queues as well, so double the size */ -	vsi->txq_map = devm_kcalloc(dev, (2 * vsi->alloc_txq), +	/* txq_map needs to have enough space to track both Tx (stack) rings +	 * and XDP rings; at this point vsi->num_xdp_txq might not be set, +	 * so use num_possible_cpus() as we want to always provide XDP ring +	 * per CPU, regardless of queue count settings from user that might +	 * have come from ethtool's set_channels() callback; +	 */ +	vsi->txq_map = devm_kcalloc(dev, (vsi->alloc_txq + num_possible_cpus()),  				    sizeof(*vsi->txq_map), GFP_KERNEL);  	if (!vsi->txq_map) |