]> Git Repo - linux.git/commitdiff
devlink: protect devlink param list by instance lock
authorJiri Pirko <[email protected]>
Thu, 26 Jan 2023 07:58:35 +0000 (08:58 +0100)
committerDavid S. Miller <[email protected]>
Fri, 27 Jan 2023 12:32:02 +0000 (12:32 +0000)
Commit 1d18bb1a4ddd ("devlink: allow registering parameters after
the instance") as the subject implies introduced possibility to register
devlink params even for already registered devlink instance. This is a
bit problematic, as the consistency or params list was originally
secured by the fact it is static during devlink lifetime. So in order to
protect the params list, take devlink instance lock during the params
operations. Introduce unlocked function variants and use them in drivers
in locked context. Put lock assertions to appropriate places.

Signed-off-by: Jiri Pirko <[email protected]>
Reviewed-by: Jakub Kicinski <[email protected]>
Reviewed-by: Jacob Keller <[email protected]>
Reviewed-by: Ido Schimmel <[email protected]>
Reviewed-by: Simon Horman <[email protected]>
Tested-by: Simon Horman <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
13 files changed:
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx5/core/dev.c
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
drivers/net/ethernet/mellanox/mlx5/core/eq.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/netronome/nfp/devlink_param.c
drivers/net/ethernet/netronome/nfp/nfp_net_main.c
drivers/net/netdevsim/dev.c
include/net/devlink.h
net/devlink/leftover.c

index 3ae246391549e7e84abf17840e86c20a05659225..6152f77dcfd8901133030749af755435271d1e01 100644 (file)
@@ -265,29 +265,29 @@ static void mlx4_devlink_set_params_init_values(struct devlink *devlink)
        union devlink_param_value value;
 
        value.vbool = !!mlx4_internal_err_reset;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET,
+                                       value);
 
        value.vu32 = 1UL << log_num_mac;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                       value);
 
        value.vbool = enable_64b_cqe_eqe;
-       devlink_param_driverinit_value_set(devlink,
-                                          MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE,
+                                       value);
 
        value.vbool = enable_4k_uar;
-       devlink_param_driverinit_value_set(devlink,
-                                          MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
+                                       value);
 
        value.vbool = false;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
+                                       value);
 }
 
 static inline void mlx4_set_num_reserved_uars(struct mlx4_dev *dev,
@@ -3910,37 +3910,37 @@ static void mlx4_devlink_param_load_driverinit_values(struct devlink *devlink)
        union devlink_param_value saved_value;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET,
+                                             &saved_value);
        if (!err && mlx4_internal_err_reset != saved_value.vbool) {
                mlx4_internal_err_reset = saved_value.vbool;
                /* Notify on value changed on runtime configuration mode */
-               devlink_param_value_changed(devlink,
-                                           DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET);
+               devl_param_value_changed(devlink,
+                                        DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET);
        }
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                             &saved_value);
        if (!err)
                log_num_mac = order_base_2(saved_value.vu32);
-       err = devlink_param_driverinit_value_get(devlink,
-                                                MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE,
+                                             &saved_value);
        if (!err)
                enable_64b_cqe_eqe = saved_value.vbool;
-       err = devlink_param_driverinit_value_get(devlink,
-                                                MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
+                                             &saved_value);
        if (!err)
                enable_4k_uar = saved_value.vbool;
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
+                                             &saved_value);
        if (!err && crdump->snapshot_enable != saved_value.vbool) {
                crdump->snapshot_enable = saved_value.vbool;
-               devlink_param_value_changed(devlink,
-                                           DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT);
+               devl_param_value_changed(devlink,
+                                        DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT);
        }
 }
 
@@ -4021,8 +4021,8 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
        mutex_init(&dev->persist->interface_state_mutex);
        mutex_init(&dev->persist->pci_status_mutex);
 
