x86: IRQ cleanups
cover x86: IRQ cleanups
The following are a few simple cleanups to the x86 IRQ code.
arch/x86/include/asm/hw_irq.h | 35 ----------------------------------- arch/x86/include/asm/irq_vectors.h | 21 +-------------------- arch/x86/kernel/apic/io_apic.c | 4 ++-- arch/x86/kernel/apic/vector.c | 2 +- arch/x86/kernel/i8259.c | 8 ++++---- arch/x86/kernel/irq.c | 6 ++++++ arch/x86/kernel/irq_32.c | 6 ------ arch/x86/kernel/irq_64.c | 6 ------ arch/x86/kernel/irqinit.c | 4 ++-- arch/x86/kernel/traps.c | 4 ++-- arch/x86/lguest/boot.c | 4 ++-- 11 files changed, 20 insertions(+), 80 deletions(-)
PATCH 1/4 x86: Merge irq_regs & irq_stat
Move irq_regs and irq_stat definitions to irq.c.
--- arch/x86/kernel/irq.c | 6 ++++++ arch/x86/kernel/irq_32.c | 6 ------ arch/x86/kernel/irq_64.c | 6 ------ 3 files changed, 6 insertions(+), 12 deletions(-)
arch/x86/kernel/irq.c +6 -0
@@ -22,6 +22,12 @@#define CREATE_TRACE_POINTS #include <asm/trace/irq_vectors.h> +DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); +EXPORT_PER_CPU_SYMBOL (irq_stat); + +DEFINE_PER_CPU(struct pt_regs *, irq_regs); +EXPORT_PER_CPU_SYMBOL (irq_regs); +atomic_t irq_err_count;/* Function pointer for generic interrupt vector handling */
arch/x86/kernel/irq_32.c +0 -6
@@ -21,12 +21,6 @@#include <asm/apic.h> -DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); -EXPORT_PER_CPU_SYMBOL (irq_stat); - -DEFINE_PER_CPU(struct pt_regs *, irq_regs); -EXPORT_PER_CPU_SYMBOL (irq_regs); -#ifdef CONFIG_DEBUG_STACKOVERFLOW int sysctl_panic_on_stackoverflow__read_mostly ;
arch/x86/kernel/irq_64.c +0 -6
@@ -20,12 +20,6 @@#include <asm/idle.h> #include <asm/apic.h> -DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); -EXPORT_PER_CPU_SYMBOL (irq_stat); - -DEFINE_PER_CPU(struct pt_regs *, irq_regs); -EXPORT_PER_CPU_SYMBOL (irq_regs); -int sysctl_panic_on_stackoverflow;/*
Signature · 1 line
2.1.0
tip-bot for Brian Gerst
merge bot[tip:x86/asm] x86/irq: Merge irq_regs & irq_stat
x86/irq: Merge irq_regs & irq_stat
Commit-ID: c5bde906d2916d214d78cd8b67d665bf09867033 Gitweb: http://git.kernel.org/tip/c5bde906d2916d214d78cd8b67d665bf09867033 Author: Brian Gerst <[email protected]> AuthorDate: Sat, 9 May 2015 11:36:50 -0400 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 10 May 2015 12:34:27 +0200
x86/irq: Merge irq_regs & irq_stat
Move irq_regs and irq_stat definitions to irq.c.
--- arch/x86/kernel/irq.c | 6 ++++++ arch/x86/kernel/irq_32.c | 6 ------ arch/x86/kernel/irq_64.c | 6 ------ 3 files changed, 6 insertions(+), 12 deletions(-)
arch/x86/kernel/irq.c +6 -0
@@ -22,6 +22,12 @@#define CREATE_TRACE_POINTS #include <asm/trace/irq_vectors.h> +DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); +EXPORT_PER_CPU_SYMBOL (irq_stat); + +DEFINE_PER_CPU(struct pt_regs *, irq_regs); +EXPORT_PER_CPU_SYMBOL (irq_regs); +atomic_t irq_err_count;/* Function pointer for generic interrupt vector handling */
arch/x86/kernel/irq_32.c +0 -6
@@ -21,12 +21,6 @@#include <asm/apic.h> -DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); -EXPORT_PER_CPU_SYMBOL (irq_stat); - -DEFINE_PER_CPU(struct pt_regs *, irq_regs); -EXPORT_PER_CPU_SYMBOL (irq_regs); -#ifdef CONFIG_DEBUG_STACKOVERFLOW int sysctl_panic_on_stackoverflow__read_mostly ;
arch/x86/kernel/irq_64.c +0 -6
@@ -20,12 +20,6 @@#include <asm/idle.h> #include <asm/apic.h> -DEFINE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); -EXPORT_PER_CPU_SYMBOL (irq_stat); - -DEFINE_PER_CPU(struct pt_regs *, irq_regs); -EXPORT_PER_CPU_SYMBOL (irq_regs); -int sysctl_panic_on_stackoverflow;/*
PATCH 2/4 x86: Remove unused invalidate_interrupt prototypes
In reply to Brian GerstThe invalidate_interrupt* functions no longer exist.
--- arch/x86/include/asm/hw_irq.h | 35 ----------------------------------- 1 file changed, 35 deletions(-)
arch/x86/include/asm/hw_irq.h +0 -35
@@ -36,40 +36,6 @@ extern asmlinkage void spurious_interrupt(void); extern asmlinkage void thermal_interrupt(void); extern asmlinkage void reschedule_interrupt(void); -extern asmlinkage void invalidate_interrupt(void); -extern asmlinkage void invalidate_interrupt0(void); -extern asmlinkage void invalidate_interrupt1(void); -extern asmlinkage void invalidate_interrupt2(void); -extern asmlinkage void invalidate_interrupt3(void); -extern asmlinkage void invalidate_interrupt4(void); -extern asmlinkage void invalidate_interrupt5(void); -extern asmlinkage void invalidate_interrupt6(void); -extern asmlinkage void invalidate_interrupt7(void); -extern asmlinkage void invalidate_interrupt8(void); -extern asmlinkage void invalidate_interrupt9(void); -extern asmlinkage void invalidate_interrupt10(void); -extern asmlinkage void invalidate_interrupt11(void); -extern asmlinkage void invalidate_interrupt12(void); -extern asmlinkage void invalidate_interrupt13(void); -extern asmlinkage void invalidate_interrupt14(void); -extern asmlinkage void invalidate_interrupt15(void); -extern asmlinkage void invalidate_interrupt16(void); -extern asmlinkage void invalidate_interrupt17(void); -extern asmlinkage void invalidate_interrupt18(void); -extern asmlinkage void invalidate_interrupt19(void); -extern asmlinkage void invalidate_interrupt20(void); -extern asmlinkage void invalidate_interrupt21(void); -extern asmlinkage void invalidate_interrupt22(void); -extern asmlinkage void invalidate_interrupt23(void); -extern asmlinkage void invalidate_interrupt24(void); -extern asmlinkage void invalidate_interrupt25(void); -extern asmlinkage void invalidate_interrupt26(void); -extern asmlinkage void invalidate_interrupt27(void); -extern asmlinkage void invalidate_interrupt28(void); -extern asmlinkage void invalidate_interrupt29(void); -extern asmlinkage void invalidate_interrupt30(void); -extern asmlinkage void invalidate_interrupt31(void); - extern asmlinkage void irq_move_cleanup_interrupt(void); extern asmlinkage void reboot_interrupt(void); extern asmlinkage void threshold_interrupt(void);
@@ -178,7 +144,6 @@ extern asmlinkage void smp_irq_move_cleanup_interrupt(void); extern __visible void smp_reschedule_interrupt(struct pt_regs *); extern __visible void smp_call_function_interrupt(struct pt_regs *); extern __visible void smp_call_function_single_interrupt(struct pt_regs *); -extern __visible void smp_invalidate_interrupt(struct pt_regs *);#endif extern char irq_entries_start[];
Signature · 1 line
2.1.0
tip-bot for Brian Gerst
merge bot[tip:x86/asm] x86/asm/entry/irq: Remove unused invalidate_interrupt prototypes
x86/asm/entry/irq: Remove unused invalidate_interrupt prototypes
Commit-ID: c6e692f95dacddff5f3607717fb2246c60bbb714 Gitweb: http://git.kernel.org/tip/c6e692f95dacddff5f3607717fb2246c60bbb714 Author: Brian Gerst <[email protected]> AuthorDate: Sat, 9 May 2015 11:36:51 -0400 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 10 May 2015 12:34:28 +0200
x86/asm/entry/irq: Remove unused invalidate_interrupt prototypes
The invalidate_interrupt* functions no longer exist.
--- arch/x86/include/asm/hw_irq.h | 35 ----------------------------------- 1 file changed, 35 deletions(-)
arch/x86/include/asm/hw_irq.h +0 -35
@@ -36,40 +36,6 @@ extern asmlinkage void spurious_interrupt(void); extern asmlinkage void thermal_interrupt(void); extern asmlinkage void reschedule_interrupt(void); -extern asmlinkage void invalidate_interrupt(void); -extern asmlinkage void invalidate_interrupt0(void); -extern asmlinkage void invalidate_interrupt1(void); -extern asmlinkage void invalidate_interrupt2(void); -extern asmlinkage void invalidate_interrupt3(void); -extern asmlinkage void invalidate_interrupt4(void); -extern asmlinkage void invalidate_interrupt5(void); -extern asmlinkage void invalidate_interrupt6(void); -extern asmlinkage void invalidate_interrupt7(void); -extern asmlinkage void invalidate_interrupt8(void); -extern asmlinkage void invalidate_interrupt9(void); -extern asmlinkage void invalidate_interrupt10(void); -extern asmlinkage void invalidate_interrupt11(void); -extern asmlinkage void invalidate_interrupt12(void); -extern asmlinkage void invalidate_interrupt13(void); -extern asmlinkage void invalidate_interrupt14(void); -extern asmlinkage void invalidate_interrupt15(void); -extern asmlinkage void invalidate_interrupt16(void); -extern asmlinkage void invalidate_interrupt17(void); -extern asmlinkage void invalidate_interrupt18(void); -extern asmlinkage void invalidate_interrupt19(void); -extern asmlinkage void invalidate_interrupt20(void); -extern asmlinkage void invalidate_interrupt21(void); -extern asmlinkage void invalidate_interrupt22(void); -extern asmlinkage void invalidate_interrupt23(void); -extern asmlinkage void invalidate_interrupt24(void); -extern asmlinkage void invalidate_interrupt25(void); -extern asmlinkage void invalidate_interrupt26(void); -extern asmlinkage void invalidate_interrupt27(void); -extern asmlinkage void invalidate_interrupt28(void); -extern asmlinkage void invalidate_interrupt29(void); -extern asmlinkage void invalidate_interrupt30(void); -extern asmlinkage void invalidate_interrupt31(void); - extern asmlinkage void irq_move_cleanup_interrupt(void); extern asmlinkage void reboot_interrupt(void); extern asmlinkage void threshold_interrupt(void);
@@ -178,7 +144,6 @@ extern asmlinkage void smp_irq_move_cleanup_interrupt(void); extern __visible void smp_reschedule_interrupt(struct pt_regs *); extern __visible void smp_call_function_interrupt(struct pt_regs *); extern __visible void smp_call_function_single_interrupt(struct pt_regs *); -extern __visible void smp_invalidate_interrupt(struct pt_regs *);#endif extern char irq_entries_start[];
PATCH 3/4 x86: Remove SYSCALL_VECTOR
In reply to Brian GerstUse IA32_SYSCALL_VECTOR for both compat and native.
--- arch/x86/include/asm/irq_vectors.h | 3 --- arch/x86/kernel/traps.c | 4 ++-- arch/x86/lguest/boot.c | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-)
arch/x86/include/asm/irq_vectors.h +0 -3
@@ -47,9 +47,6 @@#define IRQ_MOVE_CLEANUP_VECTOR FIRST_EXTERNAL_VECTOR#define IA32_SYSCALL_VECTOR 0x80 -#ifdef CONFIG_X86_32 -# define SYSCALL_VECTOR 0x80 -#endif /* * Vectors 0x30-0x3f are used for ISA interrupts.
arch/x86/kernel/traps.c +2 -2
@@ -997,8 +997,8 @@ void __init trap_init(void)#endif #ifdef CONFIG_X86_32 -set_system_trap_gate (SYSCALL_VECTOR , &system_call); -set_bit (SYSCALL_VECTOR , used_vectors); +set_system_trap_gate (IA32_SYSCALL_VECTOR , &system_call); +set_bit (IA32_SYSCALL_VECTOR , used_vectors);#endif /*
arch/x86/lguest/boot.c +2 -2
@@ -90,7 +90,7 @@ struct lguest_data lguest_data = { .noirq_iret = (u32)lguest_noirq_iret, .kernel_address = PAGE_OFFSET, .blocked_interrupts = { 1 }, /* Block timer interrupts */ - .syscall_vec = SYSCALL_VECTOR, + .syscall_vec = IA32_SYSCALL_VECTOR, };/*G:037
@@ -866,7 +866,7 @@ static void __init lguest_init_IRQ(void)for (i =FIRST_EXTERNAL_VECTOR ; i <FIRST_SYSTEM_VECTOR ; i++) {/* Some systems map "vectors" to interrupts weirdly. Not us! */ __this_cpu_write (vector_irq[i], i -FIRST_EXTERNAL_VECTOR ); -if (i !=SYSCALL_VECTOR ) +if (i !=IA32_SYSCALL_VECTOR )set_intr_gate (i, irq_entries_start +8 * (i -FIRST_EXTERNAL_VECTOR )); }
Signature · 1 line
2.1.0
tip-bot for Brian Gerst
merge bot[tip:x86/asm] x86/asm/entry: Remove SYSCALL_VECTOR
x86/asm/entry: Remove SYSCALL_VECTOR
Commit-ID: 51bb92843edcba5a58138cad25ced97923048add Gitweb: http://git.kernel.org/tip/51bb92843edcba5a58138cad25ced97923048add Author: Brian Gerst <[email protected]> AuthorDate: Sat, 9 May 2015 11:36:52 -0400 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 10 May 2015 12:34:28 +0200
x86/asm/entry: Remove SYSCALL_VECTOR
Use IA32_SYSCALL_VECTOR for both compat and native.
--- arch/x86/include/asm/irq_vectors.h | 3 --- arch/x86/kernel/traps.c | 4 ++-- arch/x86/lguest/boot.c | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-)
arch/x86/include/asm/irq_vectors.h +0 -3
@@ -47,9 +47,6 @@#define IRQ_MOVE_CLEANUP_VECTOR FIRST_EXTERNAL_VECTOR#define IA32_SYSCALL_VECTOR 0x80 -#ifdef CONFIG_X86_32 -# define SYSCALL_VECTOR 0x80 -#endif /* * Vectors 0x30-0x3f are used for ISA interrupts.
arch/x86/kernel/traps.c +2 -2
@@ -997,8 +997,8 @@ void __init trap_init(void)#endif #ifdef CONFIG_X86_32 -set_system_trap_gate (SYSCALL_VECTOR , &system_call); -set_bit (SYSCALL_VECTOR , used_vectors); +set_system_trap_gate (IA32_SYSCALL_VECTOR , &system_call); +set_bit (IA32_SYSCALL_VECTOR , used_vectors);#endif /*
arch/x86/lguest/boot.c +2 -2
@@ -90,7 +90,7 @@ struct lguest_data lguest_data = { .noirq_iret = (u32)lguest_noirq_iret, .kernel_address = PAGE_OFFSET, .blocked_interrupts = { 1 }, /* Block timer interrupts */ - .syscall_vec = SYSCALL_VECTOR, + .syscall_vec = IA32_SYSCALL_VECTOR, };/*G:037
@@ -866,7 +866,7 @@ static void __init lguest_init_IRQ(void)for (i =FIRST_EXTERNAL_VECTOR ; i <FIRST_SYSTEM_VECTOR ; i++) {/* Some systems map "vectors" to interrupts weirdly. Not us! */ __this_cpu_write (vector_irq[i], i -FIRST_EXTERNAL_VECTOR ); -if (i !=SYSCALL_VECTOR ) +if (i !=IA32_SYSCALL_VECTOR )set_intr_gate (i, irq_entries_start +8 * (i -FIRST_EXTERNAL_VECTOR )); }
tip-bot for Ingo Molnar
merge bot[tip:x86/asm] x86/asm/entry: Fix remaining use of SYSCALL_VECTOR
In reply to Brian Gerstx86/asm/entry: Fix remaining use of SYSCALL_VECTOR
Commit-ID: f435e68fe74d41a34124e49c07ff9f9cd7954e35 Gitweb: http://git.kernel.org/tip/f435e68fe74d41a34124e49c07ff9f9cd7954e35 Author: Ingo Molnar <[email protected]> AuthorDate: Mon, 11 May 2015 07:17:04 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 11 May 2015 07:17:04 +0200
x86/asm/entry: Fix remaining use of SYSCALL_VECTOR
Commit:
51bb92843edc ("x86/asm/entry: Remove SYSCALL_VECTOR")
Converted most uses of SYSCALL_VECTOR to IA32_SYSCALL_VECTOR, but forgot about lguest.
--- drivers/lguest/interrupts_and_traps.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/lguest/interrupts_and_traps.c +5 -5
@@ -20,7 +20,7 @@#include "lg.h" /* Allow Guests to use a non-128 (ie. non-Linux) syscall trap. */ -static unsigned int syscall_vector =SYSCALL_VECTOR ; +static unsigned int syscall_vector =IA32_SYSCALL_VECTOR ;module_param (syscall_vector, uint,0444 );/* The address of the interrupt handler is split into two bits: */
@@ -333,8 +333,8 @@ void set_interrupt(struct lg_cpu *cpu, unsigned int irq)*/ static bool could_be_syscall (unsigned int num) { -/* Normal Linux SYSCALL_VECTOR or reserved vector? */ -return num ==SYSCALL_VECTOR || num == syscall_vector; +/* Normal Linux IA32_SYSCALL_VECTOR or reserved vector? */ +return num ==IA32_SYSCALL_VECTOR || num == syscall_vector; }/* The syscall vector it wants must be unused by Host. */
@@ -351,7 +351,7 @@ bool check_syscall_vector(struct lguest *lg)int init_interrupts (void ) {/* If they want some strange system call vector, reserve it now */ -if (syscall_vector !=SYSCALL_VECTOR ) { +if (syscall_vector !=IA32_SYSCALL_VECTOR ) {if (test_bit (syscall_vector, used_vectors) ||vector_used_by_percpu_irq (syscall_vector)) { printk(KERN_ERR "lg: couldn't reserve syscall %u\n",
@@ -366,7 +366,7 @@ int init_interrupts(void)void free_interrupts (void ) { -if (syscall_vector !=SYSCALL_VECTOR ) +if (syscall_vector !=IA32_SYSCALL_VECTOR )clear_bit (syscall_vector, used_vectors); }
PATCH 4/4 x86: Clean up IRQn_VECTOR macros
In reply to Brian GerstSince the ISA irqs are in a single block, use ISA_IRQ_VECTOR(irq) instead of individual macros.
--- arch/x86/include/asm/irq_vectors.h | 18 +----------------- arch/x86/kernel/apic/io_apic.c | 4 ++-- arch/x86/kernel/apic/vector.c | 2 +- arch/x86/kernel/i8259.c | 8 ++++---- arch/x86/kernel/irqinit.c | 4 ++-- 5 files changed, 10 insertions(+), 26 deletions(-)
arch/x86/include/asm/irq_vectors.h +1 -17
@@ -52,23 +52,7 @@* Vectors 0x30-0x3f are used for ISA interrupts. * round up to the next 16-vector boundary */ -#define IRQ0_VECTOR ((FIRST_EXTERNAL_VECTOR + 16) & ~15) - -#define IRQ1_VECTOR (IRQ0_VECTOR + 1) -#define IRQ2_VECTOR (IRQ0_VECTOR + 2) -#define IRQ3_VECTOR (IRQ0_VECTOR + 3) -#define IRQ4_VECTOR (IRQ0_VECTOR + 4) -#define IRQ5_VECTOR (IRQ0_VECTOR + 5) -#define IRQ6_VECTOR (IRQ0_VECTOR + 6) -#define IRQ7_VECTOR (IRQ0_VECTOR + 7) -#define IRQ8_VECTOR (IRQ0_VECTOR + 8) -#define IRQ9_VECTOR (IRQ0_VECTOR + 9) -#define IRQ10_VECTOR (IRQ0_VECTOR + 10) -#define IRQ11_VECTOR (IRQ0_VECTOR + 11) -#define IRQ12_VECTOR (IRQ0_VECTOR + 12) -#define IRQ13_VECTOR (IRQ0_VECTOR + 13) -#define IRQ14_VECTOR (IRQ0_VECTOR + 14) -#define IRQ15_VECTOR (IRQ0_VECTOR + 15) +#define ISA_IRQ_VECTOR (irq) (((FIRST_EXTERNAL_VECTOR + 16) & ~15) + irq)/* * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
arch/x86/kernel/apic/io_apic.c +2 -2
@@ -258,11 +258,11 @@ int __init arch_early_ioapic_init(void)/* * For legacy IRQ's, start with assigning irq0 to irq15 to -* IRQ0_VECTOR to IRQ15_VECTOR for all cpu's. +* ISA_IRQ_VECTOR(irq) for all cpu's. */ for (i =0 ; i <nr_legacy_irqs (); i++) { cfg =alloc_irq_and_cfg_at (i, node); - cfg->vector =IRQ0_VECTOR + i; + cfg->vector =ISA_IRQ_VECTOR (i);cpumask_setall (cfg->domain); }
arch/x86/kernel/apic/vector.c +1 -1
@@ -314,7 +314,7 @@ void setup_vector_irq(int cpu)* legacy vector to irq mapping: */ for (irq =0 ; irq <nr_legacy_irqs (); irq++) -per_cpu (vector_irq, cpu)[IRQ0_VECTOR + irq] = irq; +per_cpu (vector_irq, cpu)[ISA_IRQ_VECTOR (irq)] = irq;__setup_vector_irq (cpu); }
arch/x86/kernel/i8259.c +4 -4
@@ -329,8 +329,8 @@ static void init_8259A(int auto_eoi)*/ outb_pic (0x11 ,PIC_MASTER_CMD );/* ICW1: select 8259A-1 init */ -/* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 */ -outb_pic (IRQ0_VECTOR ,PIC_MASTER_IMR ); +/* ICW2: 8259A-1 IR0-7 mapped to ISA_IRQ_VECTOR(0) */ +outb_pic (ISA_IRQ_VECTOR (0 ),PIC_MASTER_IMR );/* 8259A-1 (the master) has a slave on IR2 */ outb_pic (1U <<PIC_CASCADE_IR ,PIC_MASTER_IMR );
@@ -342,8 +342,8 @@ static void init_8259A(int auto_eoi)outb_pic (0x11 ,PIC_SLAVE_CMD );/* ICW1: select 8259A-2 init */ -/* ICW2: 8259A-2 IR0-7 mapped to IRQ8_VECTOR */ -outb_pic (IRQ8_VECTOR ,PIC_SLAVE_IMR ); +/* ICW2: 8259A-2 IR0-7 mapped to ISA_IRQ_VECTOR(8) */ +outb_pic (ISA_IRQ_VECTOR (8 ),PIC_SLAVE_IMR );/* 8259A-2 is a slave on master's IR2 */ outb_pic (PIC_CASCADE_IR ,PIC_SLAVE_IMR );/* (slave's support for AEOI in flat mode is to be investigated) */
arch/x86/kernel/irqinit.c +2 -2
@@ -86,7 +86,7 @@ void __init init_IRQ(void)int i;/* -* On cpu 0, Assign IRQ0_VECTOR..IRQ15_VECTOR's to IRQ 0..15. +* On cpu 0, Assign ISA_IRQ_VECTOR(irq) to IRQ 0..15. * If these IRQ's are handled by legacy interrupt-controllers like PIC, * then this configuration will likely be static after the boot. If * these IRQ's are handled by more mordern controllers like IO-APIC,
@@ -94,7 +94,7 @@ void __init init_IRQ(void)* irq's migrate etc. */ for (i =0 ; i <nr_legacy_irqs (); i++) -per_cpu (vector_irq,0 )[IRQ0_VECTOR + i] = i; +per_cpu (vector_irq,0 )[ISA_IRQ_VECTOR (i)] = i; x86_init.irqs.intr_init (); }
Signature · 1 line
2.1.0
tip-bot for Brian Gerst
merge bot[tip:x86/asm] x86/asm/entry/irq: Clean up IRQn_VECTOR macros
x86/asm/entry/irq: Clean up IRQn_VECTOR macros
Commit-ID: 8b455e6577f325289cf2d1b20f493b2fe5c6c316 Gitweb: http://git.kernel.org/tip/8b455e6577f325289cf2d1b20f493b2fe5c6c316 Author: Brian Gerst <[email protected]> AuthorDate: Sat, 9 May 2015 11:36:53 -0400 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 10 May 2015 12:34:28 +0200
x86/asm/entry/irq: Clean up IRQn_VECTOR macros
Since the ISA irqs are in a single block, use ISA_IRQ_VECTOR(irq) instead of individual macros.
--- arch/x86/include/asm/irq_vectors.h | 18 +----------------- arch/x86/kernel/apic/io_apic.c | 4 ++-- arch/x86/kernel/apic/vector.c | 2 +- arch/x86/kernel/i8259.c | 8 ++++---- arch/x86/kernel/irqinit.c | 4 ++-- 5 files changed, 10 insertions(+), 26 deletions(-)
arch/x86/include/asm/irq_vectors.h +1 -17
@@ -52,23 +52,7 @@* Vectors 0x30-0x3f are used for ISA interrupts. * round up to the next 16-vector boundary */ -#define IRQ0_VECTOR ((FIRST_EXTERNAL_VECTOR + 16) & ~15) - -#define IRQ1_VECTOR (IRQ0_VECTOR + 1) -#define IRQ2_VECTOR (IRQ0_VECTOR + 2) -#define IRQ3_VECTOR (IRQ0_VECTOR + 3) -#define IRQ4_VECTOR (IRQ0_VECTOR + 4) -#define IRQ5_VECTOR (IRQ0_VECTOR + 5) -#define IRQ6_VECTOR (IRQ0_VECTOR + 6) -#define IRQ7_VECTOR (IRQ0_VECTOR + 7) -#define IRQ8_VECTOR (IRQ0_VECTOR + 8) -#define IRQ9_VECTOR (IRQ0_VECTOR + 9) -#define IRQ10_VECTOR (IRQ0_VECTOR + 10) -#define IRQ11_VECTOR (IRQ0_VECTOR + 11) -#define IRQ12_VECTOR (IRQ0_VECTOR + 12) -#define IRQ13_VECTOR (IRQ0_VECTOR + 13) -#define IRQ14_VECTOR (IRQ0_VECTOR + 14) -#define IRQ15_VECTOR (IRQ0_VECTOR + 15) +#define ISA_IRQ_VECTOR (irq) (((FIRST_EXTERNAL_VECTOR + 16) & ~15) + irq)/* * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
arch/x86/kernel/apic/io_apic.c +2 -2
@@ -258,11 +258,11 @@ int __init arch_early_ioapic_init(void)/* * For legacy IRQ's, start with assigning irq0 to irq15 to -* IRQ0_VECTOR to IRQ15_VECTOR for all cpu's. +* ISA_IRQ_VECTOR(irq) for all cpu's. */ for (i =0 ; i <nr_legacy_irqs (); i++) { cfg =alloc_irq_and_cfg_at (i, node); - cfg->vector =IRQ0_VECTOR + i; + cfg->vector =ISA_IRQ_VECTOR (i);cpumask_setall (cfg->domain); }
arch/x86/kernel/apic/vector.c +1 -1
@@ -314,7 +314,7 @@ void setup_vector_irq(int cpu)* legacy vector to irq mapping: */ for (irq =0 ; irq <nr_legacy_irqs (); irq++) -per_cpu (vector_irq, cpu)[IRQ0_VECTOR + irq] = irq; +per_cpu (vector_irq, cpu)[ISA_IRQ_VECTOR (irq)] = irq;__setup_vector_irq (cpu); }
arch/x86/kernel/i8259.c +4 -4
@@ -329,8 +329,8 @@ static void init_8259A(int auto_eoi)*/ outb_pic (0x11 ,PIC_MASTER_CMD );/* ICW1: select 8259A-1 init */ -/* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 */ -outb_pic (IRQ0_VECTOR ,PIC_MASTER_IMR ); +/* ICW2: 8259A-1 IR0-7 mapped to ISA_IRQ_VECTOR(0) */ +outb_pic (ISA_IRQ_VECTOR (0 ),PIC_MASTER_IMR );/* 8259A-1 (the master) has a slave on IR2 */ outb_pic (1U <<PIC_CASCADE_IR ,PIC_MASTER_IMR );
@@ -342,8 +342,8 @@ static void init_8259A(int auto_eoi)outb_pic (0x11 ,PIC_SLAVE_CMD );/* ICW1: select 8259A-2 init */ -/* ICW2: 8259A-2 IR0-7 mapped to IRQ8_VECTOR */ -outb_pic (IRQ8_VECTOR ,PIC_SLAVE_IMR ); +/* ICW2: 8259A-2 IR0-7 mapped to ISA_IRQ_VECTOR(8) */ +outb_pic (ISA_IRQ_VECTOR (8 ),PIC_SLAVE_IMR );/* 8259A-2 is a slave on master's IR2 */ outb_pic (PIC_CASCADE_IR ,PIC_SLAVE_IMR );/* (slave's support for AEOI in flat mode is to be investigated) */
arch/x86/kernel/irqinit.c +2 -2
@@ -86,7 +86,7 @@ void __init init_IRQ(void)int i;/* -* On cpu 0, Assign IRQ0_VECTOR..IRQ15_VECTOR's to IRQ 0..15. +* On cpu 0, Assign ISA_IRQ_VECTOR(irq) to IRQ 0..15. * If these IRQ's are handled by legacy interrupt-controllers like PIC, * then this configuration will likely be static after the boot. If * these IRQ's are handled by more mordern controllers like IO-APIC,
@@ -94,7 +94,7 @@ void __init init_IRQ(void)* irq's migrate etc. */ for (i =0 ; i <nr_legacy_irqs (); i++) -per_cpu (vector_irq,0 )[IRQ0_VECTOR + i] = i; +per_cpu (vector_irq,0 )[ISA_IRQ_VECTOR (i)] = i; x86_init.irqs.intr_init (); }