Re: [RFC, PATCHv1 24/28] x86/mm: add sync_global_pgds() for configuration with 5-level paging
From: Andy Lutomirski <luto@amacapital.net>
Date: 2016-12-08 18:42:45
Also in:
linux-arch, lkml
On Thu, Dec 8, 2016 at 8:21 AM, Kirill A. Shutemov [off-list ref] wrote:
quoted hunk ↗ jump to hunk
This basically restores slightly modified version of original sync_global_pgds() which we had before foldedl p4d was introduced. The only modification is protection against 'address' overflow. Signed-off-by: Kirill A. Shutemov <redacted> --- arch/x86/mm/init_64.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index a991f5c4c2c4..d637893ac8c2 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c@@ -92,6 +92,52 @@ __setup("noexec32=", nonx32_setup); * When memory was added/removed make sure all the processes MM have * suitable PGD entries in the local PGD level page. */ +#ifdef CONFIG_X86_5LEVEL +void sync_global_pgds(unsigned long start, unsigned long end, int removed) +{ + unsigned long address; + + for (address = start; address <= end && address >= start; + address += PGDIR_SIZE) { + const pgd_t *pgd_ref = pgd_offset_k(address); + struct page *page; + + /* + * When it is called after memory hot remove, pgd_none() + * returns true. In this case (removed == 1), we must clear + * the PGD entries in the local PGD level page. + */ + if (pgd_none(*pgd_ref) && !removed) + continue;
This isn't quite specific to your patch, but can we assert that, if removed=1, then we're not operating on the vmalloc range? Because if we do, this will be racy is nasty ways. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>