Hi all, This is version four of the patches I previously posted here: v1: https://lore.kernel.org/r/20201209163950.8494-1-will@xxxxxxxxxx v2: https://lore.kernel.org/r/20210108171517.5290-1-will@xxxxxxxxxx v3: https://lore.kernel.org/r/20210114175934.13070-1-will@xxxxxxxxxx The patches allow architectures to opt-in at runtime for faultaround mappings to be created as 'old' instead of 'young'. Although there have been previous attempts at this, they failed either because the decision was deferred to userspace [1] or because it was done unconditionally and shown to regress benchmarks for particular architectures [2]. The big change since v3 is that the immutable fields of 'struct vm_fault' now live in a 'const' anonymous struct. Although Clang will silently accept modifications to these fields [3], GCC emits an error. The resulting diffstat is _considerably_ more manageable with this approach. As before, I've also updated this branch: https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/log/?h=faultaround Cheers, Will [1] https://www.spinics.net/lists/linux-mm/msg143831.html [2] 315d09bf30c2 ("Revert "mm: make faultaround produce old ptes"") [3] https://bugs.llvm.org/show_bug.cgi?id=48755 Cc: Catalin Marinas <catalin.marinas@xxxxxxx> Cc: Jan Kara <jack@xxxxxxx> Cc: Minchan Kim <minchan@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Vinayak Menon <vinmenon@xxxxxxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Cc: <kernel-team@xxxxxxxxxxx> --->8 Kirill A. Shutemov (1): mm: Cleanup faultaround and finish_fault() codepaths Will Deacon (7): mm: Allow architectures to request 'old' entries when prefaulting arm64: mm: Implement arch_wants_old_prefaulted_pte() mm: Move immutable fields of 'struct vm_fault' into anonymous struct mm: Pass 'address' to map to do_set_pte() and drop FAULT_FLAG_PREFAULT mm: Avoid modifying vmf.address in __collapse_huge_page_swapin() mm: Use static initialisers for immutable fields of 'struct vm_fault' mm: Mark anonymous struct field of 'struct vm_fault' as 'const' arch/arm64/include/asm/pgtable.h | 12 +- fs/xfs/xfs_file.c | 6 +- include/linux/mm.h | 25 ++-- include/linux/pgtable.h | 11 ++ mm/filemap.c | 178 ++++++++++++++++++------ mm/khugepaged.c | 37 +++-- mm/memory.c | 223 +++++++++++-------------------- mm/shmem.c | 6 +- mm/swapfile.c | 11 +- 9 files changed, 280 insertions(+), 229 deletions(-) -- 2.30.0.284.gd98b1dd5eaa7-goog