diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 17 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 35f3f20d6731..caa6c396ec78 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -30,6 +30,14 @@ | |||
30 | * Interrupt handling. Preserves r7, r8, r9 | 30 | * Interrupt handling. Preserves r7, r8, r9 |
31 | */ | 31 | */ |
32 | .macro irq_handler | 32 | .macro irq_handler |
33 | #ifdef CONFIG_MULTI_IRQ_HANDLER | ||
34 | ldr r5, =handle_arch_irq | ||
35 | mov r0, sp | ||
36 | ldr r5, [r5] | ||
37 | adr lr, BSYM(9997f) | ||
38 | teq r5, #0 | ||
39 | movne pc, r5 | ||
40 | #endif | ||
33 | get_irqnr_preamble r5, lr | 41 | get_irqnr_preamble r5, lr |
34 | 1: get_irqnr_and_base r0, r6, r5, lr | 42 | 1: get_irqnr_and_base r0, r6, r5, lr |
35 | movne r1, sp | 43 | movne r1, sp |
@@ -58,9 +66,8 @@ | |||
58 | adrne lr, BSYM(1b) | 66 | adrne lr, BSYM(1b) |
59 | bne do_local_timer | 67 | bne do_local_timer |
60 | #endif | 68 | #endif |
61 | 9997: | ||
62 | #endif | 69 | #endif |
63 | 70 | 9997: | |
64 | .endm | 71 | .endm |
65 | 72 | ||
66 | #ifdef CONFIG_KPROBES | 73 | #ifdef CONFIG_KPROBES |
@@ -1245,3 +1252,9 @@ cr_alignment: | |||
1245 | .space 4 | 1252 | .space 4 |
1246 | cr_no_alignment: | 1253 | cr_no_alignment: |
1247 | .space 4 | 1254 | .space 4 |
1255 | |||
1256 | #ifdef CONFIG_MULTI_IRQ_HANDLER | ||
1257 | .globl handle_arch_irq | ||
1258 | handle_arch_irq: | ||
1259 | .space 4 | ||
1260 | #endif | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 8075e592f902..0826f36330c4 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -875,6 +875,9 @@ void __init setup_arch(char **cmdline_p) | |||
875 | init_arch_irq = mdesc->init_irq; | 875 | init_arch_irq = mdesc->init_irq; |
876 | system_timer = mdesc->timer; | 876 | system_timer = mdesc->timer; |
877 | init_machine = mdesc->init_machine; | 877 | init_machine = mdesc->init_machine; |
878 | #ifdef CONFIG_MULTI_IRQ_HANDLER | ||
879 | handle_arch_irq = mdesc->handle_irq; | ||
880 | #endif | ||
878 | 881 | ||
879 | #ifdef CONFIG_VT | 882 | #ifdef CONFIG_VT |
880 | #if defined(CONFIG_VGA_CONSOLE) | 883 | #if defined(CONFIG_VGA_CONSOLE) |