linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* API for setting multiple PTEs at once
@ 2023-02-02 21:14 Matthew Wilcox
  2023-02-02 21:48 ` Kirill A. Shutemov
  2023-02-07 20:27 ` Matthew Wilcox
  0 siblings, 2 replies; 10+ messages in thread
From: Matthew Wilcox @ 2023-02-02 21:14 UTC (permalink / raw)
  To: linux-arch; +Cc: Yin Fengwei, linux-mm

For those of you not subscribed, linux-mm is currently discussing
how best to handle page faults on large folios.  I simply made it work
when adding large folio support.  Now Yin Fengwei is working on
making it fast.

https://lore.kernel.org/linux-mm/Y9qjn0Y+1ir787nc@casper.infradead.org/
is perhaps the best place to start as it pertains to what the
architecture will see.

At the bottom of that function, I propose

+       for (i = 0; i < nr; i++) {
+               set_pte_at(vma->vm_mm, addr, vmf->pte + i, entry);
+               /* no need to invalidate: a not-present page won't be cached */
+               update_mmu_cache(vma, addr, vmf->pte + i);
+               addr += PAGE_SIZE;
+		entry = pte_next(entry);
+	}

(or I would have, had I not forgotten that pte_t isn't an integral type)

But I think that some architectures want to mark PTEs specially for
"This is part of a contiguous range" -- ARM, perhaps?  So would you like
an API like:

	arch_set_ptes(mm, addr, vmf->pte, entry, nr);
	update_mmu_cache_range(vma, addr, vmf->pte, nr);

There are some challenges here.  For example, folios may be mapped
askew (ie not naturally aligned).  Another problem is that folios may
be unmapped in part (eg mmap(), fault, followed by munmap() of one of
the pages in the folio), and I presume you'd need to go and unmark the
other PTEs in that case.  So it's not as simple as just checking whether
'addr' and 'nr' are in some way compatible.


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

end of thread, other threads:[~2023-02-20  8:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-02 21:14 API for setting multiple PTEs at once Matthew Wilcox
2023-02-02 21:48 ` Kirill A. Shutemov
2023-02-02 22:49   ` Matthew Wilcox
2023-02-02 23:27     ` Kirill A. Shutemov
2023-02-07 20:27 ` Matthew Wilcox
2023-02-08 11:23   ` Alexandre Ghiti
2023-02-08 12:09     ` Yin, Fengwei
2023-02-08 13:35       ` Matthew Wilcox
2023-02-14  9:55   ` Alexandre Ghiti
2023-02-20  8:29     ` Rolf Eike Beer

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