Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.0-rc7 46 lines 825 B view raw
1#include <asm/assembler.h> 2 3/* 4 * Interrupt handling. Preserves r7, r8, r9 5 */ 6 .macro arch_irq_handler_default 7 get_irqnr_preamble r5, lr 81: get_irqnr_and_base r0, r6, r5, lr 9 movne r1, sp 10 @ 11 @ routine called with r0 = irq number, r1 = struct pt_regs * 12 @ 13 adrne lr, BSYM(1b) 14 bne asm_do_IRQ 15 16#ifdef CONFIG_SMP 17 /* 18 * XXX 19 * 20 * this macro assumes that irqstat (r6) and base (r5) are 21 * preserved from get_irqnr_and_base above 22 */ 23 ALT_SMP(test_for_ipi r0, r6, r5, lr) 24 ALT_UP_B(9997f) 25 movne r1, sp 26 adrne lr, BSYM(1b) 27 bne do_IPI 28 29#ifdef CONFIG_LOCAL_TIMERS 30 test_for_ltirq r0, r6, r5, lr 31 movne r0, sp 32 adrne lr, BSYM(1b) 33 bne do_local_timer 34#endif 35#endif 369997: 37 .endm 38 39 .macro arch_irq_handler, symbol_name 40 .align 5 41 .global \symbol_name 42\symbol_name: 43 mov r4, lr 44 arch_irq_handler_default 45 mov pc, r4 46 .endm