aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/traps.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel/traps.c')
-rw-r--r--arch/arm/kernel/traps.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 6e31718f6008..0078aeb85737 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -578,9 +578,16 @@ EXPORT_SYMBOL(abort);
578 578
579void __init trap_init(void) 579void __init trap_init(void)
580{ 580{
581 extern void __trap_init(void); 581 extern char __stubs_start[], __stubs_end[];
582 extern char __vectors_start[], __vectors_end[];
582 583
583 __trap_init(); 584 /*
585 * Copy the vectors and stubs (in entry-armv.S) into the
586 * vector page, mapped at 0xffff0000, and ensure these are
587 * visible to the instruction stream.
588 */
589 memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);
590 memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);
584 flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE); 591 flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);
585 modify_domain(DOMAIN_USER, DOMAIN_CLIENT); 592 modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
586} 593}