diff options
-rw-r--r-- | arch/x86/kernel/setup.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index ec7e56c1b984..3109ca37a67c 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -729,6 +729,29 @@ void start_periodic_check_for_corruption(void) | |||
729 | } | 729 | } |
730 | #endif | 730 | #endif |
731 | 731 | ||
732 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) | ||
733 | { | ||
734 | printk(KERN_NOTICE | ||
735 | "%s detected: BIOS corrupts 0xc000, working it around.\n", | ||
736 | d->ident); | ||
737 | |||
738 | reserve_early(0xc000, 0xc400, "BIOS quirk"); | ||
739 | |||
740 | return 0; | ||
741 | } | ||
742 | |||
743 | /* List of systems that have known low memory corruption BIOS problems */ | ||
744 | static struct dmi_system_id __initdata bad_bios_dmi_table[] = { | ||
745 | { | ||
746 | .callback = dmi_low_memory_corruption, | ||
747 | .ident = "AMI BIOS", | ||
748 | .matches = { | ||
749 | DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), | ||
750 | }, | ||
751 | }, | ||
752 | {} | ||
753 | }; | ||
754 | |||
732 | /* | 755 | /* |
733 | * Determine if we were loaded by an EFI loader. If so, then we have also been | 756 | * Determine if we were loaded by an EFI loader. If so, then we have also been |
734 | * passed the efi memmap, systab, etc., so we should use these data structures | 757 | * passed the efi memmap, systab, etc., so we should use these data structures |
@@ -752,6 +775,8 @@ void __init setup_arch(char **cmdline_p) | |||
752 | printk(KERN_INFO "Command line: %s\n", boot_command_line); | 775 | printk(KERN_INFO "Command line: %s\n", boot_command_line); |
753 | #endif | 776 | #endif |
754 | 777 | ||
778 | dmi_check_system(bad_bios_dmi_table); | ||
779 | |||
755 | early_cpu_init(); | 780 | early_cpu_init(); |
756 | early_ioremap_init(); | 781 | early_ioremap_init(); |
757 | 782 | ||
@@ -1037,3 +1062,5 @@ void __init setup_arch(char **cmdline_p) | |||
1037 | #endif | 1062 | #endif |
1038 | #endif | 1063 | #endif |
1039 | } | 1064 | } |
1065 | |||
1066 | |||