x86: factor out irq initialization for x86_64
Provide apic_intr_init and smp_intr_init functions. Signed-off-by: Glauber Costa <gcosta@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
2ff298372d
commit
2f97435e57
1 changed files with 28 additions and 15 deletions
|
@ -164,22 +164,8 @@ static void __init init_ISA_irqs (void)
|
||||||
|
|
||||||
void init_IRQ(void) __attribute__((weak, alias("native_init_IRQ")));
|
void init_IRQ(void) __attribute__((weak, alias("native_init_IRQ")));
|
||||||
|
|
||||||
void __init native_init_IRQ(void)
|
void __init smp_intr_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
init_ISA_irqs();
|
|
||||||
/*
|
|
||||||
* Cover the whole vector space, no vector can escape
|
|
||||||
* us. (some of these will be overridden and become
|
|
||||||
* 'special' SMP interrupts)
|
|
||||||
*/
|
|
||||||
for (i = 0; i < (NR_VECTORS - FIRST_EXTERNAL_VECTOR); i++) {
|
|
||||||
int vector = FIRST_EXTERNAL_VECTOR + i;
|
|
||||||
if (vector != IA32_SYSCALL_VECTOR)
|
|
||||||
set_intr_gate(vector, interrupt[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
* The reschedule interrupt is a CPU-to-CPU reschedule-helper
|
* The reschedule interrupt is a CPU-to-CPU reschedule-helper
|
||||||
|
@ -207,6 +193,14 @@ void __init native_init_IRQ(void)
|
||||||
/* Low priority IPI to cleanup after moving an irq */
|
/* Low priority IPI to cleanup after moving an irq */
|
||||||
set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt);
|
set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init apic_intr_init(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
smp_intr_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
|
alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
|
||||||
alloc_intr_gate(THRESHOLD_APIC_VECTOR, threshold_interrupt);
|
alloc_intr_gate(THRESHOLD_APIC_VECTOR, threshold_interrupt);
|
||||||
|
|
||||||
|
@ -216,6 +210,25 @@ void __init native_init_IRQ(void)
|
||||||
/* IPI vectors for APIC spurious and error interrupts */
|
/* IPI vectors for APIC spurious and error interrupts */
|
||||||
alloc_intr_gate(SPURIOUS_APIC_VECTOR, spurious_interrupt);
|
alloc_intr_gate(SPURIOUS_APIC_VECTOR, spurious_interrupt);
|
||||||
alloc_intr_gate(ERROR_APIC_VECTOR, error_interrupt);
|
alloc_intr_gate(ERROR_APIC_VECTOR, error_interrupt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init native_init_IRQ(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
init_ISA_irqs();
|
||||||
|
/*
|
||||||
|
* Cover the whole vector space, no vector can escape
|
||||||
|
* us. (some of these will be overridden and become
|
||||||
|
* 'special' SMP interrupts)
|
||||||
|
*/
|
||||||
|
for (i = 0; i < (NR_VECTORS - FIRST_EXTERNAL_VECTOR); i++) {
|
||||||
|
int vector = FIRST_EXTERNAL_VECTOR + i;
|
||||||
|
if (vector != IA32_SYSCALL_VECTOR)
|
||||||
|
set_intr_gate(vector, interrupt[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
apic_intr_init();
|
||||||
|
|
||||||
if (!acpi_ioapic)
|
if (!acpi_ioapic)
|
||||||
setup_irq(2, &irq2);
|
setup_irq(2, &irq2);
|
||||||
|
|
Loading…
Add table
Reference in a new issue