On 27/04/17 05:20 PM, Jason Gunthorpe wrote:
It seems the most robust: test for iomem, and jump to a slow path
copy, otherwise inline the kmap and memcpy
Every place doing memcpy from sgl will need that pattern to be
correct.
Ok, sounds like a good place to start to me. I'll see what I can do for
a v3 of this set. Though, I probably won't send anything until after the
merge window.
>> sg_miter will still fail when the sg contains __iomem,
however I would
>> expect that the sg_copy will work with iomem, by using the __iomem
>> memcpy variant.
>
> Yes, that's true. Any sg_miters that ever see iomem will need to be
> converted to support it. This isn't much different than the other
> kmap(sg_page()) users I was converting that will also fail if they see
> iomem. Though, I suspect an sg_miter user would be easier to convert to
> iomem than a random kmap user.
How? sg_miter seems like the next nightmare down this path, what is
sg_miter_next supposed to do when something hits an iomem sgl?
My proposal is roughly included in the draft I sent upthread. We add an
sg_miter flag indicating the iteratee supports iomem and if miter finds
iomem (with the support flag set) it sets ioaddr which is __iomem. The
iteratee then just needs to null check addr and ioaddr and perform the
appropriate action.
Logan