Commit c2ea5520 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'devlink-parama-cleanup'



Jiri Pirko says:

====================
devlink: Cleanup params usage

This patchset takes care of small cleanup of devlink params usage.
Some of the patches (first 2/3) are cosmetic, but I would like to
point couple of interesting ones:

Patch 9 is the main one of this set and introduces devlink instance
locking for params, similar to other devlink objects. That allows params
to be registered/unregistered when devlink instance is registered.

Patches 10-12 change mlx5 code to register non-driverinit params in the
code they are related to, and thanks to patch 8 this might be when
devlink instance is registered - for example during devlink reload.

---
v1->v2:
- Just small fix in the last patch
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 86e99b5b d2a651ef
Loading
Loading
Loading
Loading
+2 −18
Original line number Diff line number Diff line
@@ -1411,25 +1411,9 @@ ice_devlink_set_switch_id(struct ice_pf *pf, struct netdev_phys_item_id *ppid)
int ice_devlink_register_params(struct ice_pf *pf)
{
	struct devlink *devlink = priv_to_devlink(pf);
	union devlink_param_value value;
	int err;

	err = devlink_params_register(devlink, ice_devlink_params,
	return devlink_params_register(devlink, ice_devlink_params,
				       ARRAY_SIZE(ice_devlink_params));
	if (err)
		return err;

	value.vbool = false;
	devlink_param_driverinit_value_set(devlink,
					   DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP,
					   value);

	value.vbool = test_bit(ICE_FLAG_RDMA_ENA, pf->flags) ? true : false;
	devlink_param_driverinit_value_set(devlink,
					   DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
					   value);

	return 0;
}

void ice_devlink_unregister_params(struct ice_pf *pf)
+40 −40
Original line number Diff line number Diff line
@@ -265,27 +265,27 @@ 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,
	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,
	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,
	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,
	devl_param_driverinit_value_set(devlink,
					MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
					value);

	value.vbool = false;
	devlink_param_driverinit_value_set(devlink,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
					value);
}
@@ -3910,36 +3910,36 @@ 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,
	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,
		devl_param_value_changed(devlink,
					 DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET);
	}
	err = devlink_param_driverinit_value_get(devlink,
	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,
	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,
	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,
	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,
		devl_param_value_changed(devlink,
					 DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT);
	}
}
@@ -4021,7 +4021,7 @@ 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,
	ret = devl_params_register(devlink, mlx4_devlink_params,
				   ARRAY_SIZE(mlx4_devlink_params));
	if (ret)
		goto err_devlink_unregister;
@@ -4037,7 +4037,7 @@ 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,
	devl_params_unregister(devlink, mlx4_devlink_params,
			       ARRAY_SIZE(mlx4_devlink_params));
err_devlink_unregister:
	kfree(dev->persist);
@@ -4181,7 +4181,7 @@ 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,
	devl_params_unregister(devlink, mlx4_devlink_params,
			       ARRAY_SIZE(mlx4_devlink_params));
	kfree(dev->persist);
	devl_unlock(devlink);
+9 −9
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ 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),
	err = devl_param_driverinit_value_get(priv_to_devlink(dev),
					      DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
					      &val);
	return err ? false : val.vbool;
@@ -147,7 +147,7 @@ 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),
	err = devl_param_driverinit_value_get(priv_to_devlink(dev),
					      DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
					      &val);
	return err ? false : val.vbool;
@@ -221,7 +221,7 @@ 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),
	err = devl_param_driverinit_value_get(priv_to_devlink(dev),
					      DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
					      &val);
	return err ? false : val.vbool;
+78 −205
Original line number Diff line number Diff line
@@ -396,70 +396,6 @@ void mlx5_devlink_free(struct devlink *devlink)
	devlink_free(devlink);
}

static int mlx5_devlink_fs_mode_validate(struct devlink *devlink, u32 id,
					 union devlink_param_value val,
					 struct netlink_ext_ack *extack)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	char *value = val.vstr;
	int err = 0;

	if (!strcmp(value, "dmfs")) {
		return 0;
	} else if (!strcmp(value, "smfs")) {
		u8 eswitch_mode;
		bool smfs_cap;

		eswitch_mode = mlx5_eswitch_mode(dev);
		smfs_cap = mlx5_fs_dr_is_supported(dev);

		if (!smfs_cap) {
			err = -EOPNOTSUPP;
			NL_SET_ERR_MSG_MOD(extack,
					   "Software managed steering is not supported by current device");
		}

		else if (eswitch_mode == MLX5_ESWITCH_OFFLOADS) {
			NL_SET_ERR_MSG_MOD(extack,
					   "Software managed steering is not supported when eswitch offloads enabled.");
			err = -EOPNOTSUPP;
		}
	} else {
		NL_SET_ERR_MSG_MOD(extack,
				   "Bad parameter: supported values are [\"dmfs\", \"smfs\"]");
		err = -EINVAL;
	}

	return err;
}

