mirror of https://gitee.com/openkylin/linux.git
IB/mlx5: Set valid umem bit on DEVX
Set valid umem bit on DEVX commands that use umem. This will enforce the umem usage by the firmware and not the 'pas' info. Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
d2d19121ae
commit
ba1a057da2
|
@ -264,6 +264,97 @@ static int devx_is_valid_obj_id(struct devx_obj *obj, const void *in)
|
|||
return false;
|
||||
}
|
||||
|
||||
static void devx_set_umem_valid(const void *in)
|
||||
{
|
||||
u16 opcode = MLX5_GET(general_obj_in_cmd_hdr, in, opcode);
|
||||
|
||||
switch (opcode) {
|
||||
case MLX5_CMD_OP_CREATE_MKEY:
|
||||
MLX5_SET(create_mkey_in, in, mkey_umem_valid, 1);
|
||||
break;
|
||||
case MLX5_CMD_OP_CREATE_CQ:
|
||||
{
|
||||
void *cqc;
|
||||
|
||||
MLX5_SET(create_cq_in, in, cq_umem_valid, 1);
|
||||
cqc = MLX5_ADDR_OF(create_cq_in, in, cq_context);
|
||||
MLX5_SET(cqc, cqc, dbr_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
case MLX5_CMD_OP_CREATE_QP:
|
||||
{
|
||||
void *qpc;
|
||||
|
||||
qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
|
||||
MLX5_SET(qpc, qpc, dbr_umem_valid, 1);
|
||||
MLX5_SET(create_qp_in, in, wq_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case MLX5_CMD_OP_CREATE_RQ:
|
||||
{
|
||||
void *rqc, *wq;
|
||||
|
||||
rqc = MLX5_ADDR_OF(create_rq_in, in, ctx);
|
||||
wq = MLX5_ADDR_OF(rqc, rqc, wq);
|
||||
MLX5_SET(wq, wq, dbr_umem_valid, 1);
|
||||
MLX5_SET(wq, wq, wq_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case MLX5_CMD_OP_CREATE_SQ:
|
||||
{
|
||||
void *sqc, *wq;
|
||||
|
||||
sqc = MLX5_ADDR_OF(create_sq_in, in, ctx);
|
||||
wq = MLX5_ADDR_OF(sqc, sqc, wq);
|
||||
MLX5_SET(wq, wq, dbr_umem_valid, 1);
|
||||
MLX5_SET(wq, wq, wq_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case MLX5_CMD_OP_MODIFY_CQ:
|
||||
MLX5_SET(modify_cq_in, in, cq_umem_valid, 1);
|
||||
break;
|
||||
|
||||
case MLX5_CMD_OP_CREATE_RMP:
|
||||
{
|
||||
void *rmpc, *wq;
|
||||
|
||||
rmpc = MLX5_ADDR_OF(create_rmp_in, in, ctx);
|
||||
wq = MLX5_ADDR_OF(rmpc, rmpc, wq);
|
||||
MLX5_SET(wq, wq, dbr_umem_valid, 1);
|
||||
MLX5_SET(wq, wq, wq_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case MLX5_CMD_OP_CREATE_XRQ:
|
||||
{
|
||||
void *xrqc, *wq;
|
||||
|
||||
xrqc = MLX5_ADDR_OF(create_xrq_in, in, xrq_context);
|
||||
wq = MLX5_ADDR_OF(xrqc, xrqc, wq);
|
||||
MLX5_SET(wq, wq, dbr_umem_valid, 1);
|
||||
MLX5_SET(wq, wq, wq_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case MLX5_CMD_OP_CREATE_XRC_SRQ:
|
||||
{
|
||||
void *xrc_srqc;
|
||||
|
||||
MLX5_SET(create_xrc_srq_in, in, xrc_srq_umem_valid, 1);
|
||||
xrc_srqc = MLX5_ADDR_OF(create_xrc_srq_in, in,
|
||||
xrc_srq_context_entry);
|
||||
MLX5_SET(xrc_srqc, xrc_srqc, dbr_umem_valid, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static bool devx_is_obj_create_cmd(const void *in)
|
||||
{
|
||||
u16 opcode = MLX5_GET(general_obj_in_cmd_hdr, in, opcode);
|
||||
|
@ -741,6 +832,8 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_OBJ_CREATE)(
|
|||
return -ENOMEM;
|
||||
|
||||
MLX5_SET(general_obj_in_cmd_hdr, cmd_in, uid, c->devx_uid);
|
||||
devx_set_umem_valid(cmd_in);
|
||||
|
||||
err = mlx5_cmd_exec(dev->mdev, cmd_in,
|
||||
uverbs_attr_get_len(attrs, MLX5_IB_ATTR_DEVX_OBJ_CREATE_CMD_IN),
|
||||
cmd_out, cmd_out_len);
|
||||
|
@ -790,6 +883,8 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_OBJ_MODIFY)(
|
|||
return PTR_ERR(cmd_out);
|
||||
|
||||
MLX5_SET(general_obj_in_cmd_hdr, cmd_in, uid, c->devx_uid);
|
||||
devx_set_umem_valid(cmd_in);
|
||||
|
||||
err = mlx5_cmd_exec(obj->mdev, cmd_in,
|
||||
uverbs_attr_get_len(attrs, MLX5_IB_ATTR_DEVX_OBJ_MODIFY_CMD_IN),
|
||||
cmd_out, cmd_out_len);
|
||||
|
|
Loading…
Reference in New Issue