mlxsw: spectrum_router: Register netdevice notifier before nexthop
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / mellanox / mlxsw / spectrum_router.c
index debd2c4..ae2fb9e 100644 (file)
@@ -11458,6 +11458,13 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
        if (err)
                goto err_register_netevent_notifier;
 
+       mlxsw_sp->router->netdevice_nb.notifier_call =
+               mlxsw_sp_router_netdevice_event;
+       err = register_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
+                                             &mlxsw_sp->router->netdevice_nb);
+       if (err)
+               goto err_register_netdev_notifier;
+
        mlxsw_sp->router->nexthop_nb.notifier_call =
                mlxsw_sp_nexthop_obj_event;
        err = register_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
@@ -11473,22 +11480,15 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
        if (err)
                goto err_register_fib_notifier;
 
-       mlxsw_sp->router->netdevice_nb.notifier_call =
-               mlxsw_sp_router_netdevice_event;
-       err = register_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
-                                             &mlxsw_sp->router->netdevice_nb);
-       if (err)
-               goto err_register_netdev_notifier;
-
        return 0;
 
-err_register_netdev_notifier:
-       unregister_fib_notifier(mlxsw_sp_net(mlxsw_sp),
-                               &mlxsw_sp->router->fib_nb);
 err_register_fib_notifier:
        unregister_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &mlxsw_sp->router->nexthop_nb);
 err_register_nexthop_notifier:
+       unregister_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
+                                         &router->netdevice_nb);
+err_register_netdev_notifier:
        unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb);
 err_register_netevent_notifier:
        unregister_inet6addr_validator_notifier(&router->inet6addr_valid_nb);
@@ -11536,11 +11536,11 @@ void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
 {
        struct mlxsw_sp_router *router = mlxsw_sp->router;
 
-       unregister_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
-                                         &router->netdevice_nb);
        unregister_fib_notifier(mlxsw_sp_net(mlxsw_sp), &router->fib_nb);
        unregister_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &router->nexthop_nb);
+       unregister_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
+                                         &router->netdevice_nb);
        unregister_netevent_notifier(&router->netevent_nb);
        unregister_inet6addr_validator_notifier(&router->inet6addr_valid_nb);
        unregister_inetaddr_validator_notifier(&router->inetaddr_valid_nb);