static int mlx5_devlink_fs_mode_set(struct devlink *devlink, u32 id,
				    struct devlink_param_gset_ctx *ctx)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	enum mlx5_flow_steering_mode mode;

	if (!strcmp(ctx->val.vstr, "smfs"))
		mode = MLX5_FLOW_STEERING_MODE_SMFS;
	else
		mode = MLX5_FLOW_STEERING_MODE_DMFS;
	dev->priv.steering->mode = mode;

	return 0;
}

static int mlx5_devlink_fs_mode_get(struct devlink *devlink, u32 id,
				    struct devlink_param_gset_ctx *ctx)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (dev->priv.steering->mode == MLX5_FLOW_STEERING_MODE_SMFS)
		strcpy(ctx->val.vstr, "smfs");
	else
		strcpy(ctx->val.vstr, "dmfs");
	return 0;
}

static int mlx5_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
					     union devlink_param_value val,
					     struct netlink_ext_ack *extack)
@@ -496,69 +432,8 @@ static int mlx5_devlink_large_group_num_validate(struct devlink *devlink, u32 id
	return 0;
}

static int mlx5_devlink_esw_port_metadata_set(struct devlink *devlink, u32 id,
					      struct devlink_param_gset_ctx *ctx)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (!MLX5_ESWITCH_MANAGER(dev))
		return -EOPNOTSUPP;

	return mlx5_esw_offloads_vport_metadata_set(dev->priv.eswitch, ctx->val.vbool);
}

static int mlx5_devlink_esw_port_metadata_get(struct devlink *devlink, u32 id,
					      struct devlink_param_gset_ctx *ctx)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (!MLX5_ESWITCH_MANAGER(dev))
		return -EOPNOTSUPP;

	ctx->val.vbool = mlx5_eswitch_vport_match_metadata_enabled(dev->priv.eswitch);
	return 0;
}

static int mlx5_devlink_esw_port_metadata_validate(struct devlink *devlink, u32 id,
						   union devlink_param_value val,
						   struct netlink_ext_ack *extack)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	u8 esw_mode;

	if (!MLX5_ESWITCH_MANAGER(dev)) {
		NL_SET_ERR_MSG_MOD(extack, "E-Switch is unsupported");
		return -EOPNOTSUPP;
	}
	esw_mode = mlx5_eswitch_mode(dev);
	if (esw_mode == MLX5_ESWITCH_OFFLOADS) {
		NL_SET_ERR_MSG_MOD(extack,
				   "E-Switch must either disabled or non switchdev mode");
		return -EBUSY;
	}
	return 0;
}

#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)
@@ -567,11 +442,6 @@ static int mlx5_devlink_eq_depth_validate(struct devlink *devlink, u32 id,
}

static const struct devlink_param mlx5_devlink_params[] = {
	DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_FLOW_STEERING_MODE,
			     "flow_steering_mode", DEVLINK_PARAM_TYPE_STRING,
			     BIT(DEVLINK_PARAM_CMODE_RUNTIME),
			     mlx5_devlink_fs_mode_get, mlx5_devlink_fs_mode_set,
			     mlx5_devlink_fs_mode_validate),
	DEVLINK_PARAM_GENERIC(ENABLE_ROCE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			      NULL, NULL, mlx5_devlink_enable_roce_validate),
#ifdef CONFIG_MLX5_ESWITCH
@@ -580,16 +450,7 @@ static const struct devlink_param mlx5_devlink_params[] = {
			     BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			     NULL, NULL,
			     mlx5_devlink_large_group_num_validate),
	DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_ESW_PORT_METADATA,
			     "esw_port_metadata", DEVLINK_PARAM_TYPE_BOOL,
			     BIT(DEVLINK_PARAM_CMODE_RUNTIME),
			     mlx5_devlink_esw_port_metadata_get,
			     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),
@@ -602,33 +463,34 @@ 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,
	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,
	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,
	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,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE,
					value);
}

static const struct devlink_param enable_eth_param =
static const struct devlink_param mlx5_devlink_eth_params[] = {
	DEVLINK_PARAM_GENERIC(ENABLE_ETH, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			      NULL, NULL, NULL);
			      NULL, NULL, NULL),
};

static int mlx5_devlink_eth_param_register(struct devlink *devlink)
static int mlx5_devlink_eth_params_register(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	union devlink_param_value value;
@@ -637,25 +499,27 @@ static int mlx5_devlink_eth_param_register(struct devlink *devlink)
	if (!mlx5_eth_supported(dev))
		return 0;

	err = devlink_param_register(devlink, &enable_eth_param);
	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,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH,
					value);
	return 0;
}

static void mlx5_devlink_eth_param_unregister(struct devlink *devlink)
static void mlx5_devlink_eth_params_unregister(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (!mlx5_eth_supported(dev))
		return;

	devlink_param_unregister(devlink, &enable_eth_param);
	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,
@@ -670,11 +534,12 @@ static int mlx5_devlink_enable_rdma_validate(struct devlink *devlink, u32 id,
	return 0;
}

static const struct devlink_param enable_rdma_param =
static const struct devlink_param mlx5_devlink_rdma_params[] = {
	DEVLINK_PARAM_GENERIC(ENABLE_RDMA, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			      NULL, NULL, mlx5_devlink_enable_rdma_validate);
			      NULL, NULL, mlx5_devlink_enable_rdma_validate),
};

static int mlx5_devlink_rdma_param_register(struct devlink *devlink)
static int mlx5_devlink_rdma_params_register(struct devlink *devlink)
{
	union devlink_param_value value;
	int err;
@@ -682,30 +547,33 @@ static int mlx5_devlink_rdma_param_register(struct devlink *devlink)
	if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND))
		return 0;

	err = devlink_param_register(devlink, &enable_rdma_param);
	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,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
					value);
	return 0;
}

static void mlx5_devlink_rdma_param_unregister(struct devlink *devlink)
static void mlx5_devlink_rdma_params_unregister(struct devlink *devlink)
{
	if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND))
		return;

	devlink_param_unregister(devlink, &enable_rdma_param);
	devl_params_unregister(devlink, mlx5_devlink_rdma_params,
			       ARRAY_SIZE(mlx5_devlink_rdma_params));
}

static const struct devlink_param enable_vnet_param =
static const struct devlink_param mlx5_devlink_vnet_params[] = {
	DEVLINK_PARAM_GENERIC(ENABLE_VNET, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			      NULL, NULL, NULL);
			      NULL, NULL, NULL),
};

static int mlx5_devlink_vnet_param_register(struct devlink *devlink)
static int mlx5_devlink_vnet_params_register(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	union devlink_param_value value;
@@ -714,56 +582,58 @@ static int mlx5_devlink_vnet_param_register(struct devlink *devlink)
	if (!mlx5_vnet_supported(dev))
		return 0;

	err = devlink_param_register(devlink, &enable_vnet_param);
	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,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
					value);
	return 0;
}

static void mlx5_devlink_vnet_param_unregister(struct devlink *devlink)
static void mlx5_devlink_vnet_params_unregister(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (!mlx5_vnet_supported(dev))
		return;

	devlink_param_unregister(devlink, &enable_vnet_param);
	devl_params_unregister(devlink, mlx5_devlink_vnet_params,
			       ARRAY_SIZE(mlx5_devlink_vnet_params));
}

static int mlx5_devlink_auxdev_params_register(struct devlink *devlink)
{
	int err;

	err = mlx5_devlink_eth_param_register(devlink);
	err = mlx5_devlink_eth_params_register(devlink);
	if (err)
		return err;

	err = mlx5_devlink_rdma_param_register(devlink);
	err = mlx5_devlink_rdma_params_register(devlink);
	if (err)
		goto rdma_err;

	err = mlx5_devlink_vnet_param_register(devlink);
	err = mlx5_devlink_vnet_params_register(devlink);
	if (err)
		goto vnet_err;
	return 0;

vnet_err:
	mlx5_devlink_rdma_param_unregister(devlink);
	mlx5_devlink_rdma_params_unregister(devlink);
rdma_err:
	mlx5_devlink_eth_param_unregister(devlink);
	mlx5_devlink_eth_params_unregister(devlink);
	return err;
}

static void mlx5_devlink_auxdev_params_unregister(struct devlink *devlink)
{
	mlx5_devlink_vnet_param_unregister(devlink);
	mlx5_devlink_rdma_param_unregister(devlink);
	mlx5_devlink_eth_param_unregister(devlink);
	mlx5_devlink_vnet_params_unregister(devlink);
	mlx5_devlink_rdma_params_unregister(devlink);
	mlx5_devlink_eth_params_unregister(devlink);
}

static int mlx5_devlink_max_uc_list_validate(struct devlink *devlink, u32 id,
@@ -791,11 +661,12 @@ static int mlx5_devlink_max_uc_list_validate(struct devlink *devlink, u32 id,
	return 0;
}

static const struct devlink_param max_uc_list_param =
static const struct devlink_param mlx5_devlink_max_uc_list_params[] = {
	DEVLINK_PARAM_GENERIC(MAX_MACS, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
			      NULL, NULL, mlx5_devlink_max_uc_list_validate);
			      NULL, NULL, mlx5_devlink_max_uc_list_validate),
};

static int mlx5_devlink_max_uc_list_param_register(struct devlink *devlink)
static int mlx5_devlink_max_uc_list_params_register(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	union devlink_param_value value;
@@ -804,26 +675,28 @@ static int mlx5_devlink_max_uc_list_param_register(struct devlink *devlink)
	if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported))
		return 0;

	err = devlink_param_register(devlink, &max_uc_list_param);
	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,
	devl_param_driverinit_value_set(devlink,
					DEVLINK_PARAM_GENERIC_ID_MAX_MACS,
					value);
	return 0;
}

static void
mlx5_devlink_max_uc_list_param_unregister(struct devlink *devlink)
mlx5_devlink_max_uc_list_params_unregister(struct devlink *devlink)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);

	if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported))
		return;

	devlink_param_unregister(devlink, &max_uc_list_param);
	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)					\
@@ -869,12 +742,12 @@ void mlx5_devlink_traps_unregister(struct devlink *devlink)
				    ARRAY_SIZE(mlx5_trap_groups_arr));
}

int mlx5_devlink_register(struct devlink *devlink)
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,
	err = devl_params_register(devlink, mlx5_devlink_params,
				   ARRAY_SIZE(mlx5_devlink_params));
	if (err)
		return err;
@@ -885,7 +758,7 @@ int mlx5_devlink_register(struct devlink *devlink)
	if (err)
		goto auxdev_reg_err;

	err = mlx5_devlink_max_uc_list_param_register(devlink);
	err = mlx5_devlink_max_uc_list_params_register(devlink);
	if (err)
		goto max_uc_list_err;

@@ -897,15 +770,15 @@ int mlx5_devlink_register(struct devlink *devlink)
max_uc_list_err:
	mlx5_devlink_auxdev_params_unregister(devlink);
auxdev_reg_err:
	devlink_params_unregister(devlink, mlx5_devlink_params,
	devl_params_unregister(devlink, mlx5_devlink_params,
			       ARRAY_SIZE(mlx5_devlink_params));
	return err;
}

void mlx5_devlink_unregister(struct devlink *devlink)
void mlx5_devlink_params_unregister(struct devlink *devlink)
{
	mlx5_devlink_max_uc_list_param_unregister(devlink);
	mlx5_devlink_max_uc_list_params_unregister(devlink);
	mlx5_devlink_auxdev_params_unregister(devlink);
	devlink_params_unregister(devlink, mlx5_devlink_params,
	devl_params_unregister(devlink, mlx5_devlink_params,
			       ARRAY_SIZE(mlx5_devlink_params));
}
+2 −2
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ void mlx5_devlink_traps_unregister(struct devlink *devlink);

struct devlink *mlx5_devlink_alloc(struct device *dev);
void mlx5_devlink_free(struct devlink *devlink);
int mlx5_devlink_register(struct devlink *devlink);
void mlx5_devlink_unregister(struct devlink *devlink);
int mlx5_devlink_params_register(struct devlink *devlink);
void mlx5_devlink_params_unregister(struct devlink *devlink);

#endif /* __MLX5_DEVLINK_H__ */
Loading