]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
Correct the MR size calculation when registering with SCIF.
authorJianxin Xiong <jianxin.xiong@intel.com>
Tue, 7 Aug 2012 05:53:19 +0000 (22:53 -0700)
committerJianxin Xiong <jianxin.xiong@intel.com>
Tue, 7 Aug 2012 06:03:21 +0000 (23:03 -0700)
dapl/openib_common/mem.c

index 0533740e9a0e882d08b1a60cffa587c509eb0b98..12819d2ddd22919a82197f5693d555c3ab8e69b3 100644 (file)
@@ -182,9 +182,10 @@ dapls_ib_mr_register(IN DAPL_IA * ia_ptr,
         *
         */
        if (ia_ptr->hca_ptr->ib_trans.scif_ep) {
+               DAT_VLEN offset = virt_addr - ALIGN_DOWN_PPAGE(virt_addr);
                lmr->scif_off = scif_register(ia_ptr->hca_ptr->ib_trans.scif_ep,
                                              (void*)ALIGN_DOWN_PPAGE(virt_addr),
-                                             ALIGN_PAGE(length),
+                                             ALIGN_PAGE(length + offset),
                                              (off_t)0,
                                              SCIF_PROT_READ | SCIF_PROT_WRITE,
                                              0);
@@ -192,15 +193,15 @@ dapls_ib_mr_register(IN DAPL_IA * ia_ptr,
                        dapl_log(DAPL_DBG_TYPE_ERR,
                                 " mr_register: SCIF_mr v_addr=%p, %p len=%d ep=%d, failed %s\n",
                                 virt_addr, (void*)ALIGN_DOWN_PPAGE(virt_addr),
-                                ALIGN_PAGE(length),
+                                ALIGN_PAGE(length + offset),
                                 ia_ptr->hca_ptr->ib_trans.scif_ep, strerror(errno));
                        return (dapl_convert_errno(ENOMEM, "reg_mr_scif"));
                }
-               lmr->offset = (virt_addr - ALIGN_DOWN_PPAGE(virt_addr));
+               lmr->offset = offset;
                dapl_log(DAPL_DBG_TYPE_UTIL,
                             " mr_register: SCIF_mr addr %p, scif_off 0x%llx, offset 0x%x len %d\n",
                             (void*)ALIGN_DOWN_PPAGE(virt_addr), lmr->scif_off,
-                            lmr->offset, ALIGN_PAGE(length));
+                            lmr->offset, ALIGN_PAGE(length + offset));
        }
 #endif
        /* local read is default on IB */