diff options
author | Leon Romanovsky <leonro@nvidia.com> | 2025-04-28 12:22:19 +0300 |
---|---|---|
committer | Leon Romanovsky <leon@kernel.org> | 2025-05-12 06:06:51 -0400 |
commit | 1efe8c0670d6a6883faa09c9abc746c741f5664a (patch) | |
tree | 3a907cb76abc324660a0ffd7b02887b742dca5de /drivers/infiniband/sw | |
parent | eedd5b1276e76d6b260a7a77a149ef5155aa76f0 (diff) |
RDMA/core: Convert UMEM ODP DMA mapping to caching IOVA and page linkage
Reuse newly added DMA API to cache IOVA and only link/unlink pages
in fast path for UMEM ODP flow.
Tested-by: Jens Axboe <axboe@kernel.dk>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Diffstat (limited to 'drivers/infiniband/sw')
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_odp.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_odp.c b/drivers/infiniband/sw/rxe/rxe_odp.c index aae63e336e53..a1416626f61a 100644 --- a/drivers/infiniband/sw/rxe/rxe_odp.c +++ b/drivers/infiniband/sw/rxe/rxe_odp.c @@ -205,7 +205,7 @@ static int __rxe_odp_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, while (length > 0) { u8 *src, *dest; - page = hmm_pfn_to_page(umem_odp->pfn_list[idx]); + page = hmm_pfn_to_page(umem_odp->map.pfn_list[idx]); user_va = kmap_local_page(page); if (!user_va) return -EFAULT; @@ -289,7 +289,7 @@ static enum resp_states rxe_odp_do_atomic_op(struct rxe_mr *mr, u64 iova, idx = rxe_odp_iova_to_index(umem_odp, iova); page_offset = rxe_odp_iova_to_page_offset(umem_odp, iova); - page = hmm_pfn_to_page(umem_odp->pfn_list[idx]); + page = hmm_pfn_to_page(umem_odp->map.pfn_list[idx]); if (!page) return RESPST_ERR_RKEY_VIOLATION; @@ -355,7 +355,7 @@ int rxe_odp_flush_pmem_iova(struct rxe_mr *mr, u64 iova, index = rxe_odp_iova_to_index(umem_odp, iova); page_offset = rxe_odp_iova_to_page_offset(umem_odp, iova); - page = hmm_pfn_to_page(umem_odp->pfn_list[index]); + page = hmm_pfn_to_page(umem_odp->map.pfn_list[index]); if (!page) { mutex_unlock(&umem_odp->umem_mutex); return -EFAULT; @@ -401,7 +401,7 @@ enum resp_states rxe_odp_do_atomic_write(struct rxe_mr *mr, u64 iova, u64 value) page_offset = rxe_odp_iova_to_page_offset(umem_odp, iova); index = rxe_odp_iova_to_index(umem_odp, iova); - page = hmm_pfn_to_page(umem_odp->pfn_list[index]); + page = hmm_pfn_to_page(umem_odp->map.pfn_list[index]); if (!page) { mutex_unlock(&umem_odp->umem_mutex); return RESPST_ERR_RKEY_VIOLATION; |