diff options
Diffstat (limited to 'arch/arm/kernel/entry-armv.S')
| -rw-r--r-- | arch/arm/kernel/entry-armv.S | 52 | 
1 files changed, 19 insertions, 33 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index bb96a7d4bbf..27f64489c1c 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -25,42 +25,22 @@  #include <asm/tls.h>  #include "entry-header.S" +#include <asm/entry-macro-multi.S>  /*   * Interrupt handling.  Preserves r7, r8, r9   */  	.macro	irq_handler -	get_irqnr_preamble r5, lr -1:	get_irqnr_and_base r0, r6, r5, lr -	movne	r1, sp -	@ -	@ routine called with r0 = irq number, r1 = struct pt_regs * -	@ -	adrne	lr, BSYM(1b) -	bne	asm_do_IRQ - -#ifdef CONFIG_SMP -	/* -	 * XXX -	 * -	 * this macro assumes that irqstat (r6) and base (r5) are -	 * preserved from get_irqnr_and_base above -	 */ -	ALT_SMP(test_for_ipi r0, r6, r5, lr) -	ALT_UP_B(9997f) -	movne	r0, sp -	adrne	lr, BSYM(1b) -	bne	do_IPI - -#ifdef CONFIG_LOCAL_TIMERS -	test_for_ltirq r0, r6, r5, lr -	movne	r0, sp -	adrne	lr, BSYM(1b) -	bne	do_local_timer +#ifdef CONFIG_MULTI_IRQ_HANDLER +	ldr	r5, =handle_arch_irq +	mov	r0, sp +	ldr	r5, [r5] +	adr	lr, BSYM(9997f) +	teq	r5, #0 +	movne	pc, r5  #endif +	arch_irq_handler_default  9997: -#endif -  	.endm  #ifdef CONFIG_KPROBES @@ -735,7 +715,7 @@ ENTRY(__switch_to)   THUMB(	stmia	ip!, {r4 - sl, fp}	   )	@ Store most regs on stack   THUMB(	str	sp, [ip], #4		   )   THUMB(	str	lr, [ip], #4		   ) -#ifdef CONFIG_MMU +#ifdef CONFIG_CPU_USE_DOMAINS  	ldr	r6, [r2, #TI_CPU_DOMAIN]  #endif  	set_tls	r3, r4, r5 @@ -744,7 +724,7 @@ ENTRY(__switch_to)  	ldr	r8, =__stack_chk_guard  	ldr	r7, [r7, #TSK_STACK_CANARY]  #endif -#ifdef CONFIG_MMU +#ifdef CONFIG_CPU_USE_DOMAINS  	mcr	p15, 0, r6, c3, c0, 0		@ Set domain register  #endif  	mov	r5, r0 @@ -842,7 +822,7 @@ __kuser_helper_start:   */  __kuser_memory_barrier:				@ 0xffff0fa0 -	smp_dmb +	smp_dmb	arm  	usr_ret	lr  	.align	5 @@ -959,7 +939,7 @@ kuser_cmpxchg_fixup:  #else -	smp_dmb +	smp_dmb	arm  1:	ldrex	r3, [r2]  	subs	r3, r3, r0  	strexeq	r3, r1, [r2] @@ -1245,3 +1225,9 @@ cr_alignment:  	.space	4  cr_no_alignment:  	.space	4 + +#ifdef CONFIG_MULTI_IRQ_HANDLER +	.globl	handle_arch_irq +handle_arch_irq: +	.space	4 +#endif  |