aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ice/ice_main.c
diff options
context:
space:
mode:
authorAkeem G Abodunrin <akeem.g.abodunrin@intel.com>2019-02-08 15:50:56 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2019-03-19 20:00:09 -0400
commit1c44e3bce12f3ae8bf2f3f7fb808d4e2e9ef98ca (patch)
treebca9a445a3d6da977d259884a1c47b150e618a8e /drivers/net/ethernet/intel/ice/ice_main.c
parent70457520bab82bd758307837964ef7bbd5dd9dc8 (diff)
ice: Implement flow to reset VFs with PFR and other resets
All VF VSIs need to be reset and rebuild with the main VSIs before replaying all VSIs, so that all existing switch filters, scheduler tree and other configuration could be replayed at once. This fixes issues when doing PFR and CORER reset. Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com> 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>
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_main.c')
-rw-r--r--drivers/net/ethernet/intel/ice/ice_main.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 4dadf8edfd84..c75a4f4ae6e9 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -394,6 +394,7 @@ static void ice_do_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
394 ice_rebuild(pf); 394 ice_rebuild(pf);
395 clear_bit(__ICE_PREPARED_FOR_RESET, pf->state); 395 clear_bit(__ICE_PREPARED_FOR_RESET, pf->state);
396 clear_bit(__ICE_PFR_REQ, pf->state); 396 clear_bit(__ICE_PFR_REQ, pf->state);
397 ice_reset_all_vfs(pf, true);
397 } 398 }
398} 399}
399 400
@@ -436,6 +437,7 @@ static void ice_reset_subtask(struct ice_pf *pf)
436 clear_bit(__ICE_PFR_REQ, pf->state); 437 clear_bit(__ICE_PFR_REQ, pf->state);
437 clear_bit(__ICE_CORER_REQ, pf->state); 438 clear_bit(__ICE_CORER_REQ, pf->state);
438 clear_bit(__ICE_GLOBR_REQ, pf->state); 439 clear_bit(__ICE_GLOBR_REQ, pf->state);
440 ice_reset_all_vfs(pf, true);
439 } 441 }
440 442
441 return; 443 return;
@@ -3360,10 +3362,6 @@ static int ice_vsi_rebuild_all(struct ice_pf *pf)
3360 if (!pf->vsi[i]) 3362 if (!pf->vsi[i])
3361 continue; 3363 continue;
3362 3364
3363 /* VF VSI rebuild isn't supported yet */
3364 if (pf->vsi[i]->type == ICE_VSI_VF)
3365 continue;
3366
3367 err = ice_vsi_rebuild(pf->vsi[i]); 3365 err = ice_vsi_rebuild(pf->vsi[i]);
3368 if (err) { 3366 if (err) {
3369 dev_err(&pf->pdev->dev, 3367 dev_err(&pf->pdev->dev,
@@ -3500,8 +3498,6 @@ static void ice_rebuild(struct ice_pf *pf)
3500 goto err_vsi_rebuild; 3498 goto err_vsi_rebuild;
3501 } 3499 }
3502 3500
3503 ice_reset_all_vfs(pf, true);
3504
3505 ice_for_each_vsi(pf, i) { 3501 ice_for_each_vsi(pf, i) {
3506 bool link_up; 3502 bool link_up;
3507 3503