-       ret = devlink_params_register(devlink, mlx4_devlink_params,
-                                     ARRAY_SIZE(mlx4_devlink_params));
+       ret = devl_params_register(devlink, mlx4_devlink_params,
+                                  ARRAY_SIZE(mlx4_devlink_params));
        if (ret)
                goto err_devlink_unregister;
        mlx4_devlink_set_params_init_values(devlink);
@@ -4037,8 +4037,8 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
        return 0;
 
 err_params_unregister:
-       devlink_params_unregister(devlink, mlx4_devlink_params,
-                                 ARRAY_SIZE(mlx4_devlink_params));
+       devl_params_unregister(devlink, mlx4_devlink_params,
+                              ARRAY_SIZE(mlx4_devlink_params));
 err_devlink_unregister:
        kfree(dev->persist);
 err_devlink_free:
@@ -4181,8 +4181,8 @@ static void mlx4_remove_one(struct pci_dev *pdev)
 
        pci_release_regions(pdev);
        mlx4_pci_disable_device(dev);
-       devlink_params_unregister(devlink, mlx4_devlink_params,
-                                 ARRAY_SIZE(mlx4_devlink_params));
+       devl_params_unregister(devlink, mlx4_devlink_params,
+                              ARRAY_SIZE(mlx4_devlink_params));
        kfree(dev->persist);
        devl_unlock(devlink);
        devlink_free(devlink);
index 2b444fb1238830126816e134f0113d84f3102231..17ae9b4ec7944e8e0830892f223199d9534bd032 100644 (file)
@@ -114,9 +114,9 @@ static bool is_eth_enabled(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(priv_to_devlink(dev),
-                                                DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
-                                                &val);
+       err = devl_param_driverinit_value_get(priv_to_devlink(dev),
+                                             DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
+                                             &val);
        return err ? false : val.vbool;
 }
 
@@ -147,9 +147,9 @@ static bool is_vnet_enabled(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(priv_to_devlink(dev),
-                                                DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
-                                                &val);
+       err = devl_param_driverinit_value_get(priv_to_devlink(dev),
+                                             DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
+                                             &val);
        return err ? false : val.vbool;
 }
 
@@ -221,9 +221,9 @@ static bool is_ib_enabled(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(priv_to_devlink(dev),
-                                                DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
-                                                &val);
+       err = devl_param_driverinit_value_get(priv_to_devlink(dev),
+                                             DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
+                                             &val);
        return err ? false : val.vbool;
 }
 
index 2d2fcb518172bafe19938a3fa0cef8b51aec11a0..ed4b79aeecd170ebe3130d115439d4250e534140 100644 (file)
@@ -602,26 +602,26 @@ static void mlx5_devlink_set_params_init_values(struct devlink *devlink)
        union devlink_param_value value;
 
        value.vbool = MLX5_CAP_GEN(dev, roce);
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
+                                       value);
 
 #ifdef CONFIG_MLX5_ESWITCH
        value.vu32 = ESW_OFFLOADS_DEFAULT_NUM_GROUPS;
-       devlink_param_driverinit_value_set(devlink,
-                                          MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM,
+                                       value);
 #endif
 
        value.vu32 = MLX5_COMP_EQ_SIZE;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE,
+                                       value);
 
        value.vu32 = MLX5_NUM_ASYNC_EQE;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE,
+                                       value);
 }
 
 static const struct devlink_param mlx5_devlink_eth_params[] = {
@@ -638,15 +638,15 @@ static int mlx5_devlink_eth_params_register(struct devlink *devlink)
        if (!mlx5_eth_supported(dev))
                return 0;
 
-       err = devlink_params_register(devlink, mlx5_devlink_eth_params,
-                                     ARRAY_SIZE(mlx5_devlink_eth_params));
+       err = devl_params_register(devlink, mlx5_devlink_eth_params,
+                                  ARRAY_SIZE(mlx5_devlink_eth_params));
        if (err)
                return err;
 
        value.vbool = true;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
+                                       value);
        return 0;
 }
 
@@ -657,8 +657,8 @@ static void mlx5_devlink_eth_params_unregister(struct devlink *devlink)
        if (!mlx5_eth_supported(dev))
                return;
 
