aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/mpspec.h
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2009-02-08 19:18:03 -0500
committerIngo Molnar <mingo@elte.hu>2009-02-09 03:22:09 -0500
commitcc6c50066ec1ac98bef97117e2f078bb89bbccc7 (patch)
treec0dcc930e94f0738e0e7a29fd1e08b81cd03554c /arch/x86/include/asm/mpspec.h
parentf72dccace737df74d04a96461785a3ad61724b9f (diff)
x86: find nr_irqs_gsi with mp_ioapic_routing
Impact: find right nr_irqs_gsi on some systems. One test-system has gap between gsi's: [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 0, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x05] address[0xfeafd000] gsi_base[48]) [ 0.000000] IOAPIC[1]: apic_id 5, version 0, address 0xfeafd000, GSI 48-54 [ 0.000000] ACPI: IOAPIC (id[0x06] address[0xfeafc000] gsi_base[56]) [ 0.000000] IOAPIC[2]: apic_id 6, version 0, address 0xfeafc000, GSI 56-62 ... [ 0.000000] nr_irqs_gsi: 38 So nr_irqs_gsi is not right. some irq for MSI will overwrite with io_apic. need to get that with acpi_probe_gsi when acpi io_apic is used Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/include/asm/mpspec.h')
-rw-r--r--arch/x86/include/asm/mpspec.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
index d22f732eab8f..8c5620147c40 100644
--- a/arch/x86/include/asm/mpspec.h
+++ b/arch/x86/include/asm/mpspec.h
@@ -73,6 +73,7 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
73 u32 gsi); 73 u32 gsi);
74extern void mp_config_acpi_legacy_irqs(void); 74extern void mp_config_acpi_legacy_irqs(void);
75extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); 75extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
76extern int acpi_probe_gsi(void);
76#ifdef CONFIG_X86_IO_APIC 77#ifdef CONFIG_X86_IO_APIC
77extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, 78extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
78 u32 gsi, int triggering, int polarity); 79 u32 gsi, int triggering, int polarity);
@@ -84,6 +85,11 @@ mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
84 return 0; 85 return 0;
85} 86}
86#endif 87#endif
88#else /* !CONFIG_ACPI: */
89static inline int acpi_probe_gsi(void)
90{
91 return 0;
92}
87#endif /* CONFIG_ACPI */ 93#endif /* CONFIG_ACPI */
88 94
89#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) 95#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)