No functional change, do cleanup for refactoring it easily later. Signed-off-by: Li Zhijian <lizhijian@xxxxxxxxxxx> --- drivers/infiniband/sw/rxe/rxe_mr.c | 37 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c index cf3ce8d293b3..a4e786b657b7 100644 --- a/drivers/infiniband/sw/rxe/rxe_mr.c +++ b/drivers/infiniband/sw/rxe/rxe_mr.c @@ -246,41 +246,38 @@ static void lookup_iova(struct rxe_mr *mr, u64 iova, int *m_out, int *n_out, } } -void *iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length) +static void *__iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length) { size_t offset; int m, n; - void *addr; + lookup_iova(mr, iova, &m, &n, &offset); + + if (offset + length > mr->ibmr.page_size) { + pr_warn("crosses page boundary\n"); + return NULL; + } + + return (void *)(uintptr_t)mr->map[m]->buf[n].addr + offset; +} + +void *iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length) +{ if (mr->state != RXE_MR_STATE_VALID) { pr_warn("mr not in valid state\n"); - addr = NULL; - goto out; + return NULL; } if (!mr->map) { - addr = (void *)(uintptr_t)iova; - goto out; + return (void *)(uintptr_t)iova; } if (mr_check_range(mr, iova, length)) { pr_warn("range violation\n"); - addr = NULL; - goto out; - } - - lookup_iova(mr, iova, &m, &n, &offset); - - if (offset + length > mr->ibmr.page_size) { - pr_warn("crosses page boundary\n"); - addr = NULL; - goto out; + return NULL; } - addr = (void *)(uintptr_t)mr->map[m]->buf[n].addr + offset; - -out: - return addr; + return __iova_to_vaddr(mr, iova, length); } /* copy data from a range (vaddr, vaddr+length-1) to or from -- 2.31.1