aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/kernel/traps.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-26 08:58:22 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-26 08:58:22 -0700
commit1e14c33fe2e3409d9f34041859af52be6e4723af (patch)
treea9df9616c5341cfeab791cc38e0ec47b99e36855 /arch/arm/kernel/traps.c
parent766f2fa170e65948053b06c6106c8dc8526c3e14 (diff)
parentbce495d865829d7a1d8102a834d3e3af32616567 (diff)
Automatic merge of kernel.org:/home/rmk/linux-2.6-rmk.git
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 6e31718f600..0078aeb8573 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -578,9 +578,16 @@ EXPORT_SYMBOL(abort);
void __init trap_init(void)
{
- extern void __trap_init(void);
+ extern char __stubs_start[], __stubs_end[];
+ extern char __vectors_start[], __vectors_end[];
- __trap_init();
+ /*
+ * Copy the vectors and stubs (in entry-armv.S) into the
+ * vector page, mapped at 0xffff0000, and ensure these are
+ * visible to the instruction stream.
+ */
+ memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);
+ memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);
flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
}