]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
RDMA/qedr: Add EDPM max size to alloc ucontext response
authorMichal Kalderon <michal.kalderon@marvell.com>
Tue, 7 Jul 2020 06:31:00 +0000 (09:31 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 16 Jul 2020 19:01:55 +0000 (16:01 -0300)
User space should receive the maximum edpm size from kernel driver,
similar to other edpm/ldpm related limits.  Add an additional parameter to
the alloc_ucontext_resp structure for the edpm maximum size.

In addition, pass an indication from user-space to kernel
(and not just kernel to user) that the DPM sizes are supported.

This is for supporting backward-forward compatibility between driver and
lib for everything related to DPM transaction and limit sizes.

This should have been part of commit mentioned in Fixes tag.

Link: https://lore.kernel.org/r/20200707063100.3811-3-michal.kalderon@marvell.com
Fixes: 93a3d05f9d68 ("RDMA/qedr: Add kernel capability flags for dpm enabled mode")
Signed-off-by: Ariel Elior <ariel.elior@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/qedr/verbs.c
include/uapi/rdma/qedr-abi.h

index 5008149ea116fe2c970d21ec79a32db87a5fc00f..fcf2eaa3b459ca13bbcec638d86c56fce980c209 100644 (file)
@@ -320,9 +320,12 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
                                  QEDR_DPM_TYPE_ROCE_LEGACY |
                                  QEDR_DPM_TYPE_ROCE_EDPM_MODE;
 
-       uresp.dpm_flags |= QEDR_DPM_SIZES_SET;
-       uresp.ldpm_limit_size = QEDR_LDPM_MAX_SIZE;
-       uresp.edpm_trans_size = QEDR_EDPM_TRANS_SIZE;
+       if (ureq.context_flags & QEDR_SUPPORT_DPM_SIZES) {
+               uresp.dpm_flags |= QEDR_DPM_SIZES_SET;
+               uresp.ldpm_limit_size = QEDR_LDPM_MAX_SIZE;
+               uresp.edpm_trans_size = QEDR_EDPM_TRANS_SIZE;
+               uresp.edpm_limit_size = QEDR_EDPM_MAX_SIZE;
+       }
 
        uresp.wids_enabled = 1;
        uresp.wid_count = oparams.wid_count;
index b261c9fca07bb6c031b4fe79bd0f73172e018b4c..bf7333b2b5d71e67f2ddfc9eadaed58ab5dc551f 100644 (file)
@@ -40,7 +40,8 @@
 /* user kernel communication data structures. */
 enum qedr_alloc_ucontext_flags {
        QEDR_ALLOC_UCTX_EDPM_MODE       = 1 << 0,
-       QEDR_ALLOC_UCTX_DB_REC          = 1 << 1
+       QEDR_ALLOC_UCTX_DB_REC          = 1 << 1,
+       QEDR_SUPPORT_DPM_SIZES          = 1 << 2,
 };
 
 struct qedr_alloc_ucontext_req {
@@ -50,6 +51,7 @@ struct qedr_alloc_ucontext_req {
 
 #define QEDR_LDPM_MAX_SIZE     (8192)
 #define QEDR_EDPM_TRANS_SIZE   (64)
+#define QEDR_EDPM_MAX_SIZE     (ROCE_REQ_MAX_INLINE_DATA_SIZE)
 
 enum qedr_rdma_dpm_type {
        QEDR_DPM_TYPE_NONE              = 0,
@@ -77,6 +79,8 @@ struct qedr_alloc_ucontext_resp {
        __u16 ldpm_limit_size;
        __u8 edpm_trans_size;
        __u8 reserved;
+       __u16 edpm_limit_size;
+       __u8 padding[6];
 };
 
 struct qedr_alloc_pd_ureq {