common/mlx5: export memory region Verbs operations
[dpdk.git] / drivers / common / mlx5 / mlx5_common_mr.c
index c68be54..4ce7975 100644 (file)
@@ -440,8 +440,7 @@ mr_free(struct mlx5_mr *mr)
        if (mr == NULL)
                return;
        DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr);
-       if (mr->pmd_mr.obj != NULL)
-               claim_zero(mlx5_glue->dereg_mr(mr->pmd_mr.obj));
+       mlx5_common_verbs_dereg_mr(&mr->pmd_mr);
        if (mr->ms_bmp != NULL)
                rte_bitmap_free(mr->ms_bmp);
        rte_free(mr);
@@ -598,7 +597,6 @@ mlx5_mr_create_primary(void *pd,
        uint32_t ms_n;
        uint32_t n;
        size_t len;
-       struct ibv_mr *ibv_mr;
 
        DRV_LOG(DEBUG, "Creating a MR using address (%p)", (void *)addr);
        /*
@@ -767,20 +765,13 @@ alloc_resources:
         * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket()
         * through mlx5_alloc_verbs_buf().
         */
-       ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len,
-                                  IBV_ACCESS_LOCAL_WRITE |
-                                  (haswell_broadwell_cpu ? 0 :
-                                  IBV_ACCESS_RELAXED_ORDERING));
-       if (ibv_mr == NULL) {
+       mlx5_common_verbs_reg_mr(pd, (void *)data.start, len, &mr->pmd_mr);
+       if (mr->pmd_mr.obj == NULL) {
                DEBUG("Fail to create an MR for address (%p)",
                      (void *)addr);
                rte_errno = EINVAL;
                goto err_mrlock;
        }
-       mr->pmd_mr.lkey = ibv_mr->lkey;
-       mr->pmd_mr.addr = ibv_mr->addr;
-       mr->pmd_mr.len = ibv_mr->length;
-       mr->pmd_mr.obj = ibv_mr;
        MLX5_ASSERT((uintptr_t)mr->pmd_mr.addr == data.start);
        MLX5_ASSERT(mr->pmd_mr.len);
        LIST_INSERT_HEAD(&share_cache->mr_list, mr, mr);
@@ -1039,7 +1030,6 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
 struct mlx5_mr *
 mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 {
-       struct ibv_mr *ibv_mr;
        struct mlx5_mr *mr = NULL;
 
        mr = rte_zmalloc_socket(NULL,
@@ -1048,21 +1038,14 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
                                RTE_CACHE_LINE_SIZE, socket_id);
        if (mr == NULL)
                return NULL;
-       ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len,
-                                  IBV_ACCESS_LOCAL_WRITE |
-                                  (haswell_broadwell_cpu ? 0 :
-                                  IBV_ACCESS_RELAXED_ORDERING));
-       if (ibv_mr == NULL) {
+       mlx5_common_verbs_reg_mr(pd, (void *)addr, len, &mr->pmd_mr);
+       if (mr->pmd_mr.obj == NULL) {
                DRV_LOG(WARNING,
                        "Fail to create MR for address (%p)",
                        (void *)addr);
                rte_free(mr);
                return NULL;
        }
-       mr->pmd_mr.lkey = ibv_mr->lkey;
-       mr->pmd_mr.addr = ibv_mr->addr;
-       mr->pmd_mr.len = ibv_mr->length;
-       mr->pmd_mr.obj = ibv_mr;
        mr->msl = NULL; /* Mark it is external memory. */
        mr->ms_bmp = NULL;
        mr->ms_n = 1;