-       devlink_params_unregister(devlink, mlx5_devlink_eth_params,
-                                 ARRAY_SIZE(mlx5_devlink_eth_params));
+       devl_params_unregister(devlink, mlx5_devlink_eth_params,
+                              ARRAY_SIZE(mlx5_devlink_eth_params));
 }
 
 static int mlx5_devlink_enable_rdma_validate(struct devlink *devlink, u32 id,
@@ -686,15 +686,15 @@ static int mlx5_devlink_rdma_params_register(struct devlink *devlink)
        if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND))
                return 0;
 
-       err = devlink_params_register(devlink, mlx5_devlink_rdma_params,
-                                     ARRAY_SIZE(mlx5_devlink_rdma_params));
+       err = devl_params_register(devlink, mlx5_devlink_rdma_params,
+                                  ARRAY_SIZE(mlx5_devlink_rdma_params));
        if (err)
                return err;
 
        value.vbool = true;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
+                                       value);
        return 0;
 }
 
@@ -703,8 +703,8 @@ static void mlx5_devlink_rdma_params_unregister(struct devlink *devlink)
        if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND))
                return;
 
-       devlink_params_unregister(devlink, mlx5_devlink_rdma_params,
-                                 ARRAY_SIZE(mlx5_devlink_rdma_params));
+       devl_params_unregister(devlink, mlx5_devlink_rdma_params,
+                              ARRAY_SIZE(mlx5_devlink_rdma_params));
 }
 
 static const struct devlink_param mlx5_devlink_vnet_params[] = {
@@ -721,15 +721,15 @@ static int mlx5_devlink_vnet_params_register(struct devlink *devlink)
        if (!mlx5_vnet_supported(dev))
                return 0;
 
-       err = devlink_params_register(devlink, mlx5_devlink_vnet_params,
-                                     ARRAY_SIZE(mlx5_devlink_vnet_params));
+       err = devl_params_register(devlink, mlx5_devlink_vnet_params,
+                                  ARRAY_SIZE(mlx5_devlink_vnet_params));
        if (err)
                return err;
 
        value.vbool = true;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
+                                       value);
        return 0;
 }
 
@@ -740,8 +740,8 @@ static void mlx5_devlink_vnet_params_unregister(struct devlink *devlink)
        if (!mlx5_vnet_supported(dev))
                return;
 
-       devlink_params_unregister(devlink, mlx5_devlink_vnet_params,
-                                 ARRAY_SIZE(mlx5_devlink_vnet_params));
+       devl_params_unregister(devlink, mlx5_devlink_vnet_params,
+                              ARRAY_SIZE(mlx5_devlink_vnet_params));
 }
 
 static int mlx5_devlink_auxdev_params_register(struct devlink *devlink)
@@ -814,15 +814,15 @@ static int mlx5_devlink_max_uc_list_params_register(struct devlink *devlink)
        if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported))
                return 0;
 
-       err = devlink_params_register(devlink, mlx5_devlink_max_uc_list_params,
-                                     ARRAY_SIZE(mlx5_devlink_max_uc_list_params));
+       err = devl_params_register(devlink, mlx5_devlink_max_uc_list_params,
+                                  ARRAY_SIZE(mlx5_devlink_max_uc_list_params));
        if (err)
                return err;
 
        value.vu32 = 1 << MLX5_CAP_GEN(dev, log_max_current_uc_list);
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                       value);
        return 0;
 }
 
@@ -834,8 +834,8 @@ mlx5_devlink_max_uc_list_params_unregister(struct devlink *devlink)
        if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported))
                return;
 
-       devlink_params_unregister(devlink, mlx5_devlink_max_uc_list_params,
-                                 ARRAY_SIZE(mlx5_devlink_max_uc_list_params));
+       devl_params_unregister(devlink, mlx5_devlink_max_uc_list_params,
+                              ARRAY_SIZE(mlx5_devlink_max_uc_list_params));
 }
 
 #define MLX5_TRAP_DROP(_id, _group_id)                                 \
@@ -886,8 +886,8 @@ int mlx5_devlink_params_register(struct devlink *devlink)
        struct mlx5_core_dev *dev = devlink_priv(devlink);
        int err;
 
-       err = devlink_params_register(devlink, mlx5_devlink_params,
-                                     ARRAY_SIZE(mlx5_devlink_params));
+       err = devl_params_register(devlink, mlx5_devlink_params,
+                                  ARRAY_SIZE(mlx5_devlink_params));
        if (err)
                return err;
 
@@ -909,8 +909,8 @@ int mlx5_devlink_params_register(struct devlink *devlink)
 max_uc_list_err:
        mlx5_devlink_auxdev_params_unregister(devlink);
 auxdev_reg_err:
-       devlink_params_unregister(devlink, mlx5_devlink_params,
-                                 ARRAY_SIZE(mlx5_devlink_params));
+       devl_params_unregister(devlink, mlx5_devlink_params,
+                              ARRAY_SIZE(mlx5_devlink_params));
        return err;
 }
 
@@ -918,6 +918,6 @@ void mlx5_devlink_params_unregister(struct devlink *devlink)
 {
        mlx5_devlink_max_uc_list_params_unregister(devlink);
        mlx5_devlink_auxdev_params_unregister(devlink);
-       devlink_params_unregister(devlink, mlx5_devlink_params,
-                                 ARRAY_SIZE(mlx5_devlink_params));
+       devl_params_unregister(devlink, mlx5_devlink_params,
+                              ARRAY_SIZE(mlx5_devlink_params));
 }
index 8f7580fec1937d498f348d651bdd200d33a26148..9b44557e7271bc54343571055a7df95927b609f6 100644 (file)
@@ -629,9 +629,9 @@ static u16 async_eq_depth_devlink_param_get(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE,
-                                                &val);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE,
+                                             &val);
        if (!err)
                return val.vu32;
        mlx5_core_dbg(dev, "Failed to get param. using default. err = %d\n", err);
@@ -874,9 +874,9 @@ static u16 comp_eq_depth_devlink_param_get(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE,
-                                                &val);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE,
+                                             &val);
        if (!err)
                return val.vu32;
        mlx5_core_dbg(dev, "Failed to get param. using default. err = %d\n", err);
index d809c919249669fa793949618793141b8acc37f3..0be01d702049de1c6b492788bac871e468258d45 100644 (file)
@@ -1190,9 +1190,9 @@ static void mlx5_eswitch_get_devlink_param(struct mlx5_eswitch *esw)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM,
-                                                &val);
+       err = devl_param_driverinit_value_get(devlink,
+                                             MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM,
+                                             &val);
        if (!err) {
                esw->params.large_group_num = val.vu32;
        } else {
index 65cd6c393c0a4e696e78f301a945470384308d39..8823f20d2122b891530116d1b746fcc21e51deff 100644 (file)
@@ -484,9 +484,9 @@ static int max_uc_list_get_devlink_param(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                                &val);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                             &val);
        if (!err)
                return val.vu32;
        mlx5_core_dbg(dev, "Failed to get param. err = %d\n", err);
@@ -499,9 +499,9 @@ bool mlx5_is_roce_on(struct mlx5_core_dev *dev)
        union devlink_param_value val;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
-                                                &val);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
+                                             &val);
 
        if (!err)
                return val.vbool;
index f952a6518ba9ef35e978c3fb3774862b3aaf54ce..f8623e8388c8c6d28fd9d96b3c732ad6e1f9a4bc 100644 (file)
@@ -1243,9 +1243,9 @@ static int mlxsw_core_fw_rev_validate(struct mlxsw_core *mlxsw_core,
                return 0;
 
        /* Don't check if devlink 'fw_load_policy' param is 'flash' */
-       err = devlink_param_driverinit_value_get(priv_to_devlink(mlxsw_core),
-                                                DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
-                                                &value);
+       err = devl_param_driverinit_value_get(priv_to_devlink(mlxsw_core),
+                                             DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
+                                             &value);
        if (err)
                return err;
        if (value.vu8 == DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH)
@@ -1316,20 +1316,22 @@ static int mlxsw_core_fw_params_register(struct mlxsw_core *mlxsw_core)
        union devlink_param_value value;
        int err;
 
-       err = devlink_params_register(devlink, mlxsw_core_fw_devlink_params,
-                                     ARRAY_SIZE(mlxsw_core_fw_devlink_params));
+       err = devl_params_register(devlink, mlxsw_core_fw_devlink_params,
+                                  ARRAY_SIZE(mlxsw_core_fw_devlink_params));
        if (err)
                return err;
 
        value.vu8 = DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER;
-       devlink_param_driverinit_value_set(devlink, DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
+                                       value);
        return 0;
 }
 
 static void mlxsw_core_fw_params_unregister(struct mlxsw_core *mlxsw_core)
 {
-       devlink_params_unregister(priv_to_devlink(mlxsw_core), mlxsw_core_fw_devlink_params,
-                                 ARRAY_SIZE(mlxsw_core_fw_devlink_params));
+       devl_params_unregister(priv_to_devlink(mlxsw_core), mlxsw_core_fw_devlink_params,
+                              ARRAY_SIZE(mlxsw_core_fw_devlink_params));
 }
 
 static void *__dl_port(struct devlink_port *devlink_port)
index 3d15d3387aa2d76b72f99499e7d2ed6150ada5c7..b0bdb9640ebf93a1f1dd5c5e63175f1aa4a277ba 100644 (file)
@@ -3898,23 +3898,23 @@ static int mlxsw_sp2_params_register(struct mlxsw_core *mlxsw_core)
        union devlink_param_value value;
        int err;
 
-       err = devlink_params_register(devlink, mlxsw_sp2_devlink_params,
-                                     ARRAY_SIZE(mlxsw_sp2_devlink_params));
+       err = devl_params_register(devlink, mlxsw_sp2_devlink_params,
+                                  ARRAY_SIZE(mlxsw_sp2_devlink_params));
        if (err)
                return err;
 
        value.vu32 = 0;
-       devlink_param_driverinit_value_set(devlink,
-                                          MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL,
+                                       value);
        return 0;
 }
 
 static void mlxsw_sp2_params_unregister(struct mlxsw_core *mlxsw_core)
 {
-       devlink_params_unregister(priv_to_devlink(mlxsw_core),
-                                 mlxsw_sp2_devlink_params,
-                                 ARRAY_SIZE(mlxsw_sp2_devlink_params));
+       devl_params_unregister(priv_to_devlink(mlxsw_core),
+                              mlxsw_sp2_devlink_params,
+                              ARRAY_SIZE(mlxsw_sp2_devlink_params));
 }
 
 static void mlxsw_sp_ptp_transmitted(struct mlxsw_core *mlxsw_core,
index db297ee4d7ad1002d9e54b76b24e02a6c1e998ab..a655f9e69a7b1eb9d5aa14dfb87790ce8ecb330c 100644 (file)
@@ -233,8 +233,8 @@ int nfp_devlink_params_register(struct nfp_pf *pf)
        if (err <= 0)
                return err;
 
-       return devlink_params_register(devlink, nfp_devlink_params,
-                                      ARRAY_SIZE(nfp_devlink_params));
+       return devl_params_register(devlink, nfp_devlink_params,
+                                   ARRAY_SIZE(nfp_devlink_params));
 }
 
 void nfp_devlink_params_unregister(struct nfp_pf *pf)
@@ -245,6 +245,6 @@ void nfp_devlink_params_unregister(struct nfp_pf *pf)
        if (err <= 0)
                return;
 
-       devlink_params_unregister(priv_to_devlink(pf), nfp_devlink_params,
-                                 ARRAY_SIZE(nfp_devlink_params));
+       devl_params_unregister(priv_to_devlink(pf), nfp_devlink_params,
+                              ARRAY_SIZE(nfp_devlink_params));
 }
index abfe788d558f5396f4b07332cde4cbf05b123559..cbe4972ba104ba0e4368d8c901618fa574dbf738 100644 (file)
@@ -754,11 +754,11 @@ int nfp_net_pci_probe(struct nfp_pf *pf)
        if (err)
                goto err_devlink_unreg;
 
+       devl_lock(devlink);
        err = nfp_devlink_params_register(pf);
        if (err)
                goto err_shared_buf_unreg;
 
-       devl_lock(devlink);
        pf->ddir = nfp_net_debugfs_device_add(pf->pdev);
 
        /* Allocate the vnics and do basic init */
@@ -791,9 +791,9 @@ err_free_vnics:
        nfp_net_pf_free_vnics(pf);
 err_clean_ddir:
        nfp_net_debugfs_dir_clean(&pf->ddir);
-       devl_unlock(devlink);
        nfp_devlink_params_unregister(pf);
 err_shared_buf_unreg:
+       devl_unlock(devlink);
        nfp_shared_buf_unregister(pf);
 err_devlink_unreg:
        cancel_work_sync(&pf->port_refresh_work);
@@ -821,9 +821,10 @@ void nfp_net_pci_remove(struct nfp_pf *pf)
        /* stop app first, to avoid double free of ctrl vNIC's ddir */
        nfp_net_debugfs_dir_clean(&pf->ddir);
 
+       nfp_devlink_params_unregister(pf);
+
        devl_unlock(devlink);
 
-       nfp_devlink_params_unregister(pf);
        nfp_shared_buf_unregister(pf);
 
        nfp_net_pf_free_irqs(pf);
index 738784fda117eefc3eb70d13437ae259aa5ab880..f88095b0f836ee51cbf28179839a9ed088da5d70 100644 (file)
@@ -527,13 +527,13 @@ static void nsim_devlink_set_params_init_values(struct nsim_dev *nsim_dev,
        union devlink_param_value value;
 
        value.vu32 = nsim_dev->max_macs;
-       devlink_param_driverinit_value_set(devlink,
-                                          DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                       value);
        value.vbool = nsim_dev->test1;
-       devlink_param_driverinit_value_set(devlink,
-                                          NSIM_DEVLINK_PARAM_ID_TEST1,
-                                          value);
+       devl_param_driverinit_value_set(devlink,
+                                       NSIM_DEVLINK_PARAM_ID_TEST1,
+                                       value);
 }
 
 static void nsim_devlink_param_load_driverinit_values(struct devlink *devlink)
@@ -542,14 +542,14 @@ static void nsim_devlink_param_load_driverinit_values(struct devlink *devlink)
        union devlink_param_value saved_value;
        int err;
 
-       err = devlink_param_driverinit_value_get(devlink,
-                                                DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
+                                             &saved_value);
        if (!err)
                nsim_dev->max_macs = saved_value.vu32;
-       err = devlink_param_driverinit_value_get(devlink,
-                                                NSIM_DEVLINK_PARAM_ID_TEST1,
-                                                &saved_value);
+       err = devl_param_driverinit_value_get(devlink,
+                                             NSIM_DEVLINK_PARAM_ID_TEST1,
+                                             &saved_value);
        if (!err)
                nsim_dev->test1 = saved_value.vbool;
 }
@@ -1564,8 +1564,8 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
        if (err)
                goto err_dl_unregister;
 
-       err = devlink_params_register(devlink, nsim_devlink_params,
-                                     ARRAY_SIZE(nsim_devlink_params));
+       err = devl_params_register(devlink, nsim_devlink_params,
+                                  ARRAY_SIZE(nsim_devlink_params));
        if (err)
                goto err_resource_unregister;
        nsim_devlink_set_params_init_values(nsim_dev, devlink);
@@ -1630,8 +1630,8 @@ err_traps_exit:
 err_dummy_region_exit:
        nsim_dev_dummy_region_exit(nsim_dev);
 err_params_unregister:
