On 9/30/19 7:12 PM, Linus Torvalds wrote:
On Mon, Sep 30, 2019 at 6:04 AM Kirill A. Shutemov kirill@shutemov.name wrote:
Have you seen page_vma_mapped_walk()? I made it specifically for rmap code to cover cases when a THP is mapped with PTEs. To me it's not a big stretch to make it cover multiple pages too.
I agree that is closer, but it does make for calling that big complex function for every iteration step.
Of course, you are right that the callback approach is problematic too, now that we have retpoline issues, making those very expensive. But at least that hopefully gets fixed some day and gets to be a rare problem.
Matter ot taste, I guess.
Linus
Matthew Wilcox suggested something similar before the pagewalk.c rewrite:
https://lore.kernel.org/lkml/20190806190937.GD30179@bombadil.infradead.org/
Still, In this case I'd opt for using the pagewalk code: In the dirty helpers we don't ever use a struct page, but only deal with PTE entries, same as the pagewalk code does, but not page_vma_mapped_walk(). The underlying memory may well be IO memory.
/Thomas