*
*/
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);
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 */