Re: [PATCH rdma-next v4 10/12] RDMA/efa: Add EFA verbs implementation

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

 



On Thu, Mar 28, 2019 at 08:09:23PM +0200, Gal Pressman wrote:

> >> I'm not entirely up to date with Shiraz's work, wanna make sure I understand:
> >> Currently the umem sgl is built out of PAGE_SIZE elements. The reason we can't
> >> assume each element is PAGE_SIZE long is because the DMA mapping (iommu) might
> >> combine multiple elements or because Shiraz's work is going to combine the
> >> elements manually?
> > 
> > That is the existing reason, but this patch:
> > 
> > https://patchwork.kernel.org/patch/10875419/
> > 
> > Just directly makes larger SGL.
> 
> Why do we want to combine pages if the iommu does that for us? Isn't
> the only thing we need here is Shiraz's iterator that uses the device
> supported page sizes?

Only some iommu's do it (and sometimes only in some configurations),
and it doesn't happen if the iommu isn't used. We want a consistent
operation for IB drivers.

> >> Reading the documentation, sg_page_iter kinda looks like it covers
> >> sg_dma_page_iter functionality? Don't they both retrieve the DMA
> >> address page by page? Looks like the only difference is that in
> >> sg_page_iter I can get the struct page as well?
> > 
> > No.
> > 
> > A SGL contains two lists of different size, a 'dma mapped' list and a
> > 'CPU page list'. The act of DMA mapping creates the first list.
> > 
> > These lists cannot be intermixed, if you run over the CPU page list
> > you can't get DMA addresses, and vice versa.
> 
> The sg_page_iter documentation:
> 
> /*
>  * sg page iterator
>  *
>  * Iterates over sg entries page-by-page.  On each successful iteration, you
>  * can call sg_page_iter_page(@piter) to get the current page and its dma
>  * address. @piter->sg will point to the sg holding this page and
>  * @piter->sg_pgoffset to the page's page offset within the sg. The iteration
>  * will stop either when a maximum number of sg entries was reached or a
>  * terminating sg (sg_last(sg) == true) was reached.
>  */
> 
> It says you can call sg_page_iter_page() to get the current page and its dma
> address, should the documentation be updated to remove this part?

I missed that one 'dma address' when I fixed this :\ Send a patch?

Jason



[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