x86: fix build breakage when PCI is define and PARAVIRT is not
authorRavikiran G Thirumalai <kiran@scalex86.org>
Thu, 20 Mar 2008 07:41:16 +0000 (00:41 -0700)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Apr 2008 15:41:08 +0000 (17:41 +0200)
- Fix the the build breakage when PARAVIRT is defined
  but PCI is not
  This fixes problem reported at:
http://marc.info/?l=linux-kernel&m=120525966600698&w=2
- Make is_vsmp_box() available even when PARAVIRT is not defined.
  This is needed to determine if tsc's are reliable as a time source
  even when PARAVIRT is not defined.
- split vsmp_init to use is_vsmp_box() and set_vsmp_pv_ops()
  set_vsmp_pv_ops will do nothing if PCI is not enabled in the config.

Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/Makefile
arch/x86/kernel/setup_64.c
arch/x86/kernel/vsmp_64.c
include/asm-x86/apic.h

index d5a05a0cef62e75f97da20e0f2d33befd2add1a5..1fe841a86f7ed369e75856ba215a94c77f78c667 100644 (file)
@@ -60,7 +60,7 @@ obj-$(CONFIG_KEXEC)           += relocate_kernel_$(BITS).o crash.o
 obj-$(CONFIG_CRASH_DUMP)       += crash_dump_$(BITS).o
 obj-$(CONFIG_X86_NUMAQ)                += numaq_32.o
 obj-$(CONFIG_X86_SUMMIT_NUMA)  += summit_32.o
 obj-$(CONFIG_CRASH_DUMP)       += crash_dump_$(BITS).o
 obj-$(CONFIG_X86_NUMAQ)                += numaq_32.o
 obj-$(CONFIG_X86_SUMMIT_NUMA)  += summit_32.o
-obj-$(CONFIG_PARAVIRT)         += vsmp_64.o
+obj-y                          += vsmp_64.o
 obj-$(CONFIG_KPROBES)          += kprobes.o
 obj-$(CONFIG_MODULES)          += module_$(BITS).o
 obj-$(CONFIG_ACPI_SRAT)        += srat_32.o
 obj-$(CONFIG_KPROBES)          += kprobes.o
 obj-$(CONFIG_MODULES)          += module_$(BITS).o
 obj-$(CONFIG_ACPI_SRAT)        += srat_32.o
index 990724143c43baab2ae70cb736a830511825983e..20034493b5ade8ac2fd164d11de2c00dfce0a143 100644 (file)
@@ -351,9 +351,7 @@ void __init setup_arch(char **cmdline_p)
        if (efi_enabled)
                efi_init();
 
        if (efi_enabled)
                efi_init();
 
-#ifdef CONFIG_PARAVIRT
        vsmp_init();
        vsmp_init();
-#endif
 
        dmi_scan_machine();
 
 
        dmi_scan_machine();
 
index eb25584c54c3b4cc6a43c5f3bc8711443ea8b7c5..4a790a5f61b71135b958335c778c00397a929ada 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/io.h>
 #include <asm/paravirt.h>
 
 #include <asm/io.h>
 #include <asm/paravirt.h>
 
+#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
 /*
  * Interrupt control on vSMPowered systems:
  * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
 /*
  * Interrupt control on vSMPowered systems:
  * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
@@ -72,39 +73,11 @@ static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
 
 }
 
 
 }
 
-static int vsmp = -1;
-
-int is_vsmp_box(void)
-{
-       if (vsmp != -1)
-               return vsmp;
-
-       vsmp = 0;
-       if (!early_pci_allowed())
-               return vsmp;
-
-       /* Check if we are running on a ScaleMP vSMP box */
-       if ((read_pci_config_16(0, 0x1f, 0, PCI_VENDOR_ID) ==
-            PCI_VENDOR_ID_SCALEMP) &&
-           (read_pci_config_16(0, 0x1f, 0, PCI_DEVICE_ID) ==
-           PCI_DEVICE_ID_SCALEMP_VSMP_CTL))
-               vsmp = 1;
-
-       return vsmp;
-}
-
-void __init vsmp_init(void)
+static void __init set_vsmp_pv_ops(void)
 {
        void *address;
        unsigned int cap, ctl, cfg;
 
 {
        void *address;
        unsigned int cap, ctl, cfg;
 
-       if (!is_vsmp_box())
-               return;
-
-       if (!early_pci_allowed())
-               return;
-
-       /* If we are, use the distinguished irq functions */
        pv_irq_ops.irq_disable = vsmp_irq_disable;
        pv_irq_ops.irq_enable  = vsmp_irq_enable;
        pv_irq_ops.save_fl  = vsmp_save_fl;
        pv_irq_ops.irq_disable = vsmp_irq_disable;
        pv_irq_ops.irq_enable  = vsmp_irq_enable;
        pv_irq_ops.save_fl  = vsmp_save_fl;
@@ -127,5 +100,46 @@ void __init vsmp_init(void)
        }
 
        early_iounmap(address, 8);
        }
 
        early_iounmap(address, 8);
+}
+#else
+static void __init set_vsmp_pv_ops(void)
+{
+}
+#endif
+
+#ifdef CONFIG_PCI
+static int vsmp = -1;
+
+int is_vsmp_box(void)
+{
+       if (vsmp != -1)
+               return vsmp;
+
+       vsmp = 0;
+       if (!early_pci_allowed())
+               return vsmp;
+
+       /* Check if we are running on a ScaleMP vSMP box */
+       if ((read_pci_config_16(0, 0x1f, 0, PCI_VENDOR_ID) ==
+            PCI_VENDOR_ID_SCALEMP) &&
+           (read_pci_config_16(0, 0x1f, 0, PCI_DEVICE_ID) ==
+           PCI_DEVICE_ID_SCALEMP_VSMP_CTL))
+               vsmp = 1;
+
+       return vsmp;
+}
+#else
+int is_vsmp_box(void)
+{
+       return 0;
+}
+#endif
+
+void __init vsmp_init(void)
+{
+       if (!is_vsmp_box())
+               return;
+
+       set_vsmp_pv_ops();
        return;
 }
        return;
 }
index b804238489a1e7559273b9b8a7e30f6ecf4ea63c..b11d6524fb138ae92fb011d158b6bbf7a4c778ba 100644 (file)
@@ -50,19 +50,16 @@ extern int disable_apic_timer;
  */
 #ifdef CONFIG_PARAVIRT
 #include <asm/paravirt.h>
  */
 #ifdef CONFIG_PARAVIRT
 #include <asm/paravirt.h>
-extern int is_vsmp_box(void);
 #else
 #define apic_write native_apic_write
 #define apic_write_atomic native_apic_write_atomic
 #define apic_read native_apic_read
 #define setup_boot_clock setup_boot_APIC_clock
 #define setup_secondary_clock setup_secondary_APIC_clock
 #else
 #define apic_write native_apic_write
 #define apic_write_atomic native_apic_write_atomic
 #define apic_read native_apic_read
 #define setup_boot_clock setup_boot_APIC_clock
 #define setup_secondary_clock setup_secondary_APIC_clock
-static int inline is_vsmp_box(void)
-{
-       return 0;
-}
 #endif
 
 #endif
 
+extern int is_vsmp_box(void);
+
 static inline void native_apic_write(unsigned long reg, u32 v)
 {
        *((volatile u32 *)(APIC_BASE + reg)) = v;
 static inline void native_apic_write(unsigned long reg, u32 v)
 {
        *((volatile u32 *)(APIC_BASE + reg)) = v;