Re: [RFC PATCH v2 2/3] mm: make pXd_addr_end() functions page-table entry aware

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
From: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>

Unlike all other page-table abstractions pXd_addr_end() do not take
into account a particular table entry in which context the functions
are called. On architectures with dynamic page-tables folding that
might lead to lack of necessary information that is difficult to
obtain other than from the table entry itself. That already led to
a subtle memory corruption issue on s390.

By letting pXd_addr_end() functions know about the page-table entry
we allow archs not only make extra checks, but also optimizations.

As result of this change the pXd_addr_end_folded() functions used
in gup_fast traversal code become unnecessary and get replaced with
universal pXd_addr_end() variants.

The arch-specific updates not only add dereferencing of page-table
entry pointers, but also small changes to the code flow to make those
dereferences possible, at least for x86 and powerpc. Also for arm64,
but in way that should not have any impact.


[...]


Signed-off-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
Signed-off-by: Gerald Schaefer <gerald.schaefer@xxxxxxxxxxxxx>
---
  arch/arm/include/asm/pgtable-2level.h    |  2 +-
  arch/arm/mm/idmap.c                      |  6 ++--
  arch/arm/mm/mmu.c                        |  8 ++---
  arch/arm64/kernel/hibernate.c            | 16 ++++++----
  arch/arm64/kvm/mmu.c                     | 16 +++++-----
  arch/arm64/mm/kasan_init.c               |  8 ++---
  arch/arm64/mm/mmu.c                      | 25 +++++++--------
  arch/powerpc/mm/book3s64/radix_pgtable.c |  7 ++---
  arch/powerpc/mm/hugetlbpage.c            |  6 ++--

You forgot arch/powerpc/mm/book3s64/subpage_prot.c it seems.

  arch/s390/include/asm/pgtable.h          |  8 ++---
  arch/s390/mm/page-states.c               |  8 ++---
  arch/s390/mm/pageattr.c                  |  8 ++---
  arch/s390/mm/vmem.c                      |  8 ++---
  arch/sparc/mm/hugetlbpage.c              |  6 ++--
  arch/um/kernel/tlb.c                     |  8 ++---
  arch/x86/mm/init_64.c                    | 15 ++++-----
  arch/x86/mm/kasan_init_64.c              | 16 +++++-----
  include/asm-generic/pgtable-nop4d.h      |  2 +-
  include/asm-generic/pgtable-nopmd.h      |  2 +-
  include/asm-generic/pgtable-nopud.h      |  2 +-
  include/linux/pgtable.h                  | 26 ++++-----------
  mm/gup.c                                 |  8 ++---
  mm/ioremap.c                             |  8 ++---
  mm/kasan/init.c                          | 17 +++++-----
  mm/madvise.c                             |  4 +--
  mm/memory.c                              | 40 ++++++++++++------------
  mm/mlock.c                               | 18 ++++++++---
  mm/mprotect.c                            |  8 ++---
  mm/pagewalk.c                            |  8 ++---
  mm/swapfile.c                            |  8 ++---
  mm/vmalloc.c                             | 16 +++++-----
  31 files changed, 165 insertions(+), 173 deletions(-)

Christophe





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux