diff options
| -rw-r--r-- | arch/i386/kernel/io_apic.c | 12 | ||||
| -rw-r--r-- | arch/x86_64/kernel/io_apic.c | 8 | ||||
| -rw-r--r-- | include/asm-i386/hw_irq.h | 3 | ||||
| -rw-r--r-- | include/asm-x86_64/hw_irq.h | 2 |
4 files changed, 10 insertions, 15 deletions
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index b7287fb499f3..cd082c36ca03 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
| @@ -1184,8 +1184,8 @@ static int __assign_irq_vector(int irq) | |||
| 1184 | 1184 | ||
| 1185 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 1185 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
| 1186 | 1186 | ||
| 1187 | if (IO_APIC_VECTOR(irq) > 0) | 1187 | if (irq_vector[irq] > 0) |
| 1188 | return IO_APIC_VECTOR(irq); | 1188 | return irq_vector[irq]; |
| 1189 | 1189 | ||
| 1190 | current_vector += 8; | 1190 | current_vector += 8; |
| 1191 | if (current_vector == SYSCALL_VECTOR) | 1191 | if (current_vector == SYSCALL_VECTOR) |
| @@ -1199,7 +1199,7 @@ static int __assign_irq_vector(int irq) | |||
| 1199 | } | 1199 | } |
| 1200 | 1200 | ||
| 1201 | vector = current_vector; | 1201 | vector = current_vector; |
| 1202 | IO_APIC_VECTOR(irq) = vector; | 1202 | irq_vector[irq] = vector; |
| 1203 | 1203 | ||
| 1204 | return vector; | 1204 | return vector; |
| 1205 | } | 1205 | } |
| @@ -1967,7 +1967,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq) | |||
| 1967 | * operation to prevent an edge-triggered interrupt escaping meanwhile. | 1967 | * operation to prevent an edge-triggered interrupt escaping meanwhile. |
| 1968 | * The idea is from Manfred Spraul. --macro | 1968 | * The idea is from Manfred Spraul. --macro |
| 1969 | */ | 1969 | */ |
| 1970 | i = IO_APIC_VECTOR(irq); | 1970 | i = irq_vector[irq]; |
| 1971 | 1971 | ||
| 1972 | v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); | 1972 | v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); |
| 1973 | 1973 | ||
| @@ -1984,7 +1984,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq) | |||
| 1984 | 1984 | ||
| 1985 | static int ioapic_retrigger_irq(unsigned int irq) | 1985 | static int ioapic_retrigger_irq(unsigned int irq) |
| 1986 | { | 1986 | { |
| 1987 | send_IPI_self(IO_APIC_VECTOR(irq)); | 1987 | send_IPI_self(irq_vector[irq]); |
| 1988 | 1988 | ||
| 1989 | return 1; | 1989 | return 1; |
| 1990 | } | 1990 | } |
| @@ -2020,7 +2020,7 @@ static inline void init_IO_APIC_traps(void) | |||
| 2020 | */ | 2020 | */ |
| 2021 | for (irq = 0; irq < NR_IRQS ; irq++) { | 2021 | for (irq = 0; irq < NR_IRQS ; irq++) { |
| 2022 | int tmp = irq; | 2022 | int tmp = irq; |
| 2023 | if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) { | 2023 | if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) { |
| 2024 | /* | 2024 | /* |
| 2025 | * Hmm.. We don't have an entry for this, | 2025 | * Hmm.. We don't have an entry for this, |
| 2026 | * so default to an old-fashioned 8259 | 2026 | * so default to an old-fashioned 8259 |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index 91728d9d3472..9c3b9b19d699 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
| @@ -587,8 +587,8 @@ static int __assign_irq_vector(int irq, cpumask_t mask) | |||
| 587 | 587 | ||
| 588 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 588 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
| 589 | 589 | ||
| 590 | if (IO_APIC_VECTOR(irq) > 0) | 590 | if (irq_vector[irq] > 0) |
| 591 | old_vector = IO_APIC_VECTOR(irq); | 591 | old_vector = irq_vector[irq]; |
| 592 | if ((old_vector > 0) && cpu_isset(old_vector >> 8, mask)) { | 592 | if ((old_vector > 0) && cpu_isset(old_vector >> 8, mask)) { |
| 593 | return old_vector; | 593 | return old_vector; |
| 594 | } | 594 | } |
| @@ -620,7 +620,7 @@ next: | |||
| 620 | } | 620 | } |
| 621 | per_cpu(vector_irq, cpu)[vector] = irq; | 621 | per_cpu(vector_irq, cpu)[vector] = irq; |
| 622 | vector |= cpu << 8; | 622 | vector |= cpu << 8; |
| 623 | IO_APIC_VECTOR(irq) = vector; | 623 | irq_vector[irq] = vector; |
| 624 | return vector; | 624 | return vector; |
| 625 | } | 625 | } |
| 626 | return -ENOSPC; | 626 | return -ENOSPC; |
| @@ -1289,7 +1289,7 @@ static inline void init_IO_APIC_traps(void) | |||
| 1289 | */ | 1289 | */ |
| 1290 | for (irq = 0; irq < NR_IRQS ; irq++) { | 1290 | for (irq = 0; irq < NR_IRQS ; irq++) { |
| 1291 | int tmp = irq; | 1291 | int tmp = irq; |
| 1292 | if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) { | 1292 | if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) { |
| 1293 | /* | 1293 | /* |
| 1294 | * Hmm.. We don't have an entry for this, | 1294 | * Hmm.. We don't have an entry for this, |
| 1295 | * so default to an old-fashioned 8259 | 1295 | * so default to an old-fashioned 8259 |
diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h index 8806c7e002a7..0bedbdf5e907 100644 --- a/include/asm-i386/hw_irq.h +++ b/include/asm-i386/hw_irq.h | |||
| @@ -26,9 +26,6 @@ | |||
| 26 | * Interrupt entry/exit code at both C and assembly level | 26 | * Interrupt entry/exit code at both C and assembly level |
| 27 | */ | 27 | */ |
| 28 | 28 | ||
| 29 | extern u8 irq_vector[NR_IRQ_VECTORS]; | ||
| 30 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | ||
| 31 | |||
| 32 | extern void (*interrupt[NR_IRQS])(void); | 29 | extern void (*interrupt[NR_IRQS])(void); |
| 33 | 30 | ||
| 34 | #ifdef CONFIG_SMP | 31 | #ifdef CONFIG_SMP |
diff --git a/include/asm-x86_64/hw_irq.h b/include/asm-x86_64/hw_irq.h index 53d0d9fd10d6..792dd52fcd70 100644 --- a/include/asm-x86_64/hw_irq.h +++ b/include/asm-x86_64/hw_irq.h | |||
| @@ -74,10 +74,8 @@ | |||
| 74 | 74 | ||
| 75 | 75 | ||
| 76 | #ifndef __ASSEMBLY__ | 76 | #ifndef __ASSEMBLY__ |
| 77 | extern unsigned int irq_vector[NR_IRQ_VECTORS]; | ||
| 78 | typedef int vector_irq_t[NR_VECTORS]; | 77 | typedef int vector_irq_t[NR_VECTORS]; |
| 79 | DECLARE_PER_CPU(vector_irq_t, vector_irq); | 78 | DECLARE_PER_CPU(vector_irq_t, vector_irq); |
| 80 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | ||
| 81 | 79 | ||
| 82 | /* | 80 | /* |
| 83 | * Various low-level irq details needed by irq.c, process.c, | 81 | * Various low-level irq details needed by irq.c, process.c, |
