Skip to content

Commit

Permalink
net/mlx5: Support enable_vnet devlink dev param
Browse files Browse the repository at this point in the history
Enable user to disable VDPA net auxiliary device so that when it is not
required, user can disable it.

For example,

$ devlink dev param set pci/0000:06:00.0 \
              name enable_vnet value false cmode driverinit
$ devlink dev reload pci/0000:06:00.0

At this point devlink instance do not create auxiliary device
mlx5_core.vnet.2 for the VDPA net functionality.

Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Parav Pandit authored and David S. Miller committed Aug 11, 2021
1 parent 87158ce commit 70862a5
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
16 changes: 14 additions & 2 deletions drivers/net/ethernet/mellanox/mlx5/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ static bool is_eth_enabled(struct mlx5_core_dev *dev)
return err ? false : val.vbool;
}

static bool is_vnet_supported(struct mlx5_core_dev *dev)
bool mlx5_vnet_supported(struct mlx5_core_dev *dev)
{
if (!IS_ENABLED(CONFIG_MLX5_VDPA_NET))
return false;
Expand All @@ -138,6 +138,17 @@ static bool is_vnet_supported(struct mlx5_core_dev *dev)
return true;
}

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);
return err ? false : val.vbool;
}

static bool is_ib_rep_supported(struct mlx5_core_dev *dev)
{
if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND))
Expand Down Expand Up @@ -226,7 +237,8 @@ static const struct mlx5_adev_device {
bool (*is_enabled)(struct mlx5_core_dev *dev);
} mlx5_adev_devices[] = {
[MLX5_INTERFACE_PROTOCOL_VNET] = { .suffix = "vnet",
.is_supported = &is_vnet_supported },
.is_supported = &mlx5_vnet_supported,
.is_enabled = &is_vnet_enabled },
[MLX5_INTERFACE_PROTOCOL_IB] = { .suffix = "rdma",
.is_supported = &mlx5_rdma_supported,
.is_enabled = &is_ib_enabled },
Expand Down
42 changes: 42 additions & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,42 @@ static void mlx5_devlink_rdma_param_unregister(struct devlink *devlink)
devlink_param_unregister(devlink, &enable_rdma_param);
}

static const struct devlink_param enable_vnet_param =
DEVLINK_PARAM_GENERIC(ENABLE_VNET, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
NULL, NULL, NULL);

static int mlx5_devlink_vnet_param_register(struct devlink *devlink)
{
struct mlx5_core_dev *dev = devlink_priv(devlink);
union devlink_param_value value;
int err;

if (!mlx5_vnet_supported(dev))
return 0;

err = devlink_param_register(devlink, &enable_vnet_param);
if (err)
return err;

value.vbool = true;
devlink_param_driverinit_value_set(devlink,
DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET,
value);
devlink_param_publish(devlink, &enable_rdma_param);
return 0;
}

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

if (!mlx5_vnet_supported(dev))
return;

devlink_param_unpublish(devlink, &enable_vnet_param);
devlink_param_unregister(devlink, &enable_vnet_param);
}

static int mlx5_devlink_auxdev_params_register(struct devlink *devlink)
{
int err;
Expand All @@ -692,15 +728,21 @@ static int mlx5_devlink_auxdev_params_register(struct devlink *devlink)
if (err)
goto rdma_err;

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

vnet_err:
mlx5_devlink_rdma_param_unregister(devlink);
rdma_err:
mlx5_devlink_eth_param_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);
}
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -275,5 +275,6 @@ static inline u32 mlx5_sriov_get_vf_total_msix(struct pci_dev *pdev)

bool mlx5_eth_supported(struct mlx5_core_dev *dev);
bool mlx5_rdma_supported(struct mlx5_core_dev *dev);
bool mlx5_vnet_supported(struct mlx5_core_dev *dev);

#endif /* __MLX5_CORE_H__ */

0 comments on commit 70862a5

Please sign in to comment.