Commit 7d46c0e6 authored by Michal Swiatkowski's avatar Michal Swiatkowski Committed by Tony Nguyen

ice: remove filters only if VSI is deleted

Filters shouldn't be removed in VSI rebuild path. Removing them on PF
VSI results in no rule for PF MAC after changing for example queues
amount.

Remove all filters only in the VSI remove flow. As unload should also
cause the filter to be removed introduce, a new function ice_stop_eth().
It will unroll ice_start_eth(), so remove filters and close VSI.

Fixes: 6624e780 ("ice: split ice_vsi_setup into smaller functions")
Signed-off-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Arpana Arland <arpanax.arland@intel.com> (A Contingent worker at Intel)
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 83b49e7f
...@@ -291,6 +291,7 @@ static void ice_vsi_delete_from_hw(struct ice_vsi *vsi) ...@@ -291,6 +291,7 @@ static void ice_vsi_delete_from_hw(struct ice_vsi *vsi)
struct ice_vsi_ctx *ctxt; struct ice_vsi_ctx *ctxt;
int status; int status;
ice_fltr_remove_all(vsi);
ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL); ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
if (!ctxt) if (!ctxt)
return; return;
...@@ -2892,7 +2893,6 @@ void ice_vsi_decfg(struct ice_vsi *vsi) ...@@ -2892,7 +2893,6 @@ void ice_vsi_decfg(struct ice_vsi *vsi)
!test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags)) !test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
ice_cfg_sw_lldp(vsi, false, false); ice_cfg_sw_lldp(vsi, false, false);
ice_fltr_remove_all(vsi);
ice_rm_vsi_lan_cfg(vsi->port_info, vsi->idx); ice_rm_vsi_lan_cfg(vsi->port_info, vsi->idx);
err = ice_rm_vsi_rdma_cfg(vsi->port_info, vsi->idx); err = ice_rm_vsi_rdma_cfg(vsi->port_info, vsi->idx);
if (err) if (err)
......
...@@ -4641,6 +4641,12 @@ static int ice_start_eth(struct ice_vsi *vsi) ...@@ -4641,6 +4641,12 @@ static int ice_start_eth(struct ice_vsi *vsi)
return err; return err;
} }
static void ice_stop_eth(struct ice_vsi *vsi)
{
ice_fltr_remove_all(vsi);
ice_vsi_close(vsi);
}
static int ice_init_eth(struct ice_pf *pf) static int ice_init_eth(struct ice_pf *pf)
{ {
struct ice_vsi *vsi = ice_get_main_vsi(pf); struct ice_vsi *vsi = ice_get_main_vsi(pf);
...@@ -5129,7 +5135,7 @@ void ice_unload(struct ice_pf *pf) ...@@ -5129,7 +5135,7 @@ void ice_unload(struct ice_pf *pf)
{ {
ice_deinit_features(pf); ice_deinit_features(pf);
ice_deinit_rdma(pf); ice_deinit_rdma(pf);
ice_vsi_close(ice_get_main_vsi(pf)); ice_stop_eth(ice_get_main_vsi(pf));
ice_vsi_decfg(ice_get_main_vsi(pf)); ice_vsi_decfg(ice_get_main_vsi(pf));
ice_deinit_dev(pf); ice_deinit_dev(pf);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment