RE: [PATCH rdma-next v1 4/6] RDMA/i40iw: Use umem API to retrieve aligned DMA address

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

 



>Subject: Re: [PATCH rdma-next v1 4/6] RDMA/i40iw: Use umem API to retrieve
>aligned DMA address
>
>On Sat, Feb 23, 2019 at 01:26:41PM -0600, Shiraz Saleem wrote:
>> On Tue, Feb 19, 2019 at 09:07:29PM -0700, Jason Gunthorpe wrote:
>> > On Tue, Feb 19, 2019 at 08:57:43AM -0600, Shiraz Saleem wrote:
>> > > Call the core helpers to retrieve the HW aligned address to use
>> > > for the MR, within a supported i40iw page size.
>> > >
>> > > Remove code in i40iw to determine when MR is backed by 2M huge
>> > > pages which involves checking the umem->hugetlb flag and VMA
>inspection.
>> > > The core helpers will return the 2M aligned address if the MR is
>> > > backed by 2M pages.
>> > >
>> >
>> > > -	for_each_sg_dma_page (region->sg_head.sgl, &sg_iter, region->nmap,
>0) {
>> > > -		pg_addr = sg_page_iter_dma_address(&sg_iter);
>> > > -		if (first_pg)
>> > > -			*pbl = cpu_to_le64(pg_addr & iwmr->page_msk);
>> > > -		else if (!(pg_addr & ~iwmr->page_msk))
>> > > -			*pbl = cpu_to_le64(pg_addr);
>> > > -		else
>> > > -			continue;
>> > > -
>> > > -		first_pg = false;
>> > > +	for (ib_umem_start_phys_iter(region, &sg_phys_iter,
>> > > -		iwmr->page_size);
>> >
>> > Maybe this should be:
>> >
>> > for_each_sg_dma_page_sz (region->sg_head.sgl, &sg_iter, region->nmap,
>> >                          iwmr->page_size)
>> >
>> > ?
>> >
>> > Is there a reason to move away from the API we built here?
>> >
>> Yes. Its a different iterator type we need to use here and iterate the
>> SG list in contiguous aligned memory blocks as opposed to PAGE_SIZE
>> increments.
>
>I mean, why not add an option to the core api to do something other than
>PAGE_SIZE increments?
>

Not sure it's trivial and if it's that generic yet. The iterator ib_umem_next_phys_iter()
is reliant on best supported HW size passed in to get the pg_bit to use when
we iterate the SG list. 

And the best supported HW size is got via another umem  API
ib_umem_find_single_pg_size() specific to RDMA MRs which runs the SG list.

As we discussed here,
https://patchwork.kernel.org/patch/10499753/#22186847

We also ignore alignment of start of first sgl and end of last sgl which I thought
was specific to RDMA HW?

But maybe worth considering though for future work to extend as a scatterlist API. 

Shiraz



[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