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
 
 #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'
 
 }
 
-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;
 
-       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;
        }
 
        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;
 }
 
  */
 #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
-static int inline is_vsmp_box(void)
-{
-       return 0;
-}
 #endif
 
+extern int is_vsmp_box(void);
+
 static inline void native_apic_write(unsigned long reg, u32 v)
 {
        *((volatile u32 *)(APIC_BASE + reg)) = v;