On Fri, 30 Aug 2024 at 14:08, Dave Airlie <airlied@xxxxxxxxx> wrote: > > The TTM revert is due to some stuttering graphical apps probably due > to longer stalls while prefaulting. Yeah, trying to pre-fault a PMD worth of pages in one go is just crazy talk. Now, if it was PMD-aligned and you faulted in a single PMD, that would be different. But just doing prn_insert_page() in a loop is insane. The code doesn't even stop when it hits a page that already existed, and it keeps locking and unlocking the last-level page table over and over again. Honestly, that code is questionable even for the *small* value, much less the "a PMD size" case. Now, if you have an array of 'struct page *", you can use vm_insert_pages(), and that's reasonably efficient. And if you have a *contiguous* are of pfns, you can use remap_pfn_range(). But that "insert one pfn at a time" that the drm layer does is complete garbage. You're not speeding anything up, you're just digging deeper. Linus