Commit 61aaef51 authored by Martin Schwidefsky's avatar Martin Schwidefsky

s390: fix kernel oops for CONFIG_MARCH_Z900=y builds

The LAST_BREAK macro in entry.S uses a different instruction sequence
for CONFIG_MARCH_Z900 builds. The branch target offset to skip the
store of the last breaking event address needs to take the different
length of the code block into account.

Fixes: f8fc82b4 ("s390: move sys_call_table and last_break from thread_info to thread_struct")
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5c5afd02
...@@ -123,10 +123,11 @@ _PIF_WORK = (_PIF_PER_TRAP) ...@@ -123,10 +123,11 @@ _PIF_WORK = (_PIF_PER_TRAP)
.macro LAST_BREAK scratch .macro LAST_BREAK scratch
srag \scratch,%r10,23 srag \scratch,%r10,23
jz .+10
#ifdef CONFIG_HAVE_MARCH_Z990_FEATURES #ifdef CONFIG_HAVE_MARCH_Z990_FEATURES
jz .+10
stg %r10,__TASK_thread+__THREAD_last_break(%r12) stg %r10,__TASK_thread+__THREAD_last_break(%r12)
#else #else
jz .+14
lghi \scratch,__TASK_thread lghi \scratch,__TASK_thread
stg %r10,__THREAD_last_break(\scratch,%r12) stg %r10,__THREAD_last_break(\scratch,%r12)
#endif #endif
......
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