OSDN Git Service

mlxsw: spectrum: Use per-netns netdevice notifier registration
authorJiri Pirko <jiri@mellanox.com>
Mon, 30 Sep 2019 08:15:11 +0000 (10:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 2 Oct 2019 15:48:44 +0000 (11:48 -0400)
The mlxsw_sp instance is not interested in events happening in other
network namespaces. So use "_net" variants for netdevice notifier
registration/unregistration and get only events which are happening in
the net the instance is in.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index dcf9562..a54a0dc 100644 (file)
@@ -4864,7 +4864,8 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
         * respin.
         */
        mlxsw_sp->netdevice_nb.notifier_call = mlxsw_sp_netdevice_event;
-       err = register_netdevice_notifier(&mlxsw_sp->netdevice_nb);
+       err = register_netdevice_notifier_net(&init_net,
+                                             &mlxsw_sp->netdevice_nb);
        if (err) {
                dev_err(mlxsw_sp->bus_info->dev, "Failed to register netdev notifier\n");
                goto err_netdev_notifier;
@@ -4887,7 +4888,8 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
 err_ports_create:
        mlxsw_sp_dpipe_fini(mlxsw_sp);
 err_dpipe_init:
-       unregister_netdevice_notifier(&mlxsw_sp->netdevice_nb);
+       unregister_netdevice_notifier_net(&init_net,
+                                         &mlxsw_sp->netdevice_nb);
 err_netdev_notifier:
        if (mlxsw_sp->clock)
                mlxsw_sp->ptp_ops->fini(mlxsw_sp->ptp_state);
@@ -4973,7 +4975,8 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
 
        mlxsw_sp_ports_remove(mlxsw_sp);
        mlxsw_sp_dpipe_fini(mlxsw_sp);
-       unregister_netdevice_notifier(&mlxsw_sp->netdevice_nb);
+       unregister_netdevice_notifier_net(&init_net,
+                                         &mlxsw_sp->netdevice_nb);
        if (mlxsw_sp->clock) {
                mlxsw_sp->ptp_ops->fini(mlxsw_sp->ptp_state);
                mlxsw_sp->ptp_ops->clock_fini(mlxsw_sp->clock);