mirror of https://gitee.com/openkylin/linux.git
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:
parent
042cb56478
commit
ce317dd9f8
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue