net/mlx5: Move fw reset devlink param to fw reset code
authorJiri Pirko <jiri@nvidia.com>
Thu, 26 Jan 2023 07:58:36 +0000 (08:58 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Jan 2023 12:32:02 +0000 (12:32 +0000)
Move the param registration and handling code into the fw reset code
as they are related to each other. No point in having the devlink param
registration done in separate file.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.h

index ed4b79aeecd170ebe3130d115439d4250e534140..8bda15dda0d7622969cdf7c420a5c036697213f1 100644 (file)
@@ -541,24 +541,6 @@ static int mlx5_devlink_esw_port_metadata_validate(struct devlink *devlink, u32
 
 #endif
 
-static int mlx5_devlink_enable_remote_dev_reset_set(struct devlink *devlink, u32 id,
-                                                   struct devlink_param_gset_ctx *ctx)
-{
-       struct mlx5_core_dev *dev = devlink_priv(devlink);
-
-       mlx5_fw_reset_enable_remote_dev_reset_set(dev, ctx->val.vbool);
-       return 0;
-}
-
-static int mlx5_devlink_enable_remote_dev_reset_get(struct devlink *devlink, u32 id,
-                                                   struct devlink_param_gset_ctx *ctx)
-{
-       struct mlx5_core_dev *dev = devlink_priv(devlink);
-
-       ctx->val.vbool = mlx5_fw_reset_enable_remote_dev_reset_get(dev);
-       return 0;
-}
-
 static int mlx5_devlink_eq_depth_validate(struct devlink *devlink, u32 id,
                                          union devlink_param_value val,
                                          struct netlink_ext_ack *extack)
@@ -587,9 +569,6 @@ static const struct devlink_param mlx5_devlink_params[] = {
                             mlx5_devlink_esw_port_metadata_set,
                             mlx5_devlink_esw_port_metadata_validate),
 #endif
-       DEVLINK_PARAM_GENERIC(ENABLE_REMOTE_DEV_RESET, BIT(DEVLINK_PARAM_CMODE_RUNTIME),
-                             mlx5_devlink_enable_remote_dev_reset_get,
-                             mlx5_devlink_enable_remote_dev_reset_set, NULL),
        DEVLINK_PARAM_GENERIC(IO_EQ_SIZE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
                              NULL, NULL, mlx5_devlink_eq_depth_validate),
        DEVLINK_PARAM_GENERIC(EVENT_EQ_SIZE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
index 1e46f9afa40e0fd2370a700ae3b73dc45d28660b..1da4da564e6d8fb2ed904606a17ae1027f05d19f 100644 (file)
@@ -1,6 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
 /* Copyright (c) 2020, Mellanox Technologies inc.  All rights reserved. */
 
+#include <devlink.h>
+
 #include "fw_reset.h"
 #include "diag/fw_tracer.h"
 #include "lib/tout.h"
@@ -28,21 +30,32 @@ struct mlx5_fw_reset {
        int ret;
 };
 
-void mlx5_fw_reset_enable_remote_dev_reset_set(struct mlx5_core_dev *dev, bool enable)
+static int mlx5_fw_reset_enable_remote_dev_reset_set(struct devlink *devlink, u32 id,
+                                                    struct devlink_param_gset_ctx *ctx)
 {
-       struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset;
+       struct mlx5_core_dev *dev = devlink_priv(devlink);
+       struct mlx5_fw_reset *fw_reset;
 
-       if (enable)
+       fw_reset = dev->priv.fw_reset;
+
+       if (ctx->val.vbool)
                clear_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags);
        else
                set_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags);
+       return 0;
 }
 
-bool mlx5_fw_reset_enable_remote_dev_reset_get(struct mlx5_core_dev *dev)
+static int mlx5_fw_reset_enable_remote_dev_reset_get(struct devlink *devlink, u32 id,
+                                                    struct devlink_param_gset_ctx *ctx)
 {
-       struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset;
+       struct mlx5_core_dev *dev = devlink_priv(devlink);
+       struct mlx5_fw_reset *fw_reset;
+
+       fw_reset = dev->priv.fw_reset;
 
-       return !test_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags);
+       ctx->val.vbool = !test_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST,
+                                  &fw_reset->reset_flags);
+       return 0;
 }
 
 static int mlx5_reg_mfrl_set(struct mlx5_core_dev *dev, u8 reset_level,
@@ -517,9 +530,16 @@ void mlx5_drain_fw_reset(struct mlx5_core_dev *dev)
        cancel_work_sync(&fw_reset->reset_abort_work);
 }
 
+static const struct devlink_param mlx5_fw_reset_devlink_params[] = {
+       DEVLINK_PARAM_GENERIC(ENABLE_REMOTE_DEV_RESET, BIT(DEVLINK_PARAM_CMODE_RUNTIME),
+                             mlx5_fw_reset_enable_remote_dev_reset_get,
+                             mlx5_fw_reset_enable_remote_dev_reset_set, NULL),
+};
+
 int mlx5_fw_reset_init(struct mlx5_core_dev *dev)
 {
        struct mlx5_fw_reset *fw_reset = kzalloc(sizeof(*fw_reset), GFP_KERNEL);
+       int err;
 
        if (!fw_reset)
                return -ENOMEM;
@@ -532,6 +552,15 @@ int mlx5_fw_reset_init(struct mlx5_core_dev *dev)
        fw_reset->dev = dev;
        dev->priv.fw_reset = fw_reset;
 
+       err = devl_params_register(priv_to_devlink(dev),
+                                  mlx5_fw_reset_devlink_params,
+                                  ARRAY_SIZE(mlx5_fw_reset_devlink_params));
+       if (err) {
+               destroy_workqueue(fw_reset->wq);
+               kfree(fw_reset);
+               return err;
+       }
+
        INIT_WORK(&fw_reset->fw_live_patch_work, mlx5_fw_live_patch_event);
        INIT_WORK(&fw_reset->reset_request_work, mlx5_sync_reset_request_event);
        INIT_WORK(&fw_reset->reset_reload_work, mlx5_sync_reset_reload_work);
@@ -546,6 +575,9 @@ void mlx5_fw_reset_cleanup(struct mlx5_core_dev *dev)
 {
        struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset;
 
+       devl_params_unregister(priv_to_devlink(dev),
+                              mlx5_fw_reset_devlink_params,
+                              ARRAY_SIZE(mlx5_fw_reset_devlink_params));
        destroy_workqueue(fw_reset->wq);
        kfree(dev->priv.fw_reset);
 }
index dc141c7e641a307b9579c1509a650538c7371c06..c57465595f7c83f8b147e3d0f088189e01531b9c 100644 (file)
@@ -6,8 +6,6 @@
 
 #include "mlx5_core.h"
 
-void mlx5_fw_reset_enable_remote_dev_reset_set(struct mlx5_core_dev *dev, bool enable);
-bool mlx5_fw_reset_enable_remote_dev_reset_get(struct mlx5_core_dev *dev);
 int mlx5_fw_reset_query(struct mlx5_core_dev *dev, u8 *reset_level, u8 *reset_type);
 int mlx5_fw_reset_set_reset_sync(struct mlx5_core_dev *dev, u8 reset_type_sel,
                                 struct netlink_ext_ack *extack);