From: Jianxin Xiong Date: Tue, 7 Aug 2012 05:53:19 +0000 (-0700) Subject: Correct the MR size calculation when registering with SCIF. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=e0f30e7b701af3663a98b0ea55caede44a2d219f;p=~ardavis%2Fdapl.git Correct the MR size calculation when registering with SCIF. --- diff --git a/dapl/openib_common/mem.c b/dapl/openib_common/mem.c index 0533740..12819d2 100644 --- a/dapl/openib_common/mem.c +++ b/dapl/openib_common/mem.c @@ -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 */