From: Jason Gunthorpe Date: Fri, 4 Sep 2020 22:41:48 +0000 (-0300) Subject: RDMA/efa: Use ib_umem_num_dma_pages() X-Git-Tag: howlett/maple_spf/20210104~777^2~108 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1f9b6827c85f9d9786f31a1434a16c917aae23b2;p=users%2Fjedix%2Flinux-maple.git RDMA/efa: Use ib_umem_num_dma_pages() If ib_umem_find_best_pgsz() returns > PAGE_SIZE then the equation here is not correct. 'start' should be 'virt'. Change it to use the core code for page_num and the canonical calculation of page_shift. Fixes: 40ddb3f02083 ("RDMA/efa: Use API to get contiguous memory blocks aligned to device supported page size") Link: https://lore.kernel.org/r/7-v2-270386b7e60b+28f4-umem_1_jgg@nvidia.com Tested-by: Gal Pressman Acked-by: Gal Pressman Signed-off-by: Jason Gunthorpe --- diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/efa/efa_verbs.c index 81db565c098a..52b7ea9fd4ee 100644 --- a/drivers/infiniband/hw/efa/efa_verbs.c +++ b/drivers/infiniband/hw/efa/efa_verbs.c @@ -4,6 +4,7 @@ */ #include +#include #include #include @@ -1540,9 +1541,8 @@ struct ib_mr *efa_reg_mr(struct ib_pd *ibpd, u64 start, u64 length, goto err_unmap; } - params.page_shift = __ffs(pg_sz); - params.page_num = DIV_ROUND_UP(length + (start & (pg_sz - 1)), - pg_sz); + params.page_shift = order_base_2(pg_sz); + params.page_num = ib_umem_num_dma_blocks(mr->umem, pg_sz); ibdev_dbg(&dev->ibdev, "start %#llx length %#llx params.page_shift %u params.page_num %u\n",