Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc381519 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

x86: add X86_RESERVE_LOW_64K

This bugzilla:

  http://bugzilla.kernel.org/show_bug.cgi?id=11237



Documents a wide range of systems where the BIOS utilizes the first
64K of physical memory during suspend/resume and other hardware events.

Currently we reserve this memory on all AMI and Phoenix BIOS systems.
Life is too short to hunt subtle memory corruption problems like this,
so we try to be robust by default.

Still, allow this to be overriden: allow users who want that first 64K
of memory to be available to the kernel disable the quirk, via
CONFIG_X86_RESERVE_LOW_64K=n.

Also, allow the early reservation to overlap with other
early reservations.

Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 1e22436e
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -1089,6 +1089,26 @@ config X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK
	 Set whether the default state of memory_corruption_check is
	 on or off.

config X86_RESERVE_LOW_64K
        bool "Reserve low 64K of RAM on AMI/Phoenix BIOSen"
	default y
	help
	 Reserve the first 64K of physical RAM on BIOSes that are known
	 to potentially corrupt that memory range. A numbers of BIOSes are
	 known to utilize this area during suspend/resume, so it must not
	 be used by the kernel.

	 Set this to N if you are absolutely sure that you trust the BIOS
	 to get all its memory reservations and usages right.

	 If you have doubts about the BIOS (e.g. suspend/resume does not
	 work or there's kernel crashes after certain hardware hotplug
	 events) and it's not AMI or Phoenix, then you might want to enable
	 X86_CHECK_BIOS_CORRUPTION=y to allow the kernel to check typical
	 corruption patterns.

	 Say Y if unsure.

config MATH_EMULATION
	bool
	prompt "Math emulation" if X86_32
+3 −1
Original line number Diff line number Diff line
@@ -735,13 +735,14 @@ static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
		"%s detected: BIOS may corrupt low RAM, working it around.\n",
		d->ident);

	reserve_early(0x0, 0x10000, "BIOS quirk");
	reserve_early_overlap_ok(0x0, 0x10000, "BIOS quirk");

	return 0;
}

/* List of systems that have known low memory corruption BIOS problems */
static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
#ifdef CONFIG_X86_RESERVE_LOW_64K
	{
		.callback = dmi_low_memory_corruption,
		.ident = "AMI BIOS",
@@ -757,6 +758,7 @@ static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
		},
	},
	{}
#endif
};

/*