Commit 48931f65 authored by Michael Margolin's avatar Michael Margolin Committed by Jason Gunthorpe
Browse files

RDMA/efa: Add option to set QP service level on create

Using modify QP with AH attributes and IB_QP_AV flag set doesn't make
much sense for connectionless QP types like SRD. Add SL parameter to EFA
create QP user ABI and pass it to the device.

Link: https://patch.msgid.link/r/20241015174242.3490-3-mrgolin@amazon.com


Reviewed-by: default avatarFiras Jahjah <firasj@amazon.com>
Reviewed-by: default avatarYonatan Nachum <ynachum@amazon.com>
Signed-off-by: default avatarMichael Margolin <mrgolin@amazon.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent 1e7b86f1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ int efa_com_create_qp(struct efa_com_dev *edev,
	create_qp_cmd.qp_alloc_size.recv_queue_depth =
			params->rq_depth;
	create_qp_cmd.uar = params->uarn;
	create_qp_cmd.sl = params->sl;

	if (params->unsolicited_write_recv)
		EFA_SET(&create_qp_cmd.flags, EFA_ADMIN_CREATE_QP_CMD_UNSOLICITED_WRITE_RECV, 1);
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ struct efa_com_create_qp_params {
	u16 pd;
	u16 uarn;
	u8 qp_type;
	u8 sl;
	u8 unsolicited_write_recv : 1;
};

+3 −1
Original line number Diff line number Diff line
@@ -676,7 +676,7 @@ int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr,
		goto err_out;
	}

	if (cmd.comp_mask || !is_reserved_cleared(cmd.reserved_90)) {
	if (cmd.comp_mask || !is_reserved_cleared(cmd.reserved_98)) {
		ibdev_dbg(&dev->ibdev,
			  "Incompatible ABI params, unknown fields in udata\n");
		err = -EINVAL;
@@ -732,6 +732,8 @@ int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr,
		create_qp_params.rq_base_addr = qp->rq_dma_addr;
	}

	create_qp_params.sl = cmd.sl;

	if (cmd.flags & EFA_CREATE_QP_WITH_UNSOLICITED_WRITE_RECV)
		create_qp_params.unsolicited_write_recv = true;

+2 −1
Original line number Diff line number Diff line
@@ -95,7 +95,8 @@ struct efa_ibv_create_qp {
	__u32 sq_ring_size; /* bytes */
	__u32 driver_qp_type;
	__u16 flags;
	__u8 reserved_90[6];
	__u8 sl;
	__u8 reserved_98[5];
};

struct efa_ibv_create_qp_resp {