diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_main.c | 46 | 
1 files changed, 34 insertions, 12 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 1b61ca3a6eb6..ec636be4d17d 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -35,7 +35,6 @@ static const char ice_copyright[] = "Copyright (c) 2018, Intel Corporation.";  #define ICE_DDP_PKG_PATH	"intel/ice/ddp/"  #define ICE_DDP_PKG_FILE	ICE_DDP_PKG_PATH "ice.pkg" -MODULE_AUTHOR("Intel Corporation, <[email protected]>");  MODULE_DESCRIPTION(DRV_SUMMARY);  MODULE_IMPORT_NS(LIBIE);  MODULE_LICENSE("GPL v2"); @@ -623,7 +622,7 @@ skip:  	if (hw->port_info)  		ice_sched_clear_port(hw->port_info); -	ice_shutdown_all_ctrlq(hw); +	ice_shutdown_all_ctrlq(hw, false);  	set_bit(ICE_PREPARED_FOR_RESET, pf->state);  } @@ -805,6 +804,9 @@ void ice_print_link_msg(struct ice_vsi *vsi, bool isup)  	}  	switch (vsi->port_info->phy.link_info.link_speed) { +	case ICE_AQ_LINK_SPEED_200GB: +		speed = "200 G"; +		break;  	case ICE_AQ_LINK_SPEED_100GB:  		speed = "100 G";  		break; @@ -2607,7 +2609,7 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)  		}  		/* assign the mask for this irq */ -		irq_set_affinity_hint(irq_num, &q_vector->affinity_mask); +		irq_update_affinity_hint(irq_num, &q_vector->affinity_mask);  	}  	err = ice_set_cpu_rx_rmap(vsi); @@ -2625,7 +2627,7 @@ free_q_irqs:  		irq_num = vsi->q_vectors[vector]->irq.virq;  		if (!IS_ENABLED(CONFIG_RFS_ACCEL))  			irq_set_affinity_notifier(irq_num, NULL); -		irq_set_affinity_hint(irq_num, NULL); +		irq_update_affinity_hint(irq_num, NULL);  		devm_free_irq(dev, irq_num, &vsi->q_vectors[vector]);  	}  	return err; @@ -4136,7 +4138,7 @@ bool ice_is_wol_supported(struct ice_hw *hw)  int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx, bool locked)  {  	struct ice_pf *pf = vsi->back; -	int err = 0, timeout = 50; +	int i, err = 0, timeout = 50;  	if (!new_rx && !new_tx)  		return -EINVAL; @@ -4155,15 +4157,32 @@ int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx, bool locked)  	/* set for the next time the netdev is started */  	if (!netif_running(vsi->netdev)) { -		ice_vsi_rebuild(vsi, ICE_VSI_FLAG_NO_INIT); +		err = ice_vsi_rebuild(vsi, ICE_VSI_FLAG_NO_INIT); +		if (err) +			goto rebuild_err;  		dev_dbg(ice_pf_to_dev(pf), "Link is down, queue count change happens when link is brought up\n");  		goto done;  	}  	ice_vsi_close(vsi); -	ice_vsi_rebuild(vsi, ICE_VSI_FLAG_NO_INIT); +	err = ice_vsi_rebuild(vsi, ICE_VSI_FLAG_NO_INIT); +	if (err) +		goto rebuild_err; + +	ice_for_each_traffic_class(i) { +		if (vsi->tc_cfg.ena_tc & BIT(i)) +			netdev_set_tc_queue(vsi->netdev, +					    vsi->tc_cfg.tc_info[i].netdev_tc, +					    vsi->tc_cfg.tc_info[i].qcount_tx, +					    vsi->tc_cfg.tc_info[i].qoffset); +	}  	ice_pf_dcb_recfg(pf, locked);  	ice_vsi_open(vsi); +	goto done; + +rebuild_err: +	dev_err(ice_pf_to_dev(pf), "Error during VSI rebuild: %d. Unload and reload the driver.\n", +		err);  done:  	clear_bit(ICE_CFG_BUSY, pf->state);  	return err; @@ -5479,7 +5498,7 @@ static void ice_prepare_for_shutdown(struct ice_pf *pf)  		if (pf->vsi[v])  			pf->vsi[v]->vsi_num = 0; -	ice_shutdown_all_ctrlq(hw); +	ice_shutdown_all_ctrlq(hw, true);  }  /** @@ -5564,7 +5583,7 @@ static int ice_suspend(struct device *dev)  	 */  	disabled = ice_service_task_stop(pf); -	ice_unplug_aux_dev(pf); +	ice_deinit_rdma(pf);  	/* Already suspended?, then there is nothing to do */  	if (test_and_set_bit(ICE_SUSPENDED, pf->state)) { @@ -5644,6 +5663,11 @@ static int ice_resume(struct device *dev)  	if (ret)  		dev_err(dev, "Cannot restore interrupt scheme: %d\n", ret); +	ret = ice_init_rdma(pf); +	if (ret) +		dev_err(dev, "Reinitialize RDMA during resume failed: %d\n", +			ret); +  	clear_bit(ICE_DOWN, pf->state);  	/* Now perform PF reset and rebuild */  	reset_type = ICE_RESET_PFR; @@ -7678,8 +7702,6 @@ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)  		goto err_vsi_rebuild;  	} -	ice_eswitch_rebuild(pf); -  	if (reset_type == ICE_RESET_PFR) {  		err = ice_rebuild_channels(pf);  		if (err) { @@ -7734,7 +7756,7 @@ err_vsi_rebuild:  err_sched_init_port:  	ice_sched_cleanup_all(hw);  err_init_ctrlq: -	ice_shutdown_all_ctrlq(hw); +	ice_shutdown_all_ctrlq(hw, false);  	set_bit(ICE_RESET_FAILED, pf->state);  clear_recovery:  	/* set this bit in PF state to control service task scheduling */ |