mlxsw: Propagate extack down to register_fib_notifier()
authorJiri Pirko <jiri@mellanox.com>
Thu, 3 Oct 2019 09:49:34 +0000 (11:49 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Oct 2019 18:10:56 +0000 (11:10 -0700)
During the devlink reaload the extack is present, so propagate it all
the way down to register_fib_notifier() call in spectrum_router.c.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/mellanox/mlxsw/core.h
drivers/net/ethernet/mellanox/mlxsw/i2c.c
drivers/net/ethernet/mellanox/mlxsw/minimal.c
drivers/net/ethernet/mellanox/mlxsw/pci.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
drivers/net/ethernet/mellanox/mlxsw/switchib.c
drivers/net/ethernet/mellanox/mlxsw/switchx2.c

index 14dcc786926ddc22ea93c6820cc117df40dd6316..1e61a012ca43de8e792cdfa58b951dac031170e0 100644 (file)
@@ -1005,7 +1005,7 @@ mlxsw_devlink_core_bus_device_reload_up(struct devlink *devlink,
        return mlxsw_core_bus_device_register(mlxsw_core->bus_info,
                                              mlxsw_core->bus,
                                              mlxsw_core->bus_priv, true,
-                                             devlink);
+                                             devlink, extack);
 }
 
 static int mlxsw_devlink_flash_update(struct devlink *devlink,
@@ -1098,7 +1098,8 @@ static int
 __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                 const struct mlxsw_bus *mlxsw_bus,
                                 void *bus_priv, bool reload,
-                                struct devlink *devlink)
+                                struct devlink *devlink,
+                                struct netlink_ext_ack *extack)
 {
        const char *device_kind = mlxsw_bus_info->device_kind;
        struct mlxsw_core *mlxsw_core;
@@ -1172,7 +1173,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
        }
 
        if (mlxsw_driver->init) {
-               err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info);
+               err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info, extack);
                if (err)
                        goto err_driver_init;
        }
@@ -1223,14 +1224,16 @@ err_devlink_alloc:
 int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                   const struct mlxsw_bus *mlxsw_bus,
                                   void *bus_priv, bool reload,