-       devlink_params_unregister(devlink, nsim_devlink_params,
-                                 ARRAY_SIZE(nsim_devlink_params));
+       devl_params_unregister(devlink, nsim_devlink_params,
+                              ARRAY_SIZE(nsim_devlink_params));
 err_resource_unregister:
        devl_resources_unregister(devlink);
 err_dl_unregister:
@@ -1678,8 +1678,8 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev)
 
        nsim_bpf_dev_exit(nsim_dev);
        nsim_dev_debugfs_exit(nsim_dev);
-       devlink_params_unregister(devlink, nsim_devlink_params,
-                                 ARRAY_SIZE(nsim_devlink_params));
+       devl_params_unregister(devlink, nsim_devlink_params,
+                              ARRAY_SIZE(nsim_devlink_params));
        devl_resources_unregister(devlink);
        devl_unregister(devlink);
        kfree(nsim_dev->vfconfigs);
index e0d773dfa637fab1ee08ce6ab08d337a8cf3f242..ab654cf552b86f270e35ee8853f8345d8fec4eb9 100644 (file)
@@ -1767,17 +1767,23 @@ void devl_resource_occ_get_unregister(struct devlink *devlink,
 
 void devlink_resource_occ_get_unregister(struct devlink *devlink,
                                         u64 resource_id);
+int devl_params_register(struct devlink *devlink,
+                        const struct devlink_param *params,
+                        size_t params_count);
 int devlink_params_register(struct devlink *devlink,
                            const struct devlink_param *params,
                            size_t params_count);
+void devl_params_unregister(struct devlink *devlink,
+                           const struct devlink_param *params,
+                           size_t params_count);
 void devlink_params_unregister(struct devlink *devlink,
                               const struct devlink_param *params,
                               size_t params_count);
-int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
-                                      union devlink_param_value *init_val);
-void devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
-                                       union devlink_param_value init_val);
-void devlink_param_value_changed(struct devlink *devlink, u32 param_id);
+int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
+                                   union devlink_param_value *init_val);
+void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
+                                    union devlink_param_value init_val);
+void devl_param_value_changed(struct devlink *devlink, u32 param_id);
 struct devlink_region *devl_region_create(struct devlink *devlink,
                                          const struct devlink_region_ops *ops,
                                          u32 region_max_snapshots,
index 512ed4ccbdc71a959233f79e51431cd1194b07af..bd4c5d2dd61221473986185055dc15486ebfb5f0 100644 (file)
@@ -10832,7 +10832,7 @@ static void devlink_param_unregister(struct devlink *devlink,
 }
 
 /**
- *     devlink_params_register - register configuration parameters
+ *     devl_params_register - register configuration parameters
  *
  *     @devlink: devlink
  *     @params: configuration parameters array
@@ -10840,13 +10840,15 @@ static void devlink_param_unregister(struct devlink *devlink,
  *
  *     Register the configuration parameters supported by the driver.
  */
-int devlink_params_register(struct devlink *devlink,
-                           const struct devlink_param *params,
-                           size_t params_count)
+int devl_params_register(struct devlink *devlink,
+                        const struct devlink_param *params,
+                        size_t params_count)
 {
        const struct devlink_param *param = params;
        int i, err;
 
+       lockdep_assert_held(&devlink->lock);
+
        for (i = 0; i < params_count; i++, param++) {
                err = devlink_param_register(devlink, param);
                if (err)
@@ -10862,29 +10864,54 @@ rollback:
                devlink_param_unregister(devlink, param);
        return err;
 }
+EXPORT_SYMBOL_GPL(devl_params_register);
+
+int devlink_params_register(struct devlink *devlink,
+                           const struct devlink_param *params,
+                           size_t params_count)
+{
+       int err;
+
+       devl_lock(devlink);
+       err = devl_params_register(devlink, params, params_count);
+       devl_unlock(devlink);
+       return err;
+}
 EXPORT_SYMBOL_GPL(devlink_params_register);
 
 /**
- *     devlink_params_unregister - unregister configuration parameters
+ *     devl_params_unregister - unregister configuration parameters
  *     @devlink: devlink
  *     @params: configuration parameters to unregister
  *     @params_count: number of parameters provided
  */
-void devlink_params_unregister(struct devlink *devlink,
-                              const struct devlink_param *params,
-                              size_t params_count)
+void devl_params_unregister(struct devlink *devlink,
+                           const struct devlink_param *params,
+                           size_t params_count)
 {
        const struct devlink_param *param = params;
        int i;
 
+       lockdep_assert_held(&devlink->lock);
+
        for (i = 0; i < params_count; i++, param++)
                devlink_param_unregister(devlink, param);
 }
+EXPORT_SYMBOL_GPL(devl_params_unregister);
+
+void devlink_params_unregister(struct devlink *devlink,
+                              const struct devlink_param *params,
+                              size_t params_count)
+{
+       devl_lock(devlink);
+       devl_params_unregister(devlink, params, params_count);
+       devl_unlock(devlink);
+}
 EXPORT_SYMBOL_GPL(devlink_params_unregister);
 
 /**
- *     devlink_param_driverinit_value_get - get configuration parameter
- *                                          value for driver initializing
+ *     devl_param_driverinit_value_get - get configuration parameter
+ *                                       value for driver initializing
  *
  *     @devlink: devlink
  *     @param_id: parameter ID
@@ -10893,11 +10920,13 @@ EXPORT_SYMBOL_GPL(devlink_params_unregister);
  *     This function should be used by the driver to get driverinit
  *     configuration for initialization after reload command.
  */
-int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
-                                      union devlink_param_value *init_val)
+int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
+                                   union devlink_param_value *init_val)
 {
        struct devlink_param_item *param_item;
 
+       lockdep_assert_held(&devlink->lock);
+
        if (WARN_ON(!devlink_reload_supported(devlink->ops)))
                return -EOPNOTSUPP;
 
@@ -10919,12 +10948,12 @@ int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_get);
+EXPORT_SYMBOL_GPL(devl_param_driverinit_value_get);
 
 /**
- *     devlink_param_driverinit_value_set - set value of configuration
- *                                          parameter for driverinit
- *                                          configuration mode
+ *     devl_param_driverinit_value_set - set value of configuration
+ *                                       parameter for driverinit
+ *                                       configuration mode
  *
  *     @devlink: devlink
  *     @param_id: parameter ID
@@ -10933,8 +10962,8 @@ EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_get);
  *     This function should be used by the driver to set driverinit
  *     configuration mode default value.
  */
