x86: call vsmp_init explicitly
authorGlauber Costa <gcosta@redhat.com>
Mon, 11 Feb 2008 19:16:03 +0000 (17:16 -0200)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Apr 2008 15:40:47 +0000 (17:40 +0200)
It becomes to early for ioremap, so we use early_ioremap

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ravikiran Thirumalai <kiran@scalemp.com>
Acked-by: Shai Fultheim <shai@scalemp.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/setup_64.c
arch/x86/kernel/vsmp_64.c
include/asm-x86/setup.h

index f4f7ecf..e679256 100644 (file)
@@ -345,6 +345,10 @@ void __init setup_arch(char **cmdline_p)
        if (efi_enabled)
                efi_init();
 
+#ifdef CONFIG_PARAVIRT
+       vsmp_init();
+#endif
+
        dmi_scan_machine();
 
        io_delay_init();
index 9766917..fdf9fba 100644 (file)
 #include <asm/pci-direct.h>
 #include <asm/io.h>
 
-static void __init vsmp_init(void)
+void __init vsmp_init(void)
 {
        void *address;
-       unsigned int cap, ctl;
+       unsigned int cap, ctl, cfg;
 
        if (!early_pci_allowed())
                return;
@@ -32,7 +32,8 @@ static void __init vsmp_init(void)
                return;
 
        /* set vSMP magic bits to indicate vSMP capable kernel */
-       address = ioremap(read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0), 8);
+       cfg = read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0);
+       address = early_ioremap(cfg, 8);
        cap = readl(address);
        ctl = readl(address + 4);
        printk(KERN_INFO "vSMP CTL: capabilities:0x%08x  control:0x%08x\n",
@@ -45,8 +46,6 @@ static void __init vsmp_init(void)
                printk(KERN_INFO "vSMP CTL: control set to:0x%08x\n", ctl);
        }
 
-       iounmap(address);
+       early_iounmap(address, 8);
        return;
 }
-
-core_initcall(vsmp_init);
index 071e054..f745de2 100644 (file)
@@ -4,6 +4,10 @@
 #define COMMAND_LINE_SIZE 2048
 
 #ifndef __ASSEMBLY__
+
+/* Interrupt control for vSMPowered x86_64 systems */
+void vsmp_init(void);
+
 char *machine_specific_memory_setup(void);
 #ifndef CONFIG_PARAVIRT
 #define paravirt_post_allocator_init() do {} while (0)