mbox series

[v4,0/8] Create 'old' ptes for faultaround mappings on arm64 with hardware access flag

Message ID 20210120173612.20913-1-will@kernel.org (mailing list archive)
Headers show
Series Create 'old' ptes for faultaround mappings on arm64 with hardware access flag | expand

Message

Will Deacon Jan. 20, 2021, 5:36 p.m. UTC
Hi all,

This is version four of the patches I previously posted here:

  v1: https://lore.kernel.org/r/20201209163950.8494-1-will@kernel.org
  v2: https://lore.kernel.org/r/20210108171517.5290-1-will@kernel.org
  v3: https://lore.kernel.org/r/20210114175934.13070-1-will@kernel.org

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@arm.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Vinayak Menon <vinmenon@codeaurora.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: <kernel-team@android.com>

--->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(-)

Comments

Will Deacon Jan. 26, 2021, 11:08 p.m. UTC | #1
On Wed, Jan 20, 2021 at 05:36:04PM +0000, Will Deacon wrote:
> Hi all,
> 
> This is version four of the patches I previously posted here:
> 
>   v1: https://lore.kernel.org/r/20201209163950.8494-1-will@kernel.org
>   v2: https://lore.kernel.org/r/20210108171517.5290-1-will@kernel.org
>   v3: https://lore.kernel.org/r/20210114175934.13070-1-will@kernel.org
> 
> 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.

The only changes I have pending against this series are cosmetic (commit
logs). Can I go ahead and queue this in the arm64 tree so that it can sit
in linux-next for a bit? (positive or negative feedback appreciated!).

Thanks,

Will
Hugh Dickins Jan. 26, 2021, 11:28 p.m. UTC | #2
On Tue, 26 Jan 2021, Will Deacon wrote:
> On Wed, Jan 20, 2021 at 05:36:04PM +0000, Will Deacon wrote:
> > Hi all,
> > 
> > This is version four of the patches I previously posted here:
> > 
> >   v1: https://lore.kernel.org/r/20201209163950.8494-1-will@kernel.org
> >   v2: https://lore.kernel.org/r/20210108171517.5290-1-will@kernel.org
> >   v3: https://lore.kernel.org/r/20210114175934.13070-1-will@kernel.org
> > 
> > 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.
> 
> The only changes I have pending against this series are cosmetic (commit
> logs). Can I go ahead and queue this in the arm64 tree so that it can sit
> in linux-next for a bit? (positive or negative feedback appreciated!).

That would be fine by me: I ran v3 on rc3, then the nicer smaller v4
on rc4, and saw no problems when running either of them (x86_64 only).

Hugh
Will Deacon Jan. 27, 2021, 5:16 p.m. UTC | #3
On Tue, Jan 26, 2021 at 03:28:22PM -0800, Hugh Dickins wrote:
> On Tue, 26 Jan 2021, Will Deacon wrote:
> > On Wed, Jan 20, 2021 at 05:36:04PM +0000, Will Deacon wrote:
> > > Hi all,
> > > 
> > > This is version four of the patches I previously posted here:
> > > 
> > >   v1: https://lore.kernel.org/r/20201209163950.8494-1-will@kernel.org
> > >   v2: https://lore.kernel.org/r/20210108171517.5290-1-will@kernel.org
> > >   v3: https://lore.kernel.org/r/20210114175934.13070-1-will@kernel.org
> > > 
> > > 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.
> > 
> > The only changes I have pending against this series are cosmetic (commit
> > logs). Can I go ahead and queue this in the arm64 tree so that it can sit
> > in linux-next for a bit? (positive or negative feedback appreciated!).
> 
> That would be fine by me: I ran v3 on rc3, then the nicer smaller v4
> on rc4, and saw no problems when running either of them (x86_64 only).

Thanks, Hugh. I'll stick these into -next later today and we'll see how we
get on.

Will