-void devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
-                                       union devlink_param_value init_val)
+void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
+                                    union devlink_param_value init_val)
 {
        struct devlink_param_item *param_item;
 
@@ -10954,12 +10983,12 @@ void devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
 
        devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW);
 }
-EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_set);
+EXPORT_SYMBOL_GPL(devl_param_driverinit_value_set);
 
 /**
- *     devlink_param_value_changed - notify devlink on a parameter's value
- *                                   change. Should be called by the driver
- *                                   right after the change.
+ *     devl_param_value_changed - notify devlink on a parameter's value
+ *                                change. Should be called by the driver
+ *                                right after the change.
  *
  *     @devlink: devlink
  *     @param_id: parameter ID
@@ -10968,7 +10997,7 @@ EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_set);
  *     change, excluding driverinit configuration mode.
  *     For driverinit configuration mode driver should use the function
  */
-void devlink_param_value_changed(struct devlink *devlink, u32 param_id)
+void devl_param_value_changed(struct devlink *devlink, u32 param_id)
 {
        struct devlink_param_item *param_item;
 
@@ -10977,7 +11006,7 @@ void devlink_param_value_changed(struct devlink *devlink, u32 param_id)
 
        devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW);
 }
-EXPORT_SYMBOL_GPL(devlink_param_value_changed);
+EXPORT_SYMBOL_GPL(devl_param_value_changed);
 
 /**
  * devl_region_create - create a new address region
This page took 0.121505 seconds and 4 git commands to generate.