From: David Hildenbrand <david@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org,
intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-trace-kernel@vger.kernel.org,
Dave Hansen <dave.hansen@linux.intel.com>,
Andy Lutomirski <luto@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Jani Nikula <jani.nikula@linux.intel.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Tvrtko Ursulin <tursulin@ursulin.net>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Andrew Morton <akpm@linux-foundation.org>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Vlastimil Babka <vbabka@suse.cz>, Jann Horn <jannh@google.com>,
Pedro Falcato <pfalcato@suse.de>
Subject: Re: [PATCH v1 02/11] mm: convert track_pfn_insert() to pfnmap_sanitize_pgprot()
Date: Fri, 25 Apr 2025 21:48:50 +0200 [thread overview]
Message-ID: <78f88303-6b00-42cf-8977-bf7541fa45a9@redhat.com> (raw)
In-Reply-To: <aAvjJOmvm5GsZ-JN@x1.local>
On 25.04.25 21:31, Peter Xu wrote:
> On Fri, Apr 25, 2025 at 10:17:06AM +0200, David Hildenbrand wrote:
>> ... by factoring it out from track_pfn_remap().
>>
>> For PMDs/PUDs, actually check the full range, and trigger a fallback
>> if we run into this "different memory types / cachemodes" scenario.
>
> The current patch looks like to still pass PAGE_SIZE into the new helper at
> all track_pfn_insert() call sites, so it seems this comment does not 100%
> match with the code? Or I may have misread somewhere.
No, you're right, while reshuffling the patches I forgot to add the
actual PMD/PUD size.
>
> Maybe it's still easier to keep the single-pfn lookup to never fail.. more
> below.
>
[...]
>> /*
>> @@ -1556,8 +1553,23 @@ static inline void untrack_pfn_clear(struct vm_area_struct *vma)
>> extern int track_pfn_remap(struct vm_area_struct *vma, pgprot_t *prot,
>> unsigned long pfn, unsigned long addr,
>> unsigned long size);
>> -extern void track_pfn_insert(struct vm_area_struct *vma, pgprot_t *prot,
>> - pfn_t pfn);
>> +
>> +/**
>> + * pfnmap_sanitize_pgprot - sanitize the pgprot for a pfn range
>
> Nit: s/sanitize/update|setup|.../?
>
> But maybe you have good reason to use sanitize. No strong opinions.
What it does on PAT (only implementation so far ...) is looking up the
memory type to select the caching mode that can be use.
"sanitize" was IMHO a good fit, because we must make sure that we don't
use the wrong caching mode.
update/setup/... don't make that quite clear. Any other suggestions?
>
>> + * @pfn: the start of the pfn range
>> + * @size: the size of the pfn range
>> + * @prot: the pgprot to sanitize
>> + *
>> + * Sanitize the given pgprot for a pfn range, for example, adjusting the
>> + * cachemode.
>> + *
>> + * This function cannot fail for a single page, but can fail for multiple
>> + * pages.
>> + *
>> + * Returns 0 on success and -EINVAL on error.
>> + */
>> +int pfnmap_sanitize_pgprot(unsigned long pfn, unsigned long size,
>> + pgprot_t *prot);
>> extern int track_pfn_copy(struct vm_area_struct *dst_vma,
>> struct vm_area_struct *src_vma, unsigned long *pfn);
>> extern void untrack_pfn_copy(struct vm_area_struct *dst_vma,
>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
>> index fdcf0a6049b9f..b8ae5e1493315 100644
>> --- a/mm/huge_memory.c
>> +++ b/mm/huge_memory.c
>> @@ -1455,7 +1455,9 @@ vm_fault_t vmf_insert_pfn_pmd(struct vm_fault *vmf, pfn_t pfn, bool write)
>> return VM_FAULT_OOM;
>> }
>>
>> - track_pfn_insert(vma, &pgprot, pfn);
>> + if (pfnmap_sanitize_pgprot(pfn_t_to_pfn(pfn), PAGE_SIZE, &pgprot))
>> + return VM_FAULT_FALLBACK;
>
> Would "pgtable" leak if it fails? If it's PAGE_SIZE, IIUC it won't ever
> trigger, though.
>
> Maybe we could have a "void pfnmap_sanitize_pgprot_pfn(&pgprot, pfn)" to
> replace track_pfn_insert() and never fail? Dropping vma ref is definitely
> a win already in all cases.
It could be a simple wrapper around pfnmap_sanitize_pgprot(), yes.
That's certainly helpful for the single-page case.
Regarding never failing here: we should check the whole range. We have
to make sure that none of the pages has a memory type / caching mode
that is incompatible with what we setup.
Thanks a bunch for the review!
--
Cheers,
David / dhildenb
next prev parent reply other threads:[~2025-04-25 19:48 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-25 8:17 [PATCH v1 00/11] mm: rewrite pfnmap tracking and remove VM_PAT David Hildenbrand
2025-04-25 8:17 ` [PATCH v1 01/11] x86/mm/pat: factor out setting cachemode into pgprot_set_cachemode() David Hildenbrand
2025-04-28 16:16 ` Lorenzo Stoakes
2025-04-28 16:19 ` David Hildenbrand
2025-04-25 8:17 ` [PATCH v1 02/11] mm: convert track_pfn_insert() to pfnmap_sanitize_pgprot() David Hildenbrand
2025-04-25 19:31 ` Peter Xu
2025-04-25 19:48 ` David Hildenbrand [this message]
2025-04-25 23:59 ` Peter Xu
2025-04-28 14:58 ` David Hildenbrand
2025-04-28 16:21 ` Peter Xu
2025-04-28 20:37 ` David Hildenbrand
2025-04-29 13:44 ` Peter Xu
2025-04-29 16:25 ` David Hildenbrand
2025-04-29 16:36 ` Peter Xu
2025-04-25 19:56 ` David Hildenbrand
2025-04-25 8:17 ` [PATCH v1 03/11] x86/mm/pat: introduce pfnmap_track() and pfnmap_untrack() David Hildenbrand
2025-04-28 16:53 ` Lorenzo Stoakes
2025-04-28 17:12 ` David Hildenbrand
2025-04-28 18:58 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 04/11] mm/memremap: convert to pfnmap_track() + pfnmap_untrack() David Hildenbrand
2025-04-25 20:00 ` Peter Xu
2025-04-25 20:14 ` David Hildenbrand
2025-04-28 16:54 ` Lorenzo Stoakes
2025-04-28 17:07 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 05/11] mm: convert VM_PFNMAP tracking " David Hildenbrand
2025-04-25 20:23 ` Peter Xu
2025-04-25 20:36 ` David Hildenbrand
2025-04-28 16:08 ` Peter Xu
2025-04-28 16:16 ` David Hildenbrand
2025-04-28 16:24 ` Peter Xu
2025-04-28 17:23 ` David Hildenbrand
2025-04-28 19:37 ` Lorenzo Stoakes
2025-04-28 19:57 ` Suren Baghdasaryan
2025-04-28 20:23 ` David Hildenbrand
2025-04-28 20:19 ` David Hildenbrand
2025-04-28 19:38 ` Lorenzo Stoakes
2025-04-28 20:00 ` Suren Baghdasaryan
2025-04-28 20:21 ` David Hildenbrand
2025-04-28 20:10 ` Lorenzo Stoakes
2025-05-05 13:00 ` David Hildenbrand
2025-05-07 13:25 ` David Hildenbrand
2025-05-07 14:27 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 06/11] x86/mm/pat: remove old pfnmap tracking interface David Hildenbrand
2025-04-28 20:12 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 07/11] mm: remove VM_PAT David Hildenbrand
2025-04-28 20:16 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 08/11] x86/mm/pat: remove strict_prot parameter from reserve_pfn_range() David Hildenbrand
2025-04-28 20:18 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 09/11] x86/mm/pat: remove MEMTYPE_*_MATCH David Hildenbrand
2025-04-28 20:23 ` Lorenzo Stoakes
2025-05-05 12:10 ` David Hildenbrand
2025-05-06 9:30 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 10/11] drm/i915: track_pfn() -> "pfnmap tracking" David Hildenbrand
2025-04-28 20:23 ` Lorenzo Stoakes
2025-04-25 8:17 ` [PATCH v1 11/11] mm/io-mapping: " David Hildenbrand
2025-04-28 16:06 ` Lorenzo Stoakes
2025-04-28 16:14 ` David Hildenbrand
2025-04-25 8:54 ` [PATCH v1 00/11] mm: rewrite pfnmap tracking and remove VM_PAT Ingo Molnar
2025-04-25 9:27 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=78f88303-6b00-42cf-8977-bf7541fa45a9@redhat.com \
--to=david@redhat.com \
--cc=Liam.Howlett@oracle.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hpa@zytor.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=jannh@google.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=luto@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=peterx@redhat.com \
--cc=peterz@infradead.org \
--cc=pfalcato@suse.de \
--cc=rodrigo.vivi@intel.com \
--cc=rostedt@goodmis.org \
--cc=simona@ffwll.ch \
--cc=tglx@linutronix.de \
--cc=tursulin@ursulin.net \
--cc=vbabka@suse.cz \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).