ice: Set carrier state and start/stop queues in rebuild

Set the carrier state post rebuild by querying the link status. Also
start/stop queues based on link status.

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
Anirudh Venkataramanan 2018-10-26 10:40:50 -07:00 committed by Jeff Kirsher
parent 042cb56478
commit ce317dd9f8
1 changed files with 17 additions and 1 deletions

View File

@ -3296,7 +3296,7 @@ static void ice_rebuild(struct ice_pf *pf)
struct device *dev = &pf->pdev->dev; struct device *dev = &pf->pdev->dev;
struct ice_hw *hw = &pf->hw; struct ice_hw *hw = &pf->hw;
enum ice_status ret; enum ice_status ret;
int err; int err, i;
if (test_bit(__ICE_DOWN, pf->state)) if (test_bit(__ICE_DOWN, pf->state))
goto clear_recovery; goto clear_recovery;
@ -3370,6 +3370,22 @@ static void ice_rebuild(struct ice_pf *pf)
} }
ice_reset_all_vfs(pf, true); ice_reset_all_vfs(pf, true);
for (i = 0; i < pf->num_alloc_vsi; i++) {
bool link_up;
if (!pf->vsi[i] || pf->vsi[i]->type != ICE_VSI_PF)
continue;
ice_get_link_status(pf->vsi[i]->port_info, &link_up);
if (link_up) {
netif_carrier_on(pf->vsi[i]->netdev);
netif_tx_wake_all_queues(pf->vsi[i]->netdev);
} else {
netif_carrier_off(pf->vsi[i]->netdev);
netif_tx_stop_all_queues(pf->vsi[i]->netdev);
}
}
/* if we get here, reset flow is successful */ /* if we get here, reset flow is successful */
clear_bit(__ICE_RESET_FAILED, pf->state); clear_bit(__ICE_RESET_FAILED, pf->state);
return; return;