diff options
-rw-r--r-- | include/asm-cris/irq.h | 5 | ||||
-rw-r--r-- | include/asm-ia64/irq.h | 5 | ||||
-rw-r--r-- | include/asm-parisc/irq.h | 5 | ||||
-rw-r--r-- | include/asm-ppc/irq.h | 5 | ||||
-rw-r--r-- | include/asm-ppc64/irq.h | 5 | ||||
-rw-r--r-- | include/linux/irq.h | 7 | ||||
-rw-r--r-- | kernel/irq/handle.c | 2 |
7 files changed, 32 insertions, 2 deletions
diff --git a/include/asm-cris/irq.h b/include/asm-cris/irq.h index 8e787fdaedd4..4fab5c3b2e15 100644 --- a/include/asm-cris/irq.h +++ b/include/asm-cris/irq.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef _ASM_IRQ_H | 1 | #ifndef _ASM_IRQ_H |
2 | #define _ASM_IRQ_H | 2 | #define _ASM_IRQ_H |
3 | 3 | ||
4 | /* | ||
5 | * IRQ line status macro IRQ_PER_CPU is used | ||
6 | */ | ||
7 | #define ARCH_HAS_IRQ_PER_CPU | ||
8 | |||
4 | #include <asm/arch/irq.h> | 9 | #include <asm/arch/irq.h> |
5 | 10 | ||
6 | extern __inline__ int irq_canonicalize(int irq) | 11 | extern __inline__ int irq_canonicalize(int irq) |
diff --git a/include/asm-ia64/irq.h b/include/asm-ia64/irq.h index 5d930fdc0bea..cd984d08fd15 100644 --- a/include/asm-ia64/irq.h +++ b/include/asm-ia64/irq.h | |||
@@ -14,6 +14,11 @@ | |||
14 | #define NR_IRQS 256 | 14 | #define NR_IRQS 256 |
15 | #define NR_IRQ_VECTORS NR_IRQS | 15 | #define NR_IRQ_VECTORS NR_IRQS |
16 | 16 | ||
17 | /* | ||
18 | * IRQ line status macro IRQ_PER_CPU is used | ||
19 | */ | ||
20 | #define ARCH_HAS_IRQ_PER_CPU | ||
21 | |||
17 | static __inline__ int | 22 | static __inline__ int |
18 | irq_canonicalize (int irq) | 23 | irq_canonicalize (int irq) |
19 | { | 24 | { |
diff --git a/include/asm-parisc/irq.h b/include/asm-parisc/irq.h index 75654ba93353..f876bdf22056 100644 --- a/include/asm-parisc/irq.h +++ b/include/asm-parisc/irq.h | |||
@@ -26,6 +26,11 @@ | |||
26 | 26 | ||
27 | #define NR_IRQS (CPU_IRQ_MAX + 1) | 27 | #define NR_IRQS (CPU_IRQ_MAX + 1) |
28 | 28 | ||
29 | /* | ||
30 | * IRQ line status macro IRQ_PER_CPU is used | ||
31 | */ | ||
32 | #define ARCH_HAS_IRQ_PER_CPU | ||
33 | |||
29 | static __inline__ int irq_canonicalize(int irq) | 34 | static __inline__ int irq_canonicalize(int irq) |
30 | { | 35 | { |
31 | return (irq == 2) ? 9 : irq; | 36 | return (irq == 2) ? 9 : irq; |
diff --git a/include/asm-ppc/irq.h b/include/asm-ppc/irq.h index a244d93ca953..b4b270457edd 100644 --- a/include/asm-ppc/irq.h +++ b/include/asm-ppc/irq.h | |||
@@ -19,6 +19,11 @@ | |||
19 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ | 19 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ |
20 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ | 20 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ |
21 | 21 | ||
22 | /* | ||
23 | * IRQ line status macro IRQ_PER_CPU is used | ||
24 | */ | ||
25 | #define ARCH_HAS_IRQ_PER_CPU | ||
26 | |||
22 | #if defined(CONFIG_40x) | 27 | #if defined(CONFIG_40x) |
23 | #include <asm/ibm4xx.h> | 28 | #include <asm/ibm4xx.h> |
24 | 29 | ||
diff --git a/include/asm-ppc64/irq.h b/include/asm-ppc64/irq.h index 570678b1da95..99782afb4cde 100644 --- a/include/asm-ppc64/irq.h +++ b/include/asm-ppc64/irq.h | |||
@@ -33,6 +33,11 @@ | |||
33 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ | 33 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ |
34 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ | 34 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ |
35 | 35 | ||
36 | /* | ||
37 | * IRQ line status macro IRQ_PER_CPU is used | ||
38 | */ | ||
39 | #define ARCH_HAS_IRQ_PER_CPU | ||
40 | |||
36 | #define get_irq_desc(irq) (&irq_desc[(irq)]) | 41 | #define get_irq_desc(irq) (&irq_desc[(irq)]) |
37 | 42 | ||
38 | /* Define a way to iterate across irqs. */ | 43 | /* Define a way to iterate across irqs. */ |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 4a362b9ec966..69681c3b1f05 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -32,7 +32,12 @@ | |||
32 | #define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */ | 32 | #define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */ |
33 | #define IRQ_LEVEL 64 /* IRQ level triggered */ | 33 | #define IRQ_LEVEL 64 /* IRQ level triggered */ |
34 | #define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */ | 34 | #define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */ |
35 | #define IRQ_PER_CPU 256 /* IRQ is per CPU */ | 35 | #if defined(ARCH_HAS_IRQ_PER_CPU) |
36 | # define IRQ_PER_CPU 256 /* IRQ is per CPU */ | ||
37 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | ||
38 | #else | ||
39 | # define CHECK_IRQ_PER_CPU(var) 0 | ||
40 | #endif | ||
36 | 41 | ||
37 | /* | 42 | /* |
38 | * Interrupt controller descriptor. This is all we need | 43 | * Interrupt controller descriptor. This is all we need |
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index c29f83c16497..3ff7b925c387 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
@@ -111,7 +111,7 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
111 | unsigned int status; | 111 | unsigned int status; |
112 | 112 | ||
113 | kstat_this_cpu.irqs[irq]++; | 113 | kstat_this_cpu.irqs[irq]++; |
114 | if (desc->status & IRQ_PER_CPU) { | 114 | if (CHECK_IRQ_PER_CPU(desc->status)) { |
115 | irqreturn_t action_ret; | 115 | irqreturn_t action_ret; |
116 | 116 | ||
117 | /* | 117 | /* |