return notifier_from_errno(err);
 }
 
-static struct notifier_block mlxsw_sp_inetaddr_valid_nb __read_mostly = {
-       .notifier_call = mlxsw_sp_inetaddr_valid_event,
-};
-
-static struct notifier_block mlxsw_sp_inet6addr_valid_nb __read_mostly = {
-       .notifier_call = mlxsw_sp_inet6addr_valid_event,
-};
-
 static const struct pci_device_id mlxsw_sp1_pci_id_table[] = {
        {PCI_VDEVICE(MELLANOX, PCI_DEVICE_ID_MELLANOX_SPECTRUM), 0},
        {0, },
 {
        int err;
 
-       register_inetaddr_validator_notifier(&mlxsw_sp_inetaddr_valid_nb);
-       register_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb);
-
        err = mlxsw_core_driver_register(&mlxsw_sp1_driver);
        if (err)
-               goto err_sp1_core_driver_register;
+               return err;
 
        err = mlxsw_core_driver_register(&mlxsw_sp2_driver);
        if (err)
        mlxsw_core_driver_unregister(&mlxsw_sp2_driver);
 err_sp2_core_driver_register:
        mlxsw_core_driver_unregister(&mlxsw_sp1_driver);
-err_sp1_core_driver_register:
-       unregister_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb);
-       unregister_inetaddr_validator_notifier(&mlxsw_sp_inetaddr_valid_nb);
        return err;
 }
 
        mlxsw_core_driver_unregister(&mlxsw_sp3_driver);
        mlxsw_core_driver_unregister(&mlxsw_sp2_driver);
        mlxsw_core_driver_unregister(&mlxsw_sp1_driver);
-       unregister_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb);
-       unregister_inetaddr_validator_notifier(&mlxsw_sp_inetaddr_valid_nb);
 }
 
 module_init(mlxsw_sp_module_init);
 
 void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp);
 void mlxsw_sp_rif_macvlan_del(struct mlxsw_sp *mlxsw_sp,
                              const struct net_device *macvlan_dev);
-int mlxsw_sp_inetaddr_valid_event(struct notifier_block *unused,
-                                 unsigned long event, void *ptr);
-int mlxsw_sp_inet6addr_valid_event(struct notifier_block *unused,
-                                  unsigned long event, void *ptr);
 int
 mlxsw_sp_port_vlan_router_join(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan,
                               struct net_device *l3_dev,
 
        return notifier_from_errno(err);
 }
 
-int mlxsw_sp_inetaddr_valid_event(struct notifier_block *unused,
-                                 unsigned long event, void *ptr)
+static int mlxsw_sp_inetaddr_valid_event(struct notifier_block *unused,
+                                        unsigned long event, void *ptr)
 {
        struct in_validator_info *ivi = (struct in_validator_info *) ptr;
        struct net_device *dev = ivi->ivi_dev->dev;
        return NOTIFY_DONE;
 }
 
-int mlxsw_sp_inet6addr_valid_event(struct notifier_block *unused,
-                                  unsigned long event, void *ptr)
+static int mlxsw_sp_inet6addr_valid_event(struct notifier_block *unused,
+                                         unsigned long event, void *ptr)
 {
        struct in6_validator_info *i6vi = (struct in6_validator_info *) ptr;
        struct net_device *dev = i6vi->i6vi_dev->dev;
                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp_router *router;
+       struct notifier_block *nb;
        int err;
 
        router = kzalloc(sizeof(*mlxsw_sp->router), GFP_KERNEL);
        if (err)
                goto err_register_inet6addr_notifier;
 
+       router->inetaddr_valid_nb.notifier_call = mlxsw_sp_inetaddr_valid_event;
+       err = register_inetaddr_validator_notifier(&router->inetaddr_valid_nb);
+       if (err)
+               goto err_register_inetaddr_valid_notifier;
+
+       nb = &router->inet6addr_valid_nb;
+       nb->notifier_call = mlxsw_sp_inet6addr_valid_event;
+       err = register_inet6addr_validator_notifier(nb);
+       if (err)
+               goto err_register_inet6addr_valid_notifier;
+
        mlxsw_sp->router->netevent_nb.notifier_call =
                mlxsw_sp_router_netevent_event;
        err = register_netevent_notifier(&mlxsw_sp->router->netevent_nb);
 err_register_nexthop_notifier:
        unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb);
 err_register_netevent_notifier:
+       unregister_inet6addr_validator_notifier(&router->inet6addr_valid_nb);
+err_register_inet6addr_valid_notifier:
+       unregister_inetaddr_validator_notifier(&router->inetaddr_valid_nb);
+err_register_inetaddr_valid_notifier:
        unregister_inet6addr_notifier(&router->inet6addr_nb);
 err_register_inet6addr_notifier:
        unregister_inetaddr_notifier(&router->inetaddr_nb);
        unregister_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &router->nexthop_nb);
        unregister_netevent_notifier(&router->netevent_nb);
+       unregister_inet6addr_validator_notifier(&router->inet6addr_valid_nb);
+       unregister_inetaddr_validator_notifier(&router->inetaddr_valid_nb);
        unregister_inet6addr_notifier(&router->inet6addr_nb);
        unregister_inetaddr_notifier(&router->inetaddr_nb);
        mlxsw_core_flush_owq();