diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_lib.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_lib.c | 27 | 
1 files changed, 10 insertions, 17 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 5371e91f6bbb..7629b0190578 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c @@ -114,14 +114,8 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)  	if (!vsi->q_vectors)  		goto err_vectors; -	vsi->af_xdp_zc_qps = bitmap_zalloc(max_t(int, vsi->alloc_txq, vsi->alloc_rxq), GFP_KERNEL); -	if (!vsi->af_xdp_zc_qps) -		goto err_zc_qps; -  	return 0; -err_zc_qps: -	devm_kfree(dev, vsi->q_vectors);  err_vectors:  	devm_kfree(dev, vsi->rxq_map);  err_rxq_map: @@ -309,8 +303,6 @@ static void ice_vsi_free_arrays(struct ice_vsi *vsi)  	dev = ice_pf_to_dev(pf); -	bitmap_free(vsi->af_xdp_zc_qps); -	vsi->af_xdp_zc_qps = NULL;  	/* free the ring and vector containers */  	devm_kfree(dev, vsi->q_vectors);  	vsi->q_vectors = NULL; @@ -2282,22 +2274,23 @@ static int ice_vsi_cfg_def(struct ice_vsi *vsi)  		if (ret)  			goto unroll_vector_base; -		ice_vsi_map_rings_to_vectors(vsi); - -		/* Associate q_vector rings to napi */ -		ice_vsi_set_napi_queues(vsi); - -		vsi->stat_offsets_loaded = false; -  		if (ice_is_xdp_ena_vsi(vsi)) {  			ret = ice_vsi_determine_xdp_res(vsi);  			if (ret)  				goto unroll_vector_base; -			ret = ice_prepare_xdp_rings(vsi, vsi->xdp_prog); +			ret = ice_prepare_xdp_rings(vsi, vsi->xdp_prog, +						    ICE_XDP_CFG_PART);  			if (ret)  				goto unroll_vector_base;  		} +		ice_vsi_map_rings_to_vectors(vsi); + +		/* Associate q_vector rings to napi */ +		ice_vsi_set_napi_queues(vsi); + +		vsi->stat_offsets_loaded = false; +  		/* ICE_VSI_CTRL does not need RSS so skip RSS processing */  		if (vsi->type != ICE_VSI_CTRL)  			/* Do not exit if configuring RSS had an issue, at @@ -2437,7 +2430,7 @@ void ice_vsi_decfg(struct ice_vsi *vsi)  		/* return value check can be skipped here, it always returns  		 * 0 if reset is in progress  		 */ -		ice_destroy_xdp_rings(vsi); +		ice_destroy_xdp_rings(vsi, ICE_XDP_CFG_PART);  	ice_vsi_clear_rings(vsi);  	ice_vsi_free_q_vectors(vsi);  |