aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-09-16 03:58:02 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-16 03:58:02 -0400
commit1e22436eba84edfec9c25e5a25d09062c4f91ca9 (patch)
treeb667c5955656e3939d2bbcd0fb32f26c44e1b63c
parent5649b7c30316a51792808422ac03ee825d26aa5e (diff)
x86: reserve low 64K on AMI and Phoenix BIOS boxen
there's multiple reports about suspend/resume related low memory corruption in this bugzilla: http://bugzilla.kernel.org/show_bug.cgi?id=11237 the common pattern is that the corruption is caused by the BIOS, and that it affects some portion of the first 64K of physical RAM. So add a DMI quirk This will waste 64K RAM on 'good' systems too, but without knowing the exact nature of this BIOS memory corruption this is the safest approach. This might as well solve a wide range of suspend/resume breakages under Linux. Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/setup.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 3109ca37a67c..33719544a224 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -732,10 +732,10 @@ void start_periodic_check_for_corruption(void)
732static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) 732static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
733{ 733{
734 printk(KERN_NOTICE 734 printk(KERN_NOTICE
735 "%s detected: BIOS corrupts 0xc000, working it around.\n", 735 "%s detected: BIOS may corrupt low RAM, working it around.\n",
736 d->ident); 736 d->ident);
737 737
738 reserve_early(0xc000, 0xc400, "BIOS quirk"); 738 reserve_early(0x0, 0x10000, "BIOS quirk");
739 739
740 return 0; 740 return 0;
741} 741}
@@ -749,6 +749,13 @@ static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
749 DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), 749 DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
750 }, 750 },
751 }, 751 },
752 {
753 .callback = dmi_low_memory_corruption,
754 .ident = "Phoenix BIOS",
755 .matches = {
756 DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
757 },
758 },
752 {} 759 {}
753}; 760};
754 761