diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_dcb_lib.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 23 | 
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c index 4f24d441c35e..0a55c552189a 100644 --- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c @@ -441,7 +441,7 @@ int ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked)  		goto out;  	} -	ice_pf_dcb_recfg(pf); +	ice_pf_dcb_recfg(pf, false);  out:  	/* enable previously downed VSIs */ @@ -731,12 +731,13 @@ static int ice_dcb_noncontig_cfg(struct ice_pf *pf)  /**   * ice_pf_dcb_recfg - Reconfigure all VEBs and VSIs   * @pf: pointer to the PF struct + * @locked: is adev device lock held   *   * Assumed caller has already disabled all VSIs before   * calling this function. Reconfiguring DCB based on   * local_dcbx_cfg.   */ -void ice_pf_dcb_recfg(struct ice_pf *pf) +void ice_pf_dcb_recfg(struct ice_pf *pf, bool locked)  {  	struct ice_dcbx_cfg *dcbcfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg;  	struct iidc_event *event; @@ -783,14 +784,16 @@ void ice_pf_dcb_recfg(struct ice_pf *pf)  		if (vsi->type == ICE_VSI_PF)  			ice_dcbnl_set_all(vsi);  	} -	/* Notify the AUX drivers that TC change is finished */ -	event = kzalloc(sizeof(*event), GFP_KERNEL); -	if (!event) -		return; +	if (!locked) { +		/* Notify the AUX drivers that TC change is finished */ +		event = kzalloc(sizeof(*event), GFP_KERNEL); +		if (!event) +			return; -	set_bit(IIDC_EVENT_AFTER_TC_CHANGE, event->type); -	ice_send_event_to_aux(pf, event); -	kfree(event); +		set_bit(IIDC_EVENT_AFTER_TC_CHANGE, event->type); +		ice_send_event_to_aux(pf, event); +		kfree(event); +	}  }  /** @@ -1044,7 +1047,7 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,  	}  	/* changes in configuration update VSI */ -	ice_pf_dcb_recfg(pf); +	ice_pf_dcb_recfg(pf, false);  	/* enable previously downed VSIs */  	ice_dcb_ena_dis_vsi(pf, true, true);  | 
