mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 11:56:14 +07:00
mlxsw: spectrum_router: Update multipath hash parameters upon netevents
Make sure the device and the kernel are performing the multipath hash according to the same parameters by updating the device whenever the relevant netevent is generated. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
af658b6a0e
commit
28678f07f1
@ -2078,15 +2078,29 @@ static void mlxsw_sp_router_neigh_event_work(struct work_struct *work)
|
||||
kfree(net_work);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_router_netevent_event(struct notifier_block *unused,
|
||||
static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp);
|
||||
|
||||
static void mlxsw_sp_router_mp_hash_event_work(struct work_struct *work)
|
||||
{
|
||||
struct mlxsw_sp_netevent_work *net_work =
|
||||
container_of(work, struct mlxsw_sp_netevent_work, work);
|
||||
struct mlxsw_sp *mlxsw_sp = net_work->mlxsw_sp;
|
||||
|
||||
mlxsw_sp_mp_hash_init(mlxsw_sp);
|
||||
kfree(net_work);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_router_netevent_event(struct notifier_block *nb,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct mlxsw_sp_netevent_work *net_work;
|
||||
struct mlxsw_sp_port *mlxsw_sp_port;
|
||||
struct mlxsw_sp_router *router;
|
||||
struct mlxsw_sp *mlxsw_sp;
|
||||
unsigned long interval;
|
||||
struct neigh_parms *p;
|
||||
struct neighbour *n;
|
||||
struct net *net;
|
||||
|
||||
switch (event) {
|
||||
case NETEVENT_DELAY_PROBE_TIME_UPDATE:
|
||||
@ -2138,6 +2152,21 @@ static int mlxsw_sp_router_netevent_event(struct notifier_block *unused,
|
||||
mlxsw_core_schedule_work(&net_work->work);
|
||||
mlxsw_sp_port_dev_put(mlxsw_sp_port);
|
||||
break;
|
||||
case NETEVENT_MULTIPATH_HASH_UPDATE:
|
||||
net = ptr;
|
||||
|
||||
if (!net_eq(net, &init_net))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC);
|
||||
if (!net_work)
|
||||
return NOTIFY_BAD;
|
||||
|
||||
router = container_of(nb, struct mlxsw_sp_router, netevent_nb);
|
||||
INIT_WORK(&net_work->work, mlxsw_sp_router_mp_hash_event_work);
|
||||
net_work->mlxsw_sp = router->mlxsw_sp;
|
||||
mlxsw_core_schedule_work(&net_work->work);
|
||||
break;
|
||||
}
|
||||
|
||||
return NOTIFY_DONE;
|
||||
|
Loading…
Reference in New Issue
Block a user