提交 9d6a4d08 编写于 作者: Y Yinghai Lu 提交者: Ingo Molnar

x86: probe nr_irqs even only mptable is used

for !CONFIG_HAVE_SPARSE_IRQ

fix:

 In file included from arch/x86/kernel/early-quirks.c:18:
 include/asm/io_apic.h: In function 'probe_nr_irqs':
 include/asm/io_apic.h:209: error: 'NR_IRQS' undeclared (first use in this function)
 include/asm/io_apic.h:209: error: (Each undeclared identifier is reported only once
 include/asm/io_apic.h:209: error: for each function it appears in.)

v2: fix by Ingo
Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 8f09cd20
...@@ -957,29 +957,6 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) ...@@ -957,29 +957,6 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
nr_ioapics++; nr_ioapics++;
} }
int get_nr_irqs_via_madt(void)
{
int idx;
int nr = 0;
for (idx = 0; idx < nr_ioapics; idx++) {
if (mp_ioapic_routing[idx].gsi_end > nr)
nr = mp_ioapic_routing[idx].gsi_end;
}
nr++;
/* double it for hotplug and msi and nmi */
nr <<= 1;
/* something wrong ? */
if (nr < 32)
nr = 32;
return nr;
}
static void assign_to_mp_irq(struct mp_config_intsrc *m, static void assign_to_mp_irq(struct mp_config_intsrc *m,
struct mp_config_intsrc *mp_irq) struct mp_config_intsrc *mp_irq)
{ {
...@@ -1278,8 +1255,6 @@ static int __init acpi_parse_madt_ioapic_entries(void) ...@@ -1278,8 +1255,6 @@ static int __init acpi_parse_madt_ioapic_entries(void)
} }
nr_irqs = get_nr_irqs_via_madt();
count = count =
acpi_table_parse_madt(ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, acpi_parse_int_src_ovr, acpi_table_parse_madt(ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, acpi_parse_int_src_ovr,
nr_irqs); nr_irqs);
......
...@@ -3596,6 +3596,36 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) ...@@ -3596,6 +3596,36 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
} }
#endif /* CONFIG_HT_IRQ */ #endif /* CONFIG_HT_IRQ */
int __init io_apic_get_redir_entries (int ioapic)
{
union IO_APIC_reg_01 reg_01;
unsigned long flags;
spin_lock_irqsave(&ioapic_lock, flags);
reg_01.raw = io_apic_read(ioapic, 1);
spin_unlock_irqrestore(&ioapic_lock, flags);
return reg_01.bits.entries;
}
int __init probe_nr_irqs(void)
{
int idx;
int nr = 0;
for (idx = 0; idx < nr_ioapics; idx++)
nr += io_apic_get_redir_entries(idx);
/* double it for hotplug and msi and nmi */
nr <<= 1;
/* something wrong ? */
if (nr < 32)
nr = 32;
return nr;
}
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
ACPI-based IOAPIC Configuration ACPI-based IOAPIC Configuration
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
...@@ -3690,19 +3720,6 @@ int __init io_apic_get_version(int ioapic) ...@@ -3690,19 +3720,6 @@ int __init io_apic_get_version(int ioapic)
} }
#endif #endif
int __init io_apic_get_redir_entries (int ioapic)
{
union IO_APIC_reg_01 reg_01;
unsigned long flags;
spin_lock_irqsave(&ioapic_lock, flags);
reg_01.raw = io_apic_read(ioapic, 1);
spin_unlock_irqrestore(&ioapic_lock, flags);
return reg_01.bits.entries;
}
int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity)
{ {
if (!IO_APIC_IRQ(irq)) { if (!IO_APIC_IRQ(irq)) {
......
...@@ -1069,15 +1069,15 @@ void __init setup_arch(char **cmdline_p) ...@@ -1069,15 +1069,15 @@ void __init setup_arch(char **cmdline_p)
prefill_possible_map(); prefill_possible_map();
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
/* need to wait for nr_cpu_ids settle down */
if (nr_irqs == NR_IRQS)
nr_irqs = 32 * nr_cpu_ids + 224;
init_cpu_to_node(); init_cpu_to_node();
#endif #endif
init_apic_mappings(); init_apic_mappings();
ioapic_init_mappings(); ioapic_init_mappings();
/* need to wait for io_apic is mapped */
nr_irqs = probe_nr_irqs();
kvm_guest_init(); kvm_guest_init();
e820_reserve_resources(); e820_reserve_resources();
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <asm/mpspec.h> #include <asm/mpspec.h>
#include <asm/apicdef.h> #include <asm/apicdef.h>
#include <asm/irq_vectors.h>
/* /*
* Intel IO-APIC support for SMP and UP systems. * Intel IO-APIC support for SMP and UP systems.
...@@ -187,10 +188,17 @@ extern void restore_IO_APIC_setup(void); ...@@ -187,10 +188,17 @@ extern void restore_IO_APIC_setup(void);
extern void reinit_intr_remapped_IO_APIC(int); extern void reinit_intr_remapped_IO_APIC(int);
#endif #endif
extern int probe_nr_irqs(void);
#else /* !CONFIG_X86_IO_APIC */ #else /* !CONFIG_X86_IO_APIC */
#define io_apic_assign_pci_irqs 0 #define io_apic_assign_pci_irqs 0
static const int timer_through_8259 = 0; static const int timer_through_8259 = 0;
static inline void ioapic_init_mappings(void) { } static inline void ioapic_init_mappings(void) { }
static inline int probe_nr_irqs(void)
{
return NR_IRQS;
}
#endif #endif
#endif /* ASM_X86__IO_APIC_H */ #endif /* ASM_X86__IO_APIC_H */
...@@ -60,7 +60,6 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, ...@@ -60,7 +60,6 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
u32 gsi); u32 gsi);
extern void mp_config_acpi_legacy_irqs(void); extern void mp_config_acpi_legacy_irqs(void);
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
extern int get_nr_irqs_via_madt(void);
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
u32 gsi, int triggering, int polarity); u32 gsi, int triggering, int polarity);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册