From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D0DC2459E5; Mon, 11 Aug 2025 08:13:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900019; cv=none; b=nEnb7DlTlI0n5E70HsLNPleLDuNASOnmqyGeHjpD/QOV8NMyz4Vb85FN8MZKvKFHDbf2rMyXDoHIPbKAEDOZxkY9Jeq8HDe5FAmmUeT2ZOHHelwO9XJi7xNw2rGgC9PzgSCc6pVFyXijqKp3wzvlXwZimDx192vnFrK80+7Z5WY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900019; c=relaxed/simple; bh=nzI5taL8qhPmC3JnPTSLMBB3YPH8YS1XTL1Z0gmrNgU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Zjh9o2qYEGuQH27x9XF+2EO2wKwq5mk5aGL32hcCbbC7xTKM6Rg2bbOywVr37AXdqFp66m9gFmicl43CYQCSzxDHVSJvCk0CA9bWPqLTsCx1dAjID0rQfn+yobs+dSpz5q8Mit9BcFGS4pmF7BlaJoi0kRzQYxoATRlLgaCNKUA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NabTfTob; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NabTfTob" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3FDBC4CEED; Mon, 11 Aug 2025 08:13:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754900015; bh=nzI5taL8qhPmC3JnPTSLMBB3YPH8YS1XTL1Z0gmrNgU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=NabTfTobkl+gvZ2itLU2X50GU6eoZs66ZpRb6DppIdkRXLv5WbfpPJ4R16/nmKpEA wN0varhSZT4szpiXSnj6Pe9XvVhQ+y3c7GWi+NLr4ESBeGsKZ+2QEW4cpYCF0DlJj3 7E2/ts0/YGOPebJqAiJO2K+8J6j9jCUX8CYdQubGEiZK3vHB22W5mLeBwVWSzeTK3/ nhtzFZB1dYXwpdRrsAi78p2t1j1q02yAx97a5yKJtBpohccnSWNi8VR94dGiMYDpGx oNMC+kjTxp2UM5E0+Z2CZG9s/QV595hCmSg3XhmNVJsD6lGY56P68wwmzf57fEIuQ/ es2yfYSsruz4g== Date: Mon, 11 Aug 2025 11:13:19 +0300 From: Mike Rapoport To: Harry Yoo Cc: Dennis Zhou , Andrew Morton , Andrey Ryabinin , x86@kernel.org, Borislav Petkov , Peter Zijlstra , Andy Lutomirski , Thomas Gleixner , Ingo Molnar , Tejun Heo , Uladzislau Rezki , Dave Hansen , Christoph Lameter , David Hildenbrand , Andrey Konovalov , Vincenzo Frascino , "H. Peter Anvin" , kasan-dev@googlegroups.com, Ard Biesheuvel , linux-kernel@vger.kernel.org, Dmitry Vyukov , Alexander Potapenko , Vlastimil Babka , Suren Baghdasaryan , Thomas Huth , John Hubbard , Lorenzo Stoakes , Michal Hocko , "Liam R. Howlett" , linux-mm@kvack.org, "Kirill A. Shutemov" , Oscar Salvador , Jane Chu , Gwan-gyeong Mun , "Aneesh Kumar K . V" , Joerg Roedel , Alistair Popple , Joao Martins , linux-arch@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH V4 mm-hotfixes 3/3] x86/mm/64: define ARCH_PAGE_TABLE_SYNC_MASK and arch_sync_kernel_mappings() Message-ID: References: <20250811053420.10721-1-harry.yoo@oracle.com> <20250811053420.10721-4-harry.yoo@oracle.com> Precedence: bulk X-Mailing-List: linux-arch@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250811053420.10721-4-harry.yoo@oracle.com> On Mon, Aug 11, 2025 at 02:34:20PM +0900, Harry Yoo wrote: > Define ARCH_PAGE_TABLE_SYNC_MASK and arch_sync_kernel_mappings() to ensure > page tables are properly synchronized when calling p*d_populate_kernel(). > It is inteneded to synchronize page tables via pgd_pouplate_kernel() when > 5-level paging is in use and via p4d_pouplate_kernel() when 4-level paging > is used. > > This fixes intermittent boot failures on systems using 4-level paging > and a large amount of persistent memory: > > BUG: unable to handle page fault for address: ffffe70000000034 > #PF: supervisor write access in kernel mode > #PF: error_code(0x0002) - not-present page > PGD 0 P4D 0 > Oops: 0002 [#1] SMP NOPTI > RIP: 0010:__init_single_page+0x9/0x6d > Call Trace: > > __init_zone_device_page+0x17/0x5d > memmap_init_zone_device+0x154/0x1bb > pagemap_range+0x2e0/0x40f > memremap_pages+0x10b/0x2f0 > devm_memremap_pages+0x1e/0x60 > dev_dax_probe+0xce/0x2ec [device_dax] > dax_bus_probe+0x6d/0xc9 > [... snip ...] > > > It also fixes a crash in vmemmap_set_pmd() caused by accessing vmemmap > before sync_global_pgds() [1]: > > BUG: unable to handle page fault for address: ffffeb3ff1200000 > #PF: supervisor write access in kernel mode > #PF: error_code(0x0002) - not-present page > PGD 0 P4D 0 > Oops: Oops: 0002 [#1] PREEMPT SMP NOPTI > Tainted: [W]=WARN > RIP: 0010:vmemmap_set_pmd+0xff/0x230 > > vmemmap_populate_hugepages+0x176/0x180 > vmemmap_populate+0x34/0x80 > __populate_section_memmap+0x41/0x90 > sparse_add_section+0x121/0x3e0 > __add_pages+0xba/0x150 > add_pages+0x1d/0x70 > memremap_pages+0x3dc/0x810 > devm_memremap_pages+0x1c/0x60 > xe_devm_add+0x8b/0x100 [xe] > xe_tile_init_noalloc+0x6a/0x70 [xe] > xe_device_probe+0x48c/0x740 [xe] > [... snip ...] > > Cc: > Fixes: 8d400913c231 ("x86/vmemmap: handle unpopulated sub-pmd ranges") > Closes: https://lore.kernel.org/linux-mm/20250311114420.240341-1-gwan-gyeong.mun@intel.com [1] > Suggested-by: Dave Hansen > Signed-off-by: Harry Yoo Reviewed-by: Mike Rapoport (Microsoft) > --- > arch/x86/include/asm/pgtable_64_types.h | 3 +++ > arch/x86/mm/init_64.c | 5 +++++ > 2 files changed, 8 insertions(+) > > diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h > index 4604f924d8b8..7eb61ef6a185 100644 > --- a/arch/x86/include/asm/pgtable_64_types.h > +++ b/arch/x86/include/asm/pgtable_64_types.h > @@ -36,6 +36,9 @@ static inline bool pgtable_l5_enabled(void) > #define pgtable_l5_enabled() cpu_feature_enabled(X86_FEATURE_LA57) > #endif /* USE_EARLY_PGTABLE_L5 */ > > +#define ARCH_PAGE_TABLE_SYNC_MASK \ > + (pgtable_l5_enabled() ? PGTBL_PGD_MODIFIED : PGTBL_P4D_MODIFIED) > + > extern unsigned int pgdir_shift; > extern unsigned int ptrs_per_p4d; > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index 76e33bd7c556..a78b498c0dc3 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -223,6 +223,11 @@ static void sync_global_pgds(unsigned long start, unsigned long end) > sync_global_pgds_l4(start, end); > } > > +void arch_sync_kernel_mappings(unsigned long start, unsigned long end) > +{ > + sync_global_pgds(start, end); > +} > + > /* > * NOTE: This function is marked __ref because it calls __init function > * (alloc_bootmem_pages). It's safe to do it ONLY when after_bootmem == 0. > -- > 2.43.0 > -- Sincerely yours, Mike.