aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/vsmp_64.c
diff options
context:
space:
mode:
authorRavikiran G Thirumalai <kiran@scalex86.org>2008-03-20 00:41:16 -0700
committerIngo Molnar <mingo@elte.hu>2008-04-17 17:41:08 +0200
commitaa7d8e25eca5deb33eb08013bc78a80514349b40 (patch)
tree71075bf2c7103641377e5e182102cf8350797f8b /arch/x86/kernel/vsmp_64.c
parentx86: vSMP: Fix is_vsmp_box() (diff)
downloadlinux-dev-aa7d8e25eca5deb33eb08013bc78a80514349b40.tar.xz
linux-dev-aa7d8e25eca5deb33eb08013bc78a80514349b40.zip
x86: fix build breakage when PCI is define and PARAVIRT is not
- 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>
Diffstat (limited to 'arch/x86/kernel/vsmp_64.c')
-rw-r--r--arch/x86/kernel/vsmp_64.c72
1 files changed, 43 insertions, 29 deletions
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index eb25584c54c3..4a790a5f61b7 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -19,6 +19,7 @@
#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'
@@ -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;
- 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;
@@ -127,5 +100,46 @@ void __init vsmp_init(void)
}
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;
}