diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2006-10-04 05:16:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-04 10:55:28 -0400 |
commit | 23d0b8b053391afe15c9667d80de77ca88e18b8b (patch) | |
tree | 8ee6dd027581f794bcbffaa9022a3635ba59b04a | |
parent | 323a01c50832749d23664954f91df6fc43e73975 (diff) |
[PATCH] genirq: irq: generalize the check for HARDIRQ_BITS
This patch adds support for systems that cannot receive every interrupt on a
single cpu simultaneously, in the check to see if we have enough HARDIRQ_BITS.
MAX_HARDIRQS_PER_CPU becomes the count of the maximum number of hardare
generated interrupts per cpu.
On architectures that support per cpu interrupt delivery this can be a
significant space savings and scalability bonus.
This patch adds support for systems that cannot receive every interrupt on
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Rajesh Shah <rajesh.shah@intel.com>
Cc: Andi Kleen <ak@muc.de>
Cc: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/asm-x86_64/hardirq.h | 3 | ||||
-rw-r--r-- | include/linux/hardirq.h | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/include/asm-x86_64/hardirq.h b/include/asm-x86_64/hardirq.h index 64a65ce2f41f..95d5e090ed89 100644 --- a/include/asm-x86_64/hardirq.h +++ b/include/asm-x86_64/hardirq.h | |||
@@ -6,6 +6,9 @@ | |||
6 | #include <asm/pda.h> | 6 | #include <asm/pda.h> |
7 | #include <asm/apic.h> | 7 | #include <asm/apic.h> |
8 | 8 | ||
9 | /* We can have at most NR_VECTORS irqs routed to a cpu at a time */ | ||
10 | #define MAX_HARDIRQS_PER_CPU NR_VECTORS | ||
11 | |||
9 | #define __ARCH_IRQ_STAT 1 | 12 | #define __ARCH_IRQ_STAT 1 |
10 | 13 | ||
11 | #define local_softirq_pending() read_pda(__softirq_pending) | 14 | #define local_softirq_pending() read_pda(__softirq_pending) |
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 50d8b5744cf6..612472aaa79c 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -28,11 +28,16 @@ | |||
28 | 28 | ||
29 | #ifndef HARDIRQ_BITS | 29 | #ifndef HARDIRQ_BITS |
30 | #define HARDIRQ_BITS 12 | 30 | #define HARDIRQ_BITS 12 |
31 | |||
32 | #ifndef MAX_HARDIRQS_PER_CPU | ||
33 | #define MAX_HARDIRQS_PER_CPU NR_IRQS | ||
34 | #endif | ||
35 | |||
31 | /* | 36 | /* |
32 | * The hardirq mask has to be large enough to have space for potentially | 37 | * The hardirq mask has to be large enough to have space for potentially |
33 | * all IRQ sources in the system nesting on a single CPU. | 38 | * all IRQ sources in the system nesting on a single CPU. |
34 | */ | 39 | */ |
35 | #if (1 << HARDIRQ_BITS) < NR_IRQS | 40 | #if (1 << HARDIRQ_BITS) < MAX_HARDIRQS_PER_CPU |
36 | # error HARDIRQ_BITS is too low! | 41 | # error HARDIRQ_BITS is too low! |
37 | #endif | 42 | #endif |
38 | #endif | 43 | #endif |