int ibv_cmd_reg_mr()

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, &params, &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;
}