Re: [PATCH v4] x86/mm/ident_map: On UV systems, use gbpages only where full GB page should be mapped.

From: Ingo Molnar
Date: Fri Mar 29 2024 - 03:15:31 EST



* Steve Wahl <steve.wahl@xxxxxxx> wrote:

> When ident_pud_init() uses only gbpages to create identity maps, large
> ranges of addresses not actually requested can be included in the
> resulting table; a 4K request will map a full GB. On UV systems, this
> ends up including regions that will cause hardware to halt the system
> if accessed (these are marked "reserved" by BIOS). Even processor
> speculation into these regions is enough to trigger the system halt.
> And MTRRs cannot be used to restrict this speculation, there are not
> enough MTRRs to cover all the reserved regions.

Nor should MTRRs be (ab-)used for this really.

> The fix for that would be to only use gbpages when map creation
> requests include the full GB page of space, and falling back to using
> smaller 2M pages when only portions of a GB page are included in the
> request.
>
> But on some other systems, possibly due to buggy bios, that solution
> leaves some areas out of the identity map that are needed for kexec
> to succeed. It is believed that these areas are not marked properly
> for map_acpi_tables() in arch/x86/kernel/machine_kexec_64.c to catch
> and map them. The nogbpages kernel command line option also causes
> these systems to fail even without these changes.

Does the 'nogbpages' kernel command line option fail on these systems
even outside of kexec (ie. regular boot), or only in combination with
kexec?

Thanks,

Ingo