in efawin/ibv_win_cmd.c [122:153]
int ibv_cmd_reg_mr(struct ibv_pd* pd, void* addr, size_t length,
uint64_t hca_va, int access,
struct verbs_mr* vmr, struct ibv_reg_mr* cmd,
size_t cmd_size,
struct ib_uverbs_reg_mr_resp* resp, size_t resp_size)
{
(void)hca_va;
struct ibv_mr* mr = &vmr->ibv_mr;
struct efa_dev* edev = to_efa_dev(pd->context->device);
EFA_REG_MR_PARAMS params = { 0 };
EFA_MR_INFO result = { 0 };
int err;
params.MrAddr = addr;
params.Pdn = pd->handle;
params.MrLen = length;
params.Permissions = access;
err = efa_win_register_mr(&edev->device, ¶ms, &result);
if (!err) {
mr->addr = addr;
mr->context = pd->context;
mr->handle = 0;
mr->length = length;
mr->lkey = result.LKey;
mr->rkey = result.RKey;
mr->pd = pd;
}
return err;
}