[patch 3 of 4] MCFG sanity check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch introduces a user for the e820_all_mapped function:

There have been several machines that don't have a working MMCONFIG, often
because of a buggy MCFG table in the ACPI bios. This patch adds a simple
sanity check that detects a whole bunch of these cases, and when it detects
it, linux now boots rather than crash-and-burns. The accuracy of this
detection can in principle be improved if there was a "is this entire range
in e820 with THIS attribute", but no such function exist and the complexity
needed for this is not really worth it; this simple check already catches
most cases anyway.

Signed-off-by: Arjan van de Ven <[email protected]>
---
 arch/x86_64/pci/mmconfig.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

Index: linux-2.6.16-mmconfig/arch/x86_64/pci/mmconfig.c
===================================================================
--- linux-2.6.16-mmconfig.orig/arch/x86_64/pci/mmconfig.c
+++ linux-2.6.16-mmconfig/arch/x86_64/pci/mmconfig.c
@@ -9,6 +9,8 @@
 #include <linux/init.h>
 #include <linux/acpi.h>
 #include <linux/bitmap.h>
+#include <asm/e820.h>
+
 #include "pci.h"
 
 #define MMCONFIG_APER_SIZE (256*1024*1024)
@@ -161,6 +163,14 @@ void __init pci_mmcfg_init(void)
 	    (pci_mmcfg_config[0].base_address == 0))
 		return;
 
+	if (!e820_all_mapped(pci_mmcfg_config[0].base_address,
+			pci_mmcfg_config[0].base_address + MMCONFIG_APER_SIZE,
+			E820_RESERVED)) {
+		printk(KERN_INFO "PCI: BIOS Bug: MCFG area is not E820-reserved\n");
+		printk(KERN_INFO "PCI: Not using MMCONFIG.\n");
+		return;
+	}
+
 	/* RED-PEN i386 doesn't do _nocache right now */
 	pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL);
 	if (pci_mmcfg_virt == NULL) {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux