Re: [PATCH] x86/mm/ident_map: Use full gbpages in identity maps except on UV platform.

From: Dave Hansen
Date: Fri Mar 22 2024 - 19:29:42 EST


On 3/22/24 09:21, Steve Wahl wrote:
> 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.

I'm still missing something here. Which ACPI tables are we talking
about? What don't they map? I normally don't think of ACPI _tables_ as
"mapping" things.

It seems like there's a theory that some ACPI table isn't mapped, but
looking through the discussion so far I don't see a smoking gun. Let's
say the kernel has a bug and the kernel was actively not mapping
something that it should have mapped. The oversized 1GB mappings made
the bug harder to hit. If that's the case, we'll just be adding a hack
which papers over the bug instead of fixing it properly.

I'm kind of leaning to say that we should just revert d794734c9bbf and
have the UV folks go back to the nogbpages until we get this properly
sorted.

> @@ -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 */
> };

But let's at least talk about this patch in case we decide to go forward
with it. We've really got two things:

1. Can the system use gbpages in the first place?
2. Do the gbpages need to be exact (UV) or sloppy (everything else)?

I wouldn't refer to this at all as "always" use gbpages. It's really a
be-sloppy-and-paper-over-bugs mode. They might be kernel bugs or
firmware bugs, but they're bugs _somewhere_ right?