-                                  struct devlink *devlink)
+                                  struct devlink *devlink,
+                                  struct netlink_ext_ack *extack)
 {
        bool called_again = false;
        int err;
 
 again:
        err = __mlxsw_core_bus_device_register(mlxsw_bus_info, mlxsw_bus,
-                                              bus_priv, reload, devlink);
+                                              bus_priv, reload,
+                                              devlink, extack);
        /* -EAGAIN is returned in case the FW was updated. FW needs
         * a reset, so lets try to call __mlxsw_core_bus_device_register()
         * again.
index e1ef4d255b93ae00e1bb4ebe421dbba51158b36e..3377a1b39b03d3c5da85c9670efdbfadb0c3c86f 100644 (file)
@@ -37,7 +37,8 @@ void mlxsw_core_driver_unregister(struct mlxsw_driver *mlxsw_driver);
 int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                   const struct mlxsw_bus *mlxsw_bus,
                                   void *bus_priv, bool reload,
-                                  struct devlink *devlink);
+                                  struct devlink *devlink,
+                                  struct netlink_ext_ack *extack);
 void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, bool reload);
 
 struct mlxsw_tx_info {
@@ -253,7 +254,8 @@ struct mlxsw_driver {
        const char *kind;
        size_t priv_size;
        int (*init)(struct mlxsw_core *mlxsw_core,
-                   const struct mlxsw_bus_info *mlxsw_bus_info);
+                   const struct mlxsw_bus_info *mlxsw_bus_info,
+                   struct netlink_ext_ack *extack);
        void (*fini)(struct mlxsw_core *mlxsw_core);
        int (*basic_trap_groups_set)(struct mlxsw_core *mlxsw_core);
        int (*port_type_set)(struct mlxsw_core *mlxsw_core, u8 local_port,
index 95f408d0e103c7114884160660c34b9379a3fe62..34566eb62c4761f3e484ad09600d8b071c50c92a 100644 (file)
@@ -640,7 +640,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client,
 
        err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info,
                                             &mlxsw_i2c_bus, mlxsw_i2c, false,
-                                            NULL);
+                                            NULL, NULL);
        if (err) {
                dev_err(&client->dev, "Fail to register core bus\n");
                return err;
index cee16ad58307c0f5cb0116f9a41e14bea3b3f3e3..5edd8de57a24778367205c36d885466269e8615d 100644 (file)
@@ -327,7 +327,8 @@ static void mlxsw_m_ports_remove(struct mlxsw_m *mlxsw_m)
 }
 
 static int mlxsw_m_init(struct mlxsw_core *mlxsw_core,
-                       const struct mlxsw_bus_info *mlxsw_bus_info)
+                       const struct mlxsw_bus_info *mlxsw_bus_info,
+                       struct netlink_ext_ack *extack)
 {
        struct mlxsw_m *mlxsw_m = mlxsw_core_driver_priv(mlxsw_core);
        int err;
index f1294b00efdf3840e0bf0e7b2781f2bc3ba6eba3..914c33e46fb47bc038460dd9f9d897edc84d0007 100644 (file)
@@ -1802,7 +1802,7 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        err = mlxsw_core_bus_device_register(&mlxsw_pci->bus_info,
                                             &mlxsw_pci_bus, mlxsw_pci, false,
-                                            NULL);
+                                            NULL, NULL);
        if (err) {
                dev_err(&pdev->dev, "cannot register bus device\n");
                goto err_bus_device_register;
index a9ea9c7b9e592678164234be50d01d79d29da5d4..c91b8238c8c50721511cb52c698e800063c615d5 100644 (file)
@@ -4739,7 +4739,8 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
                                    unsigned long event, void *ptr);
 
 static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
-                        const struct mlxsw_bus_info *mlxsw_bus_info)
+                        const struct mlxsw_bus_info *mlxsw_bus_info,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
        int err;
@@ -4832,7 +4833,7 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
                goto err_acl_init;
        }
 
-       err = mlxsw_sp_router_init(mlxsw_sp);
+       err = mlxsw_sp_router_init(mlxsw_sp, extack);
        if (err) {
                dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize router\n");
                goto err_router_init;
@@ -4927,7 +4928,8 @@ err_fids_init:
 }
 
 static int mlxsw_sp1_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
 
@@ -4947,11 +4949,12 @@ static int mlxsw_sp1_init(struct mlxsw_core *mlxsw_core,
        mlxsw_sp->listeners = mlxsw_sp1_listener;
        mlxsw_sp->listeners_count = ARRAY_SIZE(mlxsw_sp1_listener);
 
-       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info);
+       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info, extack);
 }
 
 static int mlxsw_sp2_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
 
@@ -4967,7 +4970,7 @@ static int mlxsw_sp2_init(struct mlxsw_core *mlxsw_core,
        mlxsw_sp->port_type_speed_ops = &mlxsw_sp2_port_type_speed_ops;
        mlxsw_sp->ptp_ops = &mlxsw_sp2_ptp_ops;
 
-       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info);
+       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info, extack);
 }
 
 static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
index f58d45e770cd0ff4082481066a015c3456c82c1c..8f99d70d6b8bc6bab36d5fd31399a2431926047f 100644 (file)
@@ -525,7 +525,8 @@ union mlxsw_sp_l3addr {
        struct in6_addr addr6;
 };
 
-int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp);
+int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
+                        struct netlink_ext_ack *extack);
 void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp);
 int mlxsw_sp_netdevice_router_port_event(struct net_device *dev,
                                         unsigned long event, void *ptr);
index 3479f805b37787a5abb31e0b73d9423916cfacff..0e99b64450ca2f029a7cac0c3ce1b26a27b0df26 100644 (file)
@@ -8061,7 +8061,8 @@ static void __mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
        mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rgcr), rgcr_pl);
 }
 
-int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp)
+int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp_router *router;
        int err;
@@ -8139,7 +8140,7 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp)
        mlxsw_sp->router->fib_nb.notifier_call = mlxsw_sp_router_fib_event;
        err = register_fib_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &mlxsw_sp->router->fib_nb,
-                                   mlxsw_sp_router_fib_dump_flush, NULL);
+                                   mlxsw_sp_router_fib_dump_flush, extack);
        if (err)
                goto err_register_fib_notifier;
 
index 0d9356b3f65d8b89f3f2eb15f82cbacf3faea14c..4ff1e623aa7639bf003e6049dab9590fff3eef54 100644 (file)
@@ -446,7 +446,8 @@ static int mlxsw_sib_basic_trap_groups_set(struct mlxsw_core *mlxsw_core)
 }
 
 static int mlxsw_sib_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sib *mlxsw_sib = mlxsw_core_driver_priv(mlxsw_core);
        int err;
index a4d09392a8d7dcba3656940ed5fabb4d47b12169..de6cb22f68b1fd0a17a08d7470a6d8afac02fadf 100644 (file)
@@ -1564,7 +1564,8 @@ static int mlxsw_sx_basic_trap_groups_set(struct mlxsw_core *mlxsw_core)
 }
 
 static int mlxsw_sx_init(struct mlxsw_core *mlxsw_core,
-                        const struct mlxsw_bus_info *mlxsw_bus_info)
+                        const struct mlxsw_bus_info *mlxsw_bus_info,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sx *mlxsw_sx = mlxsw_core_driver_priv(mlxsw_core);
        int err;