Jason Wang
2021-May-31 06:43 UTC
[PATCH 1/2] vdpa/mlx5: Support creating resources with uid == 0
? 2021/5/31 ??12:59, Eli Cohen ??:> On Mon, May 31, 2021 at 11:06:59AM +0800, Jason Wang wrote: >> ? 2021/5/31 ??11:02, Jason Wang ??: >>> ? 2021/5/30 ??3:54, Eli Cohen ??: >>>> Currently all resources must be created with uid != 0 which is essential >>>> userspace processes allocating virtquueue resources. Since this is a >>>> kernel implementation, it is perfectly legal to open resources with >>>> uid == 0. >>>> >>>> In case frimware supports, avoid allocating user context. >>> >>> Typo "frimware". >>> >>> Otherwise. >>> >>> Acked-by: Jason Wang <jasowang at redhat.com> >>> >>> (I don't see any code to check the firmware capability, is this >>> intended?) >> >> Speak too fast. I see the MLX5_CAP_GEN(), so it's fine. > And I responded too fast :-)Right and thanks for the quick response :)>> Thanks >> >> >>> Thanks >>> >>> >>>> Signed-off-by: Eli Cohen <elic at nvidia.com> >>>> --- >>>> ? drivers/vdpa/mlx5/core/resources.c | 6 ++++++ >>>> ? include/linux/mlx5/mlx5_ifc.h????? | 4 +++- >>>> ? 2 files changed, 9 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/vdpa/mlx5/core/resources.c >>>> b/drivers/vdpa/mlx5/core/resources.c >>>> index 6521cbd0f5c2..836ab9ef0fa6 100644 >>>> --- a/drivers/vdpa/mlx5/core/resources.c >>>> +++ b/drivers/vdpa/mlx5/core/resources.c >>>> @@ -54,6 +54,9 @@ static int create_uctx(struct mlx5_vdpa_dev >>>> *mvdev, u16 *uid) >>>> ????? void *in; >>>> ????? int err; >>>> ? +??? if (MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) >>>> +??????? return 0; >>>> + >>>> ????? /* 0 means not supported */ >>>> ????? if (!MLX5_CAP_GEN(mvdev->mdev, log_max_uctx)) >>>> ????????? return -EOPNOTSUPP; >>>> @@ -79,6 +82,9 @@ static void destroy_uctx(struct mlx5_vdpa_dev >>>> *mvdev, u32 uid) >>>> ????? u32 out[MLX5_ST_SZ_DW(destroy_uctx_out)] = {}; >>>> ????? u32 in[MLX5_ST_SZ_DW(destroy_uctx_in)] = {}; >>>> ? +??? if (!uid) >>>> +??????? return; >>>> + >>>> ????? MLX5_SET(destroy_uctx_in, in, opcode, MLX5_CMD_OP_DESTROY_UCTX); >>>> ????? MLX5_SET(destroy_uctx_in, in, uid, uid); >>>> ? diff --git a/include/linux/mlx5/mlx5_ifc.h >>>> b/include/linux/mlx5/mlx5_ifc.h >>>> index 9c68b2da14c6..606d2aeacad4 100644 >>>> --- a/include/linux/mlx5/mlx5_ifc.h >>>> +++ b/include/linux/mlx5/mlx5_ifc.h >>>> @@ -1487,7 +1487,9 @@ struct mlx5_ifc_cmd_hca_cap_bits { >>>> ????? u8???????? uar_4k[0x1]; >>>> ????? u8???????? reserved_at_241[0x9]; >>>> ????? u8???????? uar_sz[0x6]; >>>> -??? u8???????? reserved_at_250[0x8]; >>>> +??? u8???????? reserved_at_248[0x2]; >>>> +??? u8???????? umem_uid_0[0x1]; >>>> +??? u8???????? reserved_at_250[0x5]; >>>> ????? u8???????? log_pg_sz[0x8]; >>>> ? ????? u8???????? bf[0x1];