mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
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: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
8f09cd20a2
commit
9d6a4d0823
@ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
#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)
|
|||||||
}
|
}
|
||||||
#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)
|
|||||||
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 @@
|
|||||||
#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);
|
|||||||
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,
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user