On Tue, Oct 1, 2019 at 10:44 AM Jason Gunthorpe <j...@ziepe.ca> wrote: > > On Tue, Oct 01, 2019 at 10:26:38AM -0700, Alan Mikhak wrote: > > > > > Cost of adding page structs to a large PCI I/O address range can be > > > > quite substantial. Allowing PCI I/O pages without page structs may be > > > > desirable. Perhaps it is worth considering this cost. > > > > > > This is generally agreed, but nobody has figured out a solution. > > > > > > > Scatterlist has no problem doing its memcpy() from pages without a > > > > page struct that were obtained from ioremap(). It is only at > > > > > > Calling memcpy on pointers from ioremap is very much not allowed. Code > > > has to use the iomem safe memcpy. > > > > Is it in the realm of possible to add support for such PCI I/O pages > > to scatterlist? Perhaps some solution is possible by adding a new > > function, say sg_set_iomem_page(), and a new SG_MITER_IOMEM flag that > > tells scatterlist to use iomem safe memcpy functions when the page is > > not backed by page struct because it was obtained from ioremap(). This > > flag can also be used at sg_miter_stop() to not call PageSlab() or > > flush_kernel_dcache_page(). > > People have tried many different things so far, it is more comple than > just the copy functions as there is also sg_page to worry about. > > > If supporting PCI I/O pages is not possible, would it be possible to > > check for invalid page pointers in sg_set_page() and communicate the > > requirement for a page struct backing in its description? > > Clarifying the comments seems reasonable to me. > > Jason
Thanks Jason. I'll submit a patch to communicate the requirement in the description of sg_set_page(). Alan