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) |
