diff options
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 3e55cef3176f..c3107dca24da 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -3862,6 +3862,15 @@ static void i40e_quiesce_vsi(struct i40e_vsi *vsi) | |||
3862 | if (test_bit(__I40E_DOWN, &vsi->state)) | 3862 | if (test_bit(__I40E_DOWN, &vsi->state)) |
3863 | return; | 3863 | return; |
3864 | 3864 | ||
3865 | /* No need to disable FCoE VSI when Tx suspended */ | ||
3866 | if ((test_bit(__I40E_PORT_TX_SUSPENDED, &vsi->back->state)) && | ||
3867 | vsi->type == I40E_VSI_FCOE) { | ||
3868 | dev_dbg(&vsi->back->pdev->dev, | ||
3869 | "%s: VSI seid %d skipping FCoE VSI disable\n", | ||
3870 | __func__, vsi->seid); | ||
3871 | return; | ||
3872 | } | ||
3873 | |||
3865 | set_bit(__I40E_NEEDS_RESTART, &vsi->state); | 3874 | set_bit(__I40E_NEEDS_RESTART, &vsi->state); |
3866 | if (vsi->netdev && netif_running(vsi->netdev)) { | 3875 | if (vsi->netdev && netif_running(vsi->netdev)) { |
3867 | vsi->netdev->netdev_ops->ndo_stop(vsi->netdev); | 3876 | vsi->netdev->netdev_ops->ndo_stop(vsi->netdev); |
@@ -3953,7 +3962,8 @@ static int i40e_pf_wait_txq_disabled(struct i40e_pf *pf) | |||
3953 | int v, ret = 0; | 3962 | int v, ret = 0; |
3954 | 3963 | ||
3955 | for (v = 0; v < pf->hw.func_caps.num_vsis; v++) { | 3964 | for (v = 0; v < pf->hw.func_caps.num_vsis; v++) { |
3956 | if (pf->vsi[v]) { | 3965 | /* No need to wait for FCoE VSI queues */ |
3966 | if (pf->vsi[v] && pf->vsi[v]->type != I40E_VSI_FCOE) { | ||
3957 | ret = i40e_vsi_wait_txq_disabled(pf->vsi[v]); | 3967 | ret = i40e_vsi_wait_txq_disabled(pf->vsi[v]); |
3958 | if (ret) | 3968 | if (ret) |
3959 | break; | 3969 | break; |