Re: [PATCH v2 rdma-next 0/5] Introduce a DMA block iterator

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19-Apr-19 16:43, Shiraz Saleem wrote:
> From: "Shiraz Saleem" <shiraz.saleem@xxxxxxxxx>
> 
> This patch set is aiming to allow drivers to leverage a new DMA
> block iterator to get contiguous aligned memory blocks within
> their HW supported page sizes. The motivation for this work comes
> from the discussion in [1].
> 
> The first patch introduces a new umem API that allows drivers to find a
> best supported page size to use for the MR, from a bitmap of HW supported
> page sizes.
> 
> The second patch introduces a new DMA block iterator that returns allows
> drivers to get aligned DMA addresses within a HW supported page size.
> 
> The third patch and fouth patch removes the dependency of i40iw and bnxt_re
> drivers on the hugetlb flag. The new core APIs are called in these drivers to
> get huge page size aligned addresses if the MR is backed by huge pages.
> 
> The sixth patch removes the hugetlb flag from IB core.
> 
> Please note that mixed page portion of the algorithm and bnxt_re update in
> patch #4 have not been tested on hardware.
> 
> [1] https://patchwork.kernel.org/patch/10499753/
> 
> RFC-->v0:
> ---------
> * Add to scatter table by iterating a limited sized page list.
> * Updated driver call sites to use the for_each_sg_page iterator
>   variant where applicable.
> * Tweaked algorithm in ib_umem_find_single_pg_size and ib_umem_next_phys_iter
>   to ignore alignment of the start of first SGE and end of the last SGE.
> * Simplified ib_umem_find_single_pg_size on offset alignments checks for
>   user-space virtual and physical buffer.
> * Updated ib_umem_start_phys_iter to do some pre-computation
>   for the non-mixed page support case.
> * Updated bnxt_re driver to use the new core APIs and remove its
>   dependency on the huge tlb flag.
> * Fixed a bug in computation of sg_phys_iter->phyaddr in ib_umem_next_phys_iter.
> * Drop hugetlb flag usage from RDMA subsystem.
> * Rebased on top of for-next.
> 
> v0-->v1:
> --------
> * Remove the patches that update driver to use for_each_sg_page variant
>   to iterate in the SGE. This is sent as a seperate series using
>   the for_each_sg_dma_page variant.
> * Tweak ib_umem_add_sg_table API defintion based on maintainer feedback.
> * Cache number of scatterlist entries in umem.
> * Update function headers for ib_umem_find_single_pg_size and ib_umem_next_phys_iter.
> * Add sanity check on supported_pgsz in ib_umem_find_single_pg_size.
> 
> v1-->v2:
> --------
> *Removed page combining patch as it was sent stand alone.
> *__fls on pgsz_bitmap as opposed to fls64 since it's an unsigned long.
> *rename ib_umem_find_pg_bit() --> rdma_find_pg_bit() and moved to ib_verbs.h
> *rename ib_umem_find_single_pg_size() --> ib_umem_find_best_pgsz()
> *New flag IB_UMEM_VA_BASED_OFFSET for ib_umem_find_best_pgsz API for HW that uses least significant bits
>   of VA to indicate start offset into DMA list.
> *rdma_find_pg_bit() logic is re-written and simplified. It can support input of 0 or 1 dma addr cases.
> *ib_umem_find_best_pgsz() optimized to be less computationally expensive running rdma_find_pg_bit() only once.
> *rdma_for_each_block() is the new re-designed DMA block iterator which is more in line with for_each_sg_dma_page()iterator.
> *rdma_find_mixed_pg_bit() logic for interior SGE's accounting for start and end dma address. 
> *remove i40iw specific enums for supported page size
> *remove vma_list form ib_umem_get()
> 
> Shiraz Saleem (5):
>   RDMA/umem: Add API to find best driver supported page size in an MR
>   RDMA/verbs: Add a DMA iterator to return aligned contiguous memory
>     blocks
>   RDMA/i40iw: Use core helpers to get aligned DMA address within a
>     supported page size
>   RDMA/bnxt_re: Use core helpers to get aligned DMA address
>   RDMA/umem: Remove hugetlb flag
> 
>  drivers/infiniband/core/umem.c            | 83 +++++++++++++++++++++----------
>  drivers/infiniband/core/umem_odp.c        |  3 --
>  drivers/infiniband/core/verbs.c           | 68 +++++++++++++++++++++++++
>  drivers/infiniband/hw/bnxt_re/ib_verbs.c  | 27 ++++------
>  drivers/infiniband/hw/i40iw/i40iw_verbs.c | 47 +++--------------
>  drivers/infiniband/hw/i40iw/i40iw_verbs.h |  3 +-
>  include/rdma/ib_umem.h                    | 20 +++++++-
>  include/rdma/ib_verbs.h                   | 81 ++++++++++++++++++++++++++++++
>  8 files changed, 245 insertions(+), 87 deletions(-)
> 

Tested the series with EFA, looks good.

Tested-by: Gal Pressman <galpress@xxxxxxxxxx>



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux