Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: 6538/1: Subarch IRQ handler macros V3

Per subarch interrupt handler macros V3.

This patch breaks out code from the irq_handler macro
into arch_irq_handler and arch_irq_handler_default.

The macros are put in the header file "entry-macro-multi.S"

The arch_irq_handler_default macro is designed to be
used by irq_handler in entry-armv.S while arch_irq_handler
is suitable for per-subarch use.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Magnus Damm and committed by
Russell King
cd544ce7 52108641

+46 -29
+44
arch/arm/include/asm/entry-macro-multi.S
··· 1 + /* 2 + * Interrupt handling. Preserves r7, r8, r9 3 + */ 4 + .macro arch_irq_handler_default 5 + get_irqnr_preamble r5, lr 6 + 1: get_irqnr_and_base r0, r6, r5, lr 7 + movne r1, sp 8 + @ 9 + @ routine called with r0 = irq number, r1 = struct pt_regs * 10 + @ 11 + adrne lr, BSYM(1b) 12 + bne asm_do_IRQ 13 + 14 + #ifdef CONFIG_SMP 15 + /* 16 + * XXX 17 + * 18 + * this macro assumes that irqstat (r6) and base (r5) are 19 + * preserved from get_irqnr_and_base above 20 + */ 21 + ALT_SMP(test_for_ipi r0, r6, r5, lr) 22 + ALT_UP_B(9997f) 23 + movne r0, sp 24 + adrne lr, BSYM(1b) 25 + bne do_IPI 26 + 27 + #ifdef CONFIG_LOCAL_TIMERS 28 + test_for_ltirq r0, r6, r5, lr 29 + movne r0, sp 30 + adrne lr, BSYM(1b) 31 + bne do_local_timer 32 + #endif 33 + #endif 34 + 9997: 35 + .endm 36 + 37 + .macro arch_irq_handler, symbol_name 38 + .align 5 39 + .global \symbol_name 40 + \symbol_name: 41 + mov r4, lr 42 + arch_irq_handler_default 43 + mov pc, r4 44 + .endm
+2 -29
arch/arm/kernel/entry-armv.S
··· 25 25 #include <asm/tls.h> 26 26 27 27 #include "entry-header.S" 28 + #include <asm/entry-macro-multi.S> 28 29 29 30 /* 30 31 * Interrupt handling. Preserves r7, r8, r9 ··· 39 38 teq r5, #0 40 39 movne pc, r5 41 40 #endif 42 - get_irqnr_preamble r5, lr 43 - 1: get_irqnr_and_base r0, r6, r5, lr 44 - movne r1, sp 45 - @ 46 - @ routine called with r0 = irq number, r1 = struct pt_regs * 47 - @ 48 - adrne lr, BSYM(1b) 49 - bne asm_do_IRQ 50 - 51 - #ifdef CONFIG_SMP 52 - /* 53 - * XXX 54 - * 55 - * this macro assumes that irqstat (r6) and base (r5) are 56 - * preserved from get_irqnr_and_base above 57 - */ 58 - ALT_SMP(test_for_ipi r0, r6, r5, lr) 59 - ALT_UP_B(9997f) 60 - movne r0, sp 61 - adrne lr, BSYM(1b) 62 - bne do_IPI 63 - 64 - #ifdef CONFIG_LOCAL_TIMERS 65 - test_for_ltirq r0, r6, r5, lr 66 - movne r0, sp 67 - adrne lr, BSYM(1b) 68 - bne do_local_timer 69 - #endif 70 - #endif 41 + arch_irq_handler_default 71 42 9997: 72 43 .endm 73 44