There was a thread that tries to refactor iova_to_vaddr[1][2], where page_address will be drop. if so, your changes will be no longer needed. [1]https://lore.kernel.org/lkml/a7decec2-77d9-db4c-ff66-ff597da8bc71@xxxxxxxxxxx/T/ [2]https://www.spinics.net/lists/linux-rdma/msg114053.html Thanks Zhijian On 20/11/2022 09:29, Zhu Yanjun wrote: > From: Zhu Yanjun <yanjun.zhu@xxxxxxxxx> > > In ib_umem_get, sgt_append is allocated from the function > sg_alloc_append_table_from_pages. And it is not from highmem. > > As such, the return value of page_address will not be NULL. > > Signed-off-by: Zhu Yanjun <yanjun.zhu@xxxxxxxxx> > --- > drivers/infiniband/sw/rxe/rxe_mr.c | 9 ++------- > 1 file changed, 2 insertions(+), 7 deletions(-) > > diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c > index b1423000e4bc..3f33a4cdef24 100644 > --- a/drivers/infiniband/sw/rxe/rxe_mr.c > +++ b/drivers/infiniband/sw/rxe/rxe_mr.c > @@ -119,7 +119,6 @@ int rxe_mr_init_user(struct rxe_dev *rxe, u64 start, u64 length, u64 iova, > struct ib_umem *umem; > struct sg_page_iter sg_iter; > int num_buf; > - void *vaddr; > int err; > > umem = ib_umem_get(&rxe->ib_dev, start, length, access); > @@ -149,6 +148,8 @@ int rxe_mr_init_user(struct rxe_dev *rxe, u64 start, u64 length, u64 iova, > buf = map[0]->buf; > > for_each_sgtable_page (&umem->sgt_append.sgt, &sg_iter, 0) { > + void *vaddr; > + > if (num_buf >= RXE_BUF_PER_MAP) { > map++; > buf = map[0]->buf; > @@ -156,16 +157,10 @@ int rxe_mr_init_user(struct rxe_dev *rxe, u64 start, u64 length, u64 iova, > } > > vaddr = page_address(sg_page_iter_page(&sg_iter)); > - if (!vaddr) { > - rxe_dbg_mr(mr, "Unable to get virtual address\n"); > - err = -ENOMEM; > - goto err_release_umem; > - } > buf->addr = (uintptr_t)vaddr; > buf->size = PAGE_SIZE; > num_buf++; > buf++; > - > } > } >