diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_main.c | 27 | 
1 files changed, 15 insertions, 12 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 567694bf098b..0d8b8c6f9bd3 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -2316,18 +2316,15 @@ static void ice_service_task(struct work_struct *work)  		}  	} -	if (test_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags)) { -		/* Plug aux device per request */ -		ice_plug_aux_dev(pf); +	/* unplug aux dev per request, if an unplug request came in +	 * while processing a plug request, this will handle it +	 */ +	if (test_and_clear_bit(ICE_FLAG_UNPLUG_AUX_DEV, pf->flags)) +		ice_unplug_aux_dev(pf); -		/* Mark plugging as done but check whether unplug was -		 * requested during ice_plug_aux_dev() call -		 * (e.g. from ice_clear_rdma_cap()) and if so then -		 * plug aux device. -		 */ -		if (!test_and_clear_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags)) -			ice_unplug_aux_dev(pf); -	} +	/* Plug aux device per request */ +	if (test_and_clear_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags)) +		ice_plug_aux_dev(pf);  	if (test_and_clear_bit(ICE_FLAG_MTU_CHANGED, pf->flags)) {  		struct iidc_event *event; @@ -4644,6 +4641,12 @@ static int ice_start_eth(struct ice_vsi *vsi)  	return err;  } +static void ice_stop_eth(struct ice_vsi *vsi) +{ +	ice_fltr_remove_all(vsi); +	ice_vsi_close(vsi); +} +  static int ice_init_eth(struct ice_pf *pf)  {  	struct ice_vsi *vsi = ice_get_main_vsi(pf); @@ -5132,7 +5135,7 @@ void ice_unload(struct ice_pf *pf)  {  	ice_deinit_features(pf);  	ice_deinit_rdma(pf); -	ice_vsi_close(ice_get_main_vsi(pf)); +	ice_stop_eth(ice_get_main_vsi(pf));  	ice_vsi_decfg(ice_get_main_vsi(pf));  	ice_deinit_dev(pf);  } |