Merge tag 'enforcement-4.14-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / arm / include / asm / entry-macro-multi.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <asm/assembler.h>
3
4 /*
5  * Interrupt handling.  Preserves r7, r8, r9
6  */
7         .macro  arch_irq_handler_default
8         get_irqnr_preamble r6, lr
9 1:      get_irqnr_and_base r0, r2, r6, lr
10         movne   r1, sp
11         @
12         @ routine called with r0 = irq number, r1 = struct pt_regs *
13         @
14         badrne  lr, 1b
15         bne     asm_do_IRQ
16
17 #ifdef CONFIG_SMP
18         /*
19          * XXX
20          *
21          * this macro assumes that irqstat (r2) and base (r6) are
22          * preserved from get_irqnr_and_base above
23          */
24         ALT_SMP(test_for_ipi r0, r2, r6, lr)
25         ALT_UP_B(9997f)
26         movne   r1, sp
27         badrne  lr, 1b
28         bne     do_IPI
29 #endif
30 9997:
31         .endm
32
33         .macro  arch_irq_handler, symbol_name
34         .align  5
35         .global \symbol_name
36 \symbol_name:
37         mov     r8, lr
38         arch_irq_handler_default
39         ret     r8
40         .endm