ice: support non-standard teardown of bond interface
Code for supporting removal of the PF driver (NETDEV_UNREGISTER) events for both when the bond has the primary interface as active and when failed over to thew secondary interface. Reviewed-by: Daniel Machon <daniel.machon@microchip.com> Signed-off-by: Dave Ertman <david.m.ertman@intel.com> Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
1e0f9881ef
commit
ba789fb456
@ -1190,15 +1190,16 @@ static void ice_lag_changeupper_event(struct ice_lag *lag, void *ptr)
|
||||
if (!primary_lag && lag->primary)
|
||||
primary_lag = lag;
|
||||
|
||||
if (primary_lag) {
|
||||
if (!lag->primary) {
|
||||
ice_lag_set_swid(0, lag, false);
|
||||
} else {
|
||||
if (!lag->primary) {
|
||||
ice_lag_set_swid(0, lag, false);
|
||||
} else {
|
||||
if (primary_lag && lag->primary) {
|
||||
ice_lag_primary_swid(lag, false);
|
||||
ice_lag_del_prune_list(primary_lag, lag->pf);
|
||||
}
|
||||
ice_lag_cfg_cp_fltr(lag, false);
|
||||
}
|
||||
/* remove filter for control packets */
|
||||
ice_lag_cfg_cp_fltr(lag, false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1401,6 +1402,38 @@ ice_lag_chk_comp(struct ice_lag *lag, void *ptr)
|
||||
static void
|
||||
ice_lag_unregister(struct ice_lag *lag, struct net_device *event_netdev)
|
||||
{
|
||||
struct ice_netdev_priv *np;
|
||||
struct ice_pf *event_pf;
|
||||
struct ice_lag *p_lag;
|
||||
|
||||
p_lag = ice_lag_find_primary(lag);
|
||||
np = netdev_priv(event_netdev);
|
||||
event_pf = np->vsi->back;
|
||||
|
||||
if (p_lag) {
|
||||
if (p_lag->active_port != p_lag->pf->hw.port_info->lport &&
|
||||
p_lag->active_port != ICE_LAG_INVALID_PORT) {
|
||||
struct ice_hw *active_hw;
|
||||
|
||||
active_hw = ice_lag_find_hw_by_lport(lag,
|
||||
p_lag->active_port);
|
||||
if (active_hw)
|
||||
ice_lag_reclaim_vf_nodes(p_lag, active_hw);
|
||||
lag->active_port = ICE_LAG_INVALID_PORT;
|
||||
}
|
||||
}
|
||||
|
||||
/* primary processing for primary */
|
||||
if (lag->primary && lag->netdev == event_netdev)
|
||||
ice_lag_primary_swid(lag, false);
|
||||
|
||||
/* primary processing for secondary */
|
||||
if (lag->primary && lag->netdev != event_netdev)
|
||||
ice_lag_del_prune_list(lag, event_pf);
|
||||
|
||||
/* secondary processing for secondary */
|
||||
if (!lag->primary && lag->netdev == event_netdev)
|
||||
ice_lag_set_swid(0, lag, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1470,8 +1503,8 @@ static void ice_lag_process_event(struct work_struct *work)
|
||||
case NETDEV_UNREGISTER:
|
||||
if (ice_is_feature_supported(pf, ICE_F_SRIOV_LAG)) {
|
||||
netdev = lag_work->info.bonding_info.info.dev;
|
||||
if (netdev == lag_work->lag->netdev &&
|
||||
lag_work->lag->bonded)
|
||||
if ((netdev == lag_work->lag->netdev ||
|
||||
lag_work->lag->primary) && lag_work->lag->bonded)
|
||||
ice_lag_unregister(lag_work->lag, netdev);
|
||||
}
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user