On Fri, Jan 04, 2019 at 10:35:43PM +0000, Jason Gunthorpe wrote:
Commit 2db76d7c3c6d ("lib/scatterlist: sg_page_iter: support sg lists w/o backing pages") introduced the sg_page_iter_dma_address() function without providing a way to use it in the general case. If the sg_dma_len is not equal to the dma_length callers cannot safely use the for_each_sg_page/sg_page_iter_dma_address combination.
Resolve this API mistake by providing a DMA specific iterator, for_each_sg_dma_page(), that uses the right length so sg_page_iter_dma_address() works as expected with all sglists. A new iterator type is introduced to provide compile-time safety against wrongly mixing accessors and iterators.
Signed-off-by: Jason Gunthorpe jgg@mellanox.com
Acked-by: Sakari Ailus sakari.ailus@linux.intel.com (ipu3-cio2)