All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Wahl <steve.wahl@hpe.com>
To: Steve Wahl <steve.wahl@hpe.com>,
	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>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org,
	Linux regressions mailing list <regressions@lists.linux.dev>,
	Pavin Joseph <me@pavinjoseph.com>,
	stable@vger.kernel.org, Eric Hagberg <ehagberg@gmail.com>
Cc: Simon Horman <horms@verge.net.au>,
	Eric Biederman <ebiederm@xmission.com>,
	Dave Young <dyoung@redhat.com>, Sarah Brofeldt <srhb@dbc.dk>,
	Russ Anderson <rja@hpe.com>, Dimitri Sivanich <sivanich@hpe.com>
Subject: [PATCH] x86/mm/ident_map: Use full gbpages in identity maps except on UV platform.
Date: Fri, 22 Mar 2024 11:21:35 -0500	[thread overview]
Message-ID: <20240322162135.3984233-1-steve.wahl@hpe.com> (raw)

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


             reply	other threads:[~2024-03-22 16:22 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-22 16:21 Steve Wahl [this message]
2024-03-22 16:23 ` [PATCH] x86/mm/ident_map: Use full gbpages in identity maps except on UV platform 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

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=20240322162135.3984233-1-steve.wahl@hpe.com \
    --to=steve.wahl@hpe.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=dyoung@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=ehagberg@gmail.com \
    --cc=horms@verge.net.au \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=me@pavinjoseph.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=regressions@lists.linux.dev \
    --cc=rja@hpe.com \
    --cc=sivanich@hpe.com \
    --cc=srhb@dbc.dk \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.