[PATCH] mmconfig: Move e820 check into pci_mmcfg_reject_broken()
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Tue, 13 Feb 2007 12:26:20 +0000 (13:26 +0100)
committerAndi Kleen <andi@basil.nowhere.org>
Tue, 13 Feb 2007 12:26:20 +0000 (13:26 +0100)
This is just cleanup. It moves to e820 check into pci_mmcfg_reject_broken().

Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: Andi Kleen <ak@suse.de>
arch/i386/pci/mmconfig-shared.c

index 473db6257013aaeb84f62160c3764227c9c6bd12..747d8c63b0c49a1fb390dacfd5cdd96d58e35a95 100644 (file)
@@ -191,9 +191,16 @@ static void __init pci_mmcfg_insert_resources(void)
        }
 }
 
-static void __init pci_mmcfg_reject_broken(void)
+static void __init pci_mmcfg_reject_broken(int type)
 {
-       typeof(pci_mmcfg_config[0]) *cfg = &pci_mmcfg_config[0];
+       typeof(pci_mmcfg_config[0]) *cfg;
+
+       if ((pci_mmcfg_config_num == 0) ||
+           (pci_mmcfg_config == NULL) ||
+           (pci_mmcfg_config[0].address == 0))
+               return;
+
+       cfg = &pci_mmcfg_config[0];
 
        /*
         * Handle more broken MCFG tables on Asus etc.
@@ -202,13 +209,29 @@ static void __init pci_mmcfg_reject_broken(void)
        if (pci_mmcfg_config_num == 1 &&
            cfg->pci_segment == 0 &&
            (cfg->start_bus_number | cfg->end_bus_number) == 0) {
-               kfree(pci_mmcfg_config);
-               pci_mmcfg_config = NULL;
-               pci_mmcfg_config_num = 0;
-
                printk(KERN_ERR "PCI: start and end of bus number is 0. "
-                      "Rejected as broken MCFG.");
+                      "Rejected as broken MCFG.\n");
+               goto reject;
+       }
+
+       /*
+        * Only do this check when type 1 works. If it doesn't work
+        * assume we run on a Mac and always use MCFG
+        */
+       if (type == 1 && !e820_all_mapped(cfg->address,
+                                         cfg->address + MMCONFIG_APER_MIN,
+                                         E820_RESERVED)) {
+               printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not"
+                      " E820-reserved\n", cfg->address);
+               goto reject;
        }
+       return;
+
+reject:
+       printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
+       kfree(pci_mmcfg_config);
+       pci_mmcfg_config = NULL;
+       pci_mmcfg_config_num = 0;
 }
 
 void __init pci_mmcfg_init(int type)
@@ -223,7 +246,7 @@ void __init pci_mmcfg_init(int type)
 
        if (!known_bridge) {
                acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg);
-               pci_mmcfg_reject_broken();
+               pci_mmcfg_reject_broken(type);
        }
 
        if ((pci_mmcfg_config_num == 0) ||
@@ -231,18 +254,6 @@ void __init pci_mmcfg_init(int type)
            (pci_mmcfg_config[0].address == 0))
                return;
 
-       /* Only do this check when type 1 works. If it doesn't work
-           assume we run on a Mac and always use MCFG */
-       if (type == 1 && !known_bridge &&
-           !e820_all_mapped(pci_mmcfg_config[0].address,
-                            pci_mmcfg_config[0].address + MMCONFIG_APER_MIN,
-                            E820_RESERVED)) {
-               printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not E820-reserved\n",
-                               pci_mmcfg_config[0].address);
-               printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
-               return;
-       }
-
        if (pci_mmcfg_arch_init()) {
                if (type == 1)
                        unreachable_devices();