dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/11] mm: rewrite pfnmap tracking and remove VM_PAT
@ 2025-05-12 12:34 David Hildenbrand
  2025-05-12 12:34 ` [PATCH v2 01/11] x86/mm/pat: factor out setting cachemode into pgprot_set_cachemode() David Hildenbrand
                   ` (11 more replies)
  0 siblings, 12 replies; 36+ messages in thread
From: David Hildenbrand @ 2025-05-12 12:34 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, x86, intel-gfx, dri-devel, linux-trace-kernel,
	David Hildenbrand, Dave Hansen, Andy Lutomirski, Peter Zijlstra,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin,
	Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, Tvrtko Ursulin,
	David Airlie, Simona Vetter, Andrew Morton, Steven Rostedt,
	Masami Hiramatsu, Mathieu Desnoyers, Liam R. Howlett,
	Lorenzo Stoakes, Vlastimil Babka, Jann Horn, Pedro Falcato,
	Peter Xu

On top of mm-unstable.

VM_PAT annoyed me too much and wasted too much of my time, let's clean
PAT handling up and remove VM_PAT.

This should sort out various issues with VM_PAT we discovered recently,
and will hopefully make the whole code more stable and easier to maintain.

In essence: we stop letting PAT mode mess with VMAs and instead lift
what to track/untrack to the MM core. We remember per VMA which pfn range
we tracked in a new struct we attach to a VMA (we have space without
exceeding 192 bytes), use a kref to share it among VMAs during
split/mremap/fork, and automatically untrack once the kref drops to 0.

This implies that we'll keep tracking a full pfn range even after partially
unmapping it, until fully unmapping it; but as that case was mostly broken
before, this at least makes it work in a way that is least intrusive to
VMA handling.

Shrinking with mremap() used to work in a hacky way, now we'll similarly
keep the original pfn range tacked even after this form of partial unmap.
Does anybody care about that? Unlikely. If we run into issues, we could
likely handled that (adjust the tracking) when our kref drops to 1 while
freeing a VMA. But it adds more complexity, so avoid that for now.

Briefly tested with the new pfnmap selftests [1].

[1] https://lkml.kernel.org/r/20250509153033.952746-1-david@redhat.com

Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tursulin@ursulin.net>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Pedro Falcato <pfalcato@suse.de>
Cc: Peter Xu <peterx@redhat.com>

v1 -> v2:
* "mm: convert track_pfn_insert() to pfnmap_setup_cachemode*()"
 -> Call it "pfnmap_setup_cachemode()" and improve the documentation
 -> Add pfnmap_setup_cachemode_pfn()
 -> Keep checking a single PFN for PMD/PUD case and document why it's ok
* Merged memremap conversion patch with pfnmap_track() introduction patch
 -> Improve documentation
* "mm: convert VM_PFNMAP tracking to pfnmap_track() + pfnmap_untrack()"
 -> Adjust to code changes in mm-unstable
* Added "x86/mm/pat: inline memtype_match() into memtype_erase()"
* "mm/io-mapping: track_pfn() -> "pfnmap tracking""
 -> Adjust to code changes in mm-unstable

David Hildenbrand (11):
  x86/mm/pat: factor out setting cachemode into pgprot_set_cachemode()
  mm: convert track_pfn_insert() to pfnmap_setup_cachemode*()
  mm: introduce pfnmap_track() and pfnmap_untrack() and use them for
    memremap
  mm: convert VM_PFNMAP tracking to pfnmap_track() + pfnmap_untrack()
  x86/mm/pat: remove old pfnmap tracking interface
  mm: remove VM_PAT
  x86/mm/pat: remove strict_prot parameter from reserve_pfn_range()
  x86/mm/pat: remove MEMTYPE_*_MATCH
  x86/mm/pat: inline memtype_match() into memtype_erase()
  drm/i915: track_pfn() -> "pfnmap tracking"
  mm/io-mapping: track_pfn() -> "pfnmap tracking"

 arch/x86/mm/pat/memtype.c          | 194 ++++-------------------------
 arch/x86/mm/pat/memtype_interval.c |  63 ++--------
 drivers/gpu/drm/i915/i915_mm.c     |   4 +-
 include/linux/mm.h                 |   4 +-
 include/linux/mm_inline.h          |   2 +
 include/linux/mm_types.h           |  11 ++
 include/linux/pgtable.h            | 127 ++++++++++---------
 include/trace/events/mmflags.h     |   4 +-
 mm/huge_memory.c                   |   5 +-
 mm/io-mapping.c                    |   2 +-
 mm/memory.c                        |  86 ++++++++++---
 mm/memremap.c                      |   8 +-
 mm/mmap.c                          |   5 -
 mm/mremap.c                        |   4 -
 mm/vma_init.c                      |  50 ++++++++
 15 files changed, 242 insertions(+), 327 deletions(-)


base-commit: c68cfbc5048ede4b10a1d3fe16f7f6192fc2c9c8
-- 
2.49.0


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

end of thread, other threads:[~2025-05-15 14:10 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-12 12:34 [PATCH v2 00/11] mm: rewrite pfnmap tracking and remove VM_PAT David Hildenbrand
2025-05-12 12:34 ` [PATCH v2 01/11] x86/mm/pat: factor out setting cachemode into pgprot_set_cachemode() David Hildenbrand
2025-05-13 17:29   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 02/11] mm: convert track_pfn_insert() to pfnmap_setup_cachemode*() David Hildenbrand
2025-05-12 15:43   ` Lorenzo Stoakes
2025-05-13  9:06     ` David Hildenbrand
2025-05-13 17:29   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 03/11] mm: introduce pfnmap_track() and pfnmap_untrack() and use them for memremap David Hildenbrand
2025-05-13 17:40   ` Liam R. Howlett
2025-05-14 17:57     ` David Hildenbrand
2025-05-12 12:34 ` [PATCH v2 04/11] mm: convert VM_PFNMAP tracking to pfnmap_track() + pfnmap_untrack() David Hildenbrand
2025-05-12 16:42   ` Lorenzo Stoakes
2025-05-13  9:10     ` David Hildenbrand
2025-05-13 10:16       ` Lorenzo Stoakes
2025-05-13 10:22         ` David Hildenbrand
2025-05-13 17:42   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 05/11] x86/mm/pat: remove old pfnmap tracking interface David Hildenbrand
2025-05-13 17:42   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 06/11] mm: remove VM_PAT David Hildenbrand
2025-05-13 17:42   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 07/11] x86/mm/pat: remove strict_prot parameter from reserve_pfn_range() David Hildenbrand
2025-05-13 17:43   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 08/11] x86/mm/pat: remove MEMTYPE_*_MATCH David Hildenbrand
2025-05-13 17:48   ` Liam R. Howlett
2025-05-14 17:53     ` David Hildenbrand
2025-05-15 14:10       ` David Hildenbrand
2025-05-12 12:34 ` [PATCH v2 09/11] x86/mm/pat: inline memtype_match() into memtype_erase() David Hildenbrand
2025-05-12 16:49   ` Lorenzo Stoakes
2025-05-13  9:11     ` David Hildenbrand
2025-05-13 17:49   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 10/11] drm/i915: track_pfn() -> "pfnmap tracking" David Hildenbrand
2025-05-13 17:50   ` Liam R. Howlett
2025-05-12 12:34 ` [PATCH v2 11/11] mm/io-mapping: " David Hildenbrand
2025-05-13 17:50   ` Liam R. Howlett
2025-05-13 15:53 ` [PATCH v2 00/11] mm: rewrite pfnmap tracking and remove VM_PAT Liam R. Howlett
2025-05-13 17:17   ` David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).