Commit af4cb25d authored by Russell King's avatar Russell King

ARM: uaccess: fix undefined instruction on ARMv7M/noMMU

The use of get_domain() in copy_thread() results in an oops on
ARMv7M/noMMU systems.  The thread cpu_domain value is only used when
CONFIG_CPU_USE_DOMAINS is enabled, so there's no need to save the
value in copy_thread() except when this is enabled, and this option
will never be enabled on these platforms.

Unhandled exception: IPSR = 00000006 LR = fffffff1
CPU: 0 PID: 0 Comm: swapper Not tainted 4.2.0-next-20150909-00001-gb8ec5ad #41
Hardware name: NXP LPC18xx/43xx (Device Tree)
task: 2823fbe0 ti: 2823c000 task.ti: 2823c000
PC is at copy_thread+0x18/0x92
LR is at copy_thread+0x19/0x92
pc : [<2800a46e>]    lr : [<2800a46f>]    psr: 4100000b
sp : 2823df00  ip : 00000000  fp : 287c81c0
r10: 00000000  r9 : 00800300  r8 : 287c8000
r7 : 287c8000  r6 : 2818908d  r5 : 00000000  r4 : 287ca000
r3 : 00000000  r2 : 00000000  r1 : fffffff0  r0 : 287ca048
xPSR: 4100000b
Reported-by: default avatarAriel D'Alessandro <ariel@vanguardiasur.com.ar>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 296254f3
...@@ -233,6 +233,7 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, ...@@ -233,6 +233,7 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start,
memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save)); memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));
#ifdef CONFIG_CPU_USE_DOMAINS
/* /*
* Copy the initial value of the domain access control register * Copy the initial value of the domain access control register
* from the current thread: thread->addr_limit will have been * from the current thread: thread->addr_limit will have been
...@@ -240,6 +241,7 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, ...@@ -240,6 +241,7 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start,
* kernel/fork.c * kernel/fork.c
*/ */
thread->cpu_domain = get_domain(); thread->cpu_domain = get_domain();
#endif
if (likely(!(p->flags & PF_KTHREAD))) { if (likely(!(p->flags & PF_KTHREAD))) {
*childregs = *current_pt_regs(); *childregs = *current_pt_regs();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment