mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 17:42:03 +02:00
RDMA/mlx5: Create UCAP char devices for supported device capabilities
Create UCAP character devices when probing an IB device with supported firmware capabilities. If the RDMA_CTRL general object type is supported, check for specific UCTX capabilities: Create /dev/infiniband/mlx5_perm_ctrl_local for RDMA_UCAP_MLX5_CTRL_LOCAL Create /dev/infiniband/mlx5_perm_ctrl_other_vhca for RDMA_UCAP_MLX5_CTRL_OTHER_VHCA Signed-off-by: Chiara Meiohas <cmeiohas@nvidia.com> Link: https://patch.msgid.link/30ed40e7a12a694cf4ee257459ed61b145b7837d.1741261611.git.leon@kernel.org Reviewed-by: Yishai Hadas <yishaih@nvidia.com> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
61e5168281
commit
cf7174e898
|
|
@ -47,6 +47,7 @@
|
||||||
#include <rdma/uverbs_ioctl.h>
|
#include <rdma/uverbs_ioctl.h>
|
||||||
#include <rdma/mlx5_user_ioctl_verbs.h>
|
#include <rdma/mlx5_user_ioctl_verbs.h>
|
||||||
#include <rdma/mlx5_user_ioctl_cmds.h>
|
#include <rdma/mlx5_user_ioctl_cmds.h>
|
||||||
|
#include <rdma/ib_ucaps.h>
|
||||||
#include "macsec.h"
|
#include "macsec.h"
|
||||||
#include "data_direct.h"
|
#include "data_direct.h"
|
||||||
|
|
||||||
|
|
@ -4201,8 +4202,47 @@ static int mlx5_ib_init_var_table(struct mlx5_ib_dev *dev)
|
||||||
return (var_table->bitmap) ? 0 : -ENOMEM;
|
return (var_table->bitmap) ? 0 : -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mlx5_ib_cleanup_ucaps(struct mlx5_ib_dev *dev)
|
||||||
|
{
|
||||||
|
if (MLX5_CAP_GEN(dev->mdev, uctx_cap) & MLX5_UCTX_CAP_RDMA_CTRL)
|
||||||
|
ib_remove_ucap(RDMA_UCAP_MLX5_CTRL_LOCAL);
|
||||||
|
|
||||||
|
if (MLX5_CAP_GEN(dev->mdev, uctx_cap) &
|
||||||
|
MLX5_UCTX_CAP_RDMA_CTRL_OTHER_VHCA)
|
||||||
|
ib_remove_ucap(RDMA_UCAP_MLX5_CTRL_OTHER_VHCA);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mlx5_ib_init_ucaps(struct mlx5_ib_dev *dev)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (MLX5_CAP_GEN(dev->mdev, uctx_cap) & MLX5_UCTX_CAP_RDMA_CTRL) {
|
||||||
|
ret = ib_create_ucap(RDMA_UCAP_MLX5_CTRL_LOCAL);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MLX5_CAP_GEN(dev->mdev, uctx_cap) &
|
||||||
|
MLX5_UCTX_CAP_RDMA_CTRL_OTHER_VHCA) {
|
||||||
|
ret = ib_create_ucap(RDMA_UCAP_MLX5_CTRL_OTHER_VHCA);
|
||||||
|
if (ret)
|
||||||
|
goto remove_local;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
remove_local:
|
||||||
|
if (MLX5_CAP_GEN(dev->mdev, uctx_cap) & MLX5_UCTX_CAP_RDMA_CTRL)
|
||||||
|
ib_remove_ucap(RDMA_UCAP_MLX5_CTRL_LOCAL);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void mlx5_ib_stage_caps_cleanup(struct mlx5_ib_dev *dev)
|
static void mlx5_ib_stage_caps_cleanup(struct mlx5_ib_dev *dev)
|
||||||
{
|
{
|
||||||
|
if (MLX5_CAP_GEN_2_64(dev->mdev, general_obj_types_127_64) &
|
||||||
|
MLX5_HCA_CAP_2_GENERAL_OBJECT_TYPES_RDMA_CTRL)
|
||||||
|
mlx5_ib_cleanup_ucaps(dev);
|
||||||
|
|
||||||
bitmap_free(dev->var_table.bitmap);
|
bitmap_free(dev->var_table.bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4253,6 +4293,13 @@ static int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MLX5_CAP_GEN_2_64(dev->mdev, general_obj_types_127_64) &
|
||||||
|
MLX5_HCA_CAP_2_GENERAL_OBJECT_TYPES_RDMA_CTRL) {
|
||||||
|
err = mlx5_ib_init_ucaps(dev);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
dev->ib_dev.use_cq_dim = true;
|
dev->ib_dev.use_cq_dim = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user