diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_main.c | 20 | 
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index a1f7c8edc22f..42c318ceff61 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -4802,9 +4802,13 @@ err_init_pf:  static void ice_deinit_dev(struct ice_pf *pf)  {  	ice_free_irq_msix_misc(pf); -	ice_clear_interrupt_scheme(pf);  	ice_deinit_pf(pf);  	ice_deinit_hw(&pf->hw); + +	/* Service task is already stopped, so call reset directly. */ +	ice_reset(&pf->hw, ICE_RESET_PFR); +	pci_wait_for_pending_transaction(pf->pdev); +	ice_clear_interrupt_scheme(pf);  }  static void ice_init_features(struct ice_pf *pf) @@ -5094,10 +5098,6 @@ int ice_load(struct ice_pf *pf)  	struct ice_vsi *vsi;  	int err; -	err = ice_reset(&pf->hw, ICE_RESET_PFR); -	if (err) -		return err; -  	err = ice_init_dev(pf);  	if (err)  		return err; @@ -5354,12 +5354,6 @@ static void ice_remove(struct pci_dev *pdev)  	ice_setup_mc_magic_wake(pf);  	ice_set_wake(pf); -	/* Issue a PFR as part of the prescribed driver unload flow.  Do not -	 * do it via ice_schedule_reset() since there is no need to rebuild -	 * and the service task is already stopped. -	 */ -	ice_reset(&pf->hw, ICE_RESET_PFR); -	pci_wait_for_pending_transaction(pdev);  	pci_disable_device(pdev);  } @@ -7056,6 +7050,10 @@ int ice_down(struct ice_vsi *vsi)  	ice_for_each_txq(vsi, i)  		ice_clean_tx_ring(vsi->tx_rings[i]); +	if (ice_is_xdp_ena_vsi(vsi)) +		ice_for_each_xdp_txq(vsi, i) +			ice_clean_tx_ring(vsi->xdp_rings[i]); +  	ice_for_each_rxq(vsi, i)  		ice_clean_rx_ring(vsi->rx_rings[i]);  | 
