stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] x86/mm/ident_map: Use full gbpages in identity maps except on UV platform.
@ 2024-03-22 16:21 Steve Wahl
  2024-03-22 16:23 ` kernel test robot
                   ` (3 more replies)
  0 siblings, 4 replies; 29+ messages in thread
From: Steve Wahl @ 2024-03-22 16:21 UTC (permalink / raw)
  To: Steve Wahl, Dave Hansen, Andy Lutomirski, Peter Zijlstra,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86,
	H. Peter Anvin, linux-kernel, Linux regressions mailing list,
	Pavin Joseph, stable, Eric Hagberg
  Cc: Simon Horman, Eric Biederman, Dave Young, Sarah Brofeldt,
	Russ Anderson, Dimitri Sivanich

Some systems have ACPI tables that don't include everything that needs
to be mapped for a successful kexec.  These systems rely on identity
maps that include the full gigabyte surrounding any smaller region
requested for kexec success.  Without this, they fail to kexec and end
up doing a full firmware reboot.

So, reduce the use of GB pages only on systems where this is known to
be necessary (specifically, UV systems).

Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Fixes: d794734c9bbf ("x86/mm/ident_map: Use gbpages only where full GB page should be mapped.")
Reported-by: Pavin Joseph <me@pavinjoseph.com>
Closes: https://lore.kernel.org/all/3a1b9909-45ac-4f97-ad68-d16ef1ce99db@pavinjoseph.com/
Tested-by: Pavin Joseph <me@pavinjoseph.com>
Tested-by: Eric Hagberg <ehagberg@gmail.com>
Tested-by: Sarah Brofeldt <srhb@dbc.dk>
---
 arch/x86/include/asm/init.h        |  1 +
 arch/x86/kernel/machine_kexec_64.c |  3 +++
 arch/x86/mm/ident_map.c            | 13 +++++++------
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/init.h b/arch/x86/include/asm/init.h
index cc9ccf61b6bd..4ae843e8fefb 100644
--- a/arch/x86/include/asm/init.h
+++ b/arch/x86/include/asm/init.h
@@ -10,6 +10,7 @@ struct x86_mapping_info {
 	unsigned long page_flag;	 /* page flag for PMD or PUD entry */
 	unsigned long offset;		 /* ident mapping offset */
 	bool direct_gbpages;		 /* PUD level 1GB page support */
+	bool direct_gbpages_always;	 /* use 1GB pages exclusively */
 	unsigned long kernpg_flag;	 /* kernel pagetable flag override */
 };
 
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index b180d8e497c3..1e1c6633bbec 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -28,6 +28,7 @@
 #include <asm/setup.h>
 #include <asm/set_memory.h>
 #include <asm/cpu.h>
+#include <asm/uv/uv.h>
 
 #ifdef CONFIG_ACPI
 /*
@@ -212,6 +213,8 @@ static int init_pgtable(struct kimage *image, unsigned long start_pgtable)
 
 	if (direct_gbpages)
 		info.direct_gbpages = true;
+	if (!is_uv_system())
+		info.direct_gbpages_always = true;
 
 	for (i = 0; i < nr_pfn_mapped; i++) {
 		mstart = pfn_mapped[i].start << PAGE_SHIFT;
diff --git a/arch/x86/mm/ident_map.c b/arch/x86/mm/ident_map.c
index a204a332c71f..8039498b9713 100644
--- a/arch/x86/mm/ident_map.c
+++ b/arch/x86/mm/ident_map.c
@@ -39,12 +39,13 @@ static int ident_pud_init(struct x86_mapping_info *info, pud_t *pud_page,
 		/* Is using a gbpage allowed? */
 		use_gbpage = info->direct_gbpages;
 
-		/* Don't use gbpage if it maps more than the requested region. */
-		/* at the begining: */
-		use_gbpage &= ((addr & ~PUD_MASK) == 0);
-		/* ... or at the end: */
-		use_gbpage &= ((next & ~PUD_MASK) == 0);
-
+		if (!info->direct_gbpages_always) {
+			/* Don't use gbpage if it maps more than the requested region. */
+			/* at the beginning: */
+			use_gbpage &= ((addr & ~PUD_MASK) == 0);
+			/* ... or at the end: */
+			use_gbpage &= ((next & ~PUD_MASK) == 0);
+		}
 		/* Never overwrite existing mappings */
 		use_gbpage &= !pud_present(*pud);
 
-- 
2.26.2


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

end of thread, other threads:[~2024-04-05 13:35 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-22 16:21 [PATCH] x86/mm/ident_map: Use full gbpages in identity maps except on UV platform Steve Wahl
2024-03-22 16:23 ` kernel test robot
2024-03-22 16:27 ` Dave Hansen
2024-03-22 17:31   ` Eric W. Biederman
2024-03-22 17:40     ` Dave Hansen
2024-03-22 17:43       ` Dave Hansen
2024-03-22 18:06         ` Steve Wahl
2024-03-22 18:05       ` Steve Wahl
2024-03-22 23:29 ` Dave Hansen
2024-03-24  4:45   ` Eric W. Biederman
2024-03-24 18:16     ` Dave Hansen
2024-03-25 19:15   ` Steve Wahl
2024-03-24 10:31 ` Ingo Molnar
2024-03-25  2:03   ` Russ Anderson
2024-03-25 10:58     ` Ingo Molnar
2024-04-05 13:13       ` Eric Hagberg
2024-04-05 13:35         ` Greg KH
2024-03-25 15:04     ` Eric W. Biederman
2024-03-25 19:41       ` Steve Wahl
2024-03-27 12:57         ` Eric W. Biederman
2024-03-27 15:33           ` Steve Wahl
2024-03-28  5:05             ` Eric W. Biederman
2024-03-28 15:38               ` Steve Wahl
2024-03-31  3:46                 ` Eric W. Biederman
2024-04-01 15:15                   ` Steve Wahl
2024-04-01 18:03                     ` Dave Hansen
2024-04-01 18:49                       ` Steve Wahl
2024-04-04 19:56                         ` Steve Wahl
2024-03-25 19:22   ` Steve Wahl

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