From e0f30e7b701af3663a98b0ea55caede44a2d219f Mon Sep 17 00:00:00 2001 From: Jianxin Xiong Date: Mon, 6 Aug 2012 22:53:19 -0700 Subject: [PATCH] Correct the MR size calculation when registering with SCIF. --- dapl/openib_common/mem.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 */ -- 2.46.0