]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/efa: Add option to set QP service level on create
authorMichael Margolin <mrgolin@amazon.com>
Tue, 15 Oct 2024 17:42:42 +0000 (17:42 +0000)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 21 Oct 2024 16:58:07 +0000 (13:58 -0300)
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: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
Signed-off-by: Michael Margolin <mrgolin@amazon.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/efa/efa_com_cmd.c
drivers/infiniband/hw/efa/efa_com_cmd.h
drivers/infiniband/hw/efa/efa_verbs.c
include/uapi/rdma/efa-abi.h

index 206f377db27eefce9654cbf7b6fc15309c5311bb..9e04edb9dbdabf427bba8d0586f50bf10334501f 100644 (file)
@@ -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);
index 2599f8e58cc44a1a723c36c7fc2e0314c7cc399c..25f02c0d969815551fab65e8689a4ed3f3b2922a 100644 (file)
@@ -27,6 +27,7 @@ struct efa_com_create_qp_params {
        u16 pd;
        u16 uarn;
        u8 qp_type;
+       u8 sl;
        u8 unsolicited_write_recv : 1;
 };
 
index feb04cfdb8daa758ef28287fb2dcea55da39d278..ca3af866a5dfec92c447914d21a8be3646ac6f5b 100644 (file)
@@ -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;
 
index d689b8b34189dacb6a6ba5762c07741e3891d594..11b94b0b035b9a68ddc9b43be527278c8a587772 100644 (file)
@@ -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 {