All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/4] arch, mm: improve robustness of direct map manipulation
@ 2020-11-09 19:21 ` Mike Rapoport
  0 siblings, 0 replies; 30+ messages in thread
From: Mike Rapoport @ 2020-11-09 19:21 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Albert Ou, Andy Lutomirski, Benjamin Herrenschmidt,
	Borislav Petkov, Catalin Marinas, Christian Borntraeger,
	Christoph Lameter, David S. Miller, Dave Hansen,
	David Hildenbrand, David Rientjes, Edgecombe, Rick P,
	H. Peter Anvin, Heiko Carstens, Ingo Molnar, Joonsoo Kim,
	Kirill A . Shutemov, Kirill A. Shutemov, Len Brown,
	Michael Ellerman, Mike Rapoport, Mike Rapoport, Palmer Dabbelt,
	Paul Mackerras, Paul Walmsley, Pavel Machek, Pekka Enberg,
	Peter Zijlstra, Rafael J. Wysocki, Thomas Gleixner,
	Vasily Gorbik, Vlastimil Babka, Will Deacon, linux-arm-kernel,
	linux-kernel, linux-mm, linux-pm, linux-riscv, linux-s390,
	linuxppc-dev, sparclinux, x86

From: Mike Rapoport <rppt@linux.ibm.com>

Hi,

During recent discussion about KVM protected memory, David raised a concern
about usage of __kernel_map_pages() outside of DEBUG_PAGEALLOC scope [1].

Indeed, for architectures that define CONFIG_ARCH_HAS_SET_DIRECT_MAP it is
possible that __kernel_map_pages() would fail, but since this function is
void, the failure will go unnoticed.

Moreover, there's lack of consistency of __kernel_map_pages() semantics
across architectures as some guard this function with
#ifdef DEBUG_PAGEALLOC, some refuse to update the direct map if page
allocation debugging is disabled at run time and some allow modifying the
direct map regardless of DEBUG_PAGEALLOC settings.

This set straightens this out by restoring dependency of
__kernel_map_pages() on DEBUG_PAGEALLOC and updating the call sites
accordingly. 

Since currently the only user of __kernel_map_pages() outside
DEBUG_PAGEALLOC is hibernation, it is updated to make direct map accesses
there more explicit.

[1] https://lore.kernel.org/lkml/2759b4bf-e1e3-d006-7d86-78a40348269d@redhat.com

v7 changes:
* fix a rebase error that sneaked into v6 after removal of slab changes

v6 changes:
* revert slab changes to avoid redundant check of static key
https://lore.kernel.org/lkml/20201109162415.13764-1-rppt@kernel.org

v5 changes:
* use pairs of _map()/_unmap() functions instead of _map(..., int enable) as
  Vlastimil suggested
https://lore.kernel.org/lkml/20201108065758.1815-1-rppt@kernel.org

v4 changes:
* s/WARN_ON/pr_warn_once/ per David and Kirill
* rebase on v5.10-rc2
* add Acked/Reviewed tags
https://lore.kernel.org/lkml/20201103162057.22916-1-rppt@kernel.org

v3 changes:
* update arm64 changes to avoid regression, per Rick's comments
* fix bisectability
https://lore.kernel.org/lkml/20201101170815.9795-1-rppt@kernel.org

v2 changes:
* Rephrase patch 2 changelog to better describe the change intentions and
implications
* Move removal of kernel_map_pages() from patch 1 to patch 2, per David
https://lore.kernel.org/lkml/20201029161902.19272-1-rppt@kernel.org

v1:
https://lore.kernel.org/lkml/20201025101555.3057-1-rppt@kernel.org

Mike Rapoport (4):
  mm: introduce debug_pagealloc_{map,unmap}_pages() helpers
  PM: hibernate: make direct map manipulations more explicit
  arch, mm: restore dependency of __kernel_map_pages() on DEBUG_PAGEALLOC
  arch, mm: make kernel_page_present() always available

 arch/Kconfig                        |  3 +++
 arch/arm64/Kconfig                  |  4 +--
 arch/arm64/include/asm/cacheflush.h |  1 +
 arch/arm64/mm/pageattr.c            |  6 +++--
 arch/powerpc/Kconfig                |  5 +---
 arch/riscv/Kconfig                  |  4 +--
 arch/riscv/include/asm/pgtable.h    |  2 --
 arch/riscv/include/asm/set_memory.h |  1 +
 arch/riscv/mm/pageattr.c            | 31 ++++++++++++++++++++++
 arch/s390/Kconfig                   |  4 +--
 arch/sparc/Kconfig                  |  4 +--
 arch/x86/Kconfig                    |  4 +--
 arch/x86/include/asm/set_memory.h   |  1 +
 arch/x86/mm/pat/set_memory.c        |  4 +--
 include/linux/mm.h                  | 40 ++++++++++++++---------------
 include/linux/set_memory.h          |  5 ++++
 kernel/power/snapshot.c             | 38 +++++++++++++++++++++++++--
 mm/memory_hotplug.c                 |  3 +--
 mm/page_alloc.c                     |  6 ++---
 19 files changed, 113 insertions(+), 53 deletions(-)

-- 
2.28.0

*** BLURB HERE ***

Mike Rapoport (4):
  mm: introduce debug_pagealloc_{map,unmap}_pages() helpers
  PM: hibernate: make direct map manipulations more explicit
  arch, mm: restore dependency of __kernel_map_pages() on
    DEBUG_PAGEALLOC
  arch, mm: make kernel_page_present() always available

 arch/Kconfig                        |  3 +++
 arch/arm64/Kconfig                  |  4 +--
 arch/arm64/include/asm/cacheflush.h |  1 +
 arch/arm64/mm/pageattr.c            |  6 +++--
 arch/powerpc/Kconfig                |  5 +---
 arch/riscv/Kconfig                  |  4 +--
 arch/riscv/include/asm/pgtable.h    |  2 --
 arch/riscv/include/asm/set_memory.h |  1 +
 arch/riscv/mm/pageattr.c            | 31 ++++++++++++++++++++++
 arch/s390/Kconfig                   |  4 +--
 arch/sparc/Kconfig                  |  4 +--
 arch/x86/Kconfig                    |  4 +--
 arch/x86/include/asm/set_memory.h   |  1 +
 arch/x86/mm/pat/set_memory.c        |  4 +--
 include/linux/mm.h                  | 40 ++++++++++++++---------------
 include/linux/set_memory.h          |  5 ++++
 kernel/power/snapshot.c             | 38 +++++++++++++++++++++++++--
 mm/memory_hotplug.c                 |  3 +--
 mm/page_alloc.c                     |  6 ++---
 mm/slab.c                           |  2 +-
 20 files changed, 114 insertions(+), 54 deletions(-)

-- 
2.28.0


^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2020-11-10 10:05 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-09 19:21 [PATCH v7 0/4] arch, mm: improve robustness of direct map manipulation Mike Rapoport
2020-11-09 19:21 ` Mike Rapoport
2020-11-09 19:21 ` Mike Rapoport
2020-11-09 19:21 ` Mike Rapoport
2020-11-09 19:21 ` Mike Rapoport
2020-11-09 19:21 ` [PATCH v7 1/4] mm: introduce debug_pagealloc_{map,unmap}_pages() helpers Mike Rapoport
2020-11-09 19:21   ` [PATCH v7 1/4] mm: introduce debug_pagealloc_{map, unmap}_pages() helpers Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` [PATCH v7 1/4] mm: introduce debug_pagealloc_{map,unmap}_pages() helpers Mike Rapoport
2020-11-09 19:21 ` [PATCH v7 2/4] PM: hibernate: make direct map manipulations more explicit Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21 ` [PATCH v7 3/4] arch, mm: restore dependency of __kernel_map_pages() on DEBUG_PAGEALLOC Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21 ` [PATCH v7 4/4] arch, mm: make kernel_page_present() always available Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-09 19:21   ` Mike Rapoport
2020-11-10 10:02   ` David Hildenbrand
2020-11-10 10:02     ` David Hildenbrand
2020-11-10 10:02     ` David Hildenbrand
2020-11-10 10:02     ` David Hildenbrand
2020-11-10 10:02     ` David Hildenbrand

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.