diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-11-25 09:53:42 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-11-25 10:07:55 +0100 |
commit | 61aaef51cc98314b4c9a87f0b27c0493ce111867 (patch) | |
tree | 17674d7d8060ed8f9d7024946f465384be16cfc1 | |
parent | 5c5afd0201221be578ec200dfedfa04acda529c1 (diff) |
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: f8fc82b47149e344 ("s390: move sys_call_table and last_break from thread_info to thread_struct")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/kernel/entry.S | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 9e0291ad11a7..161f4e66f67d 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -123,10 +123,11 @@ _PIF_WORK = (_PIF_PER_TRAP) .macro LAST_BREAK scratch srag \scratch,%r10,23 - jz .+10 #ifdef CONFIG_HAVE_MARCH_Z990_FEATURES + jz .+10 stg %r10,__TASK_thread+__THREAD_last_break(%r12) #else + jz .+14 lghi \scratch,__TASK_thread stg %r10,__THREAD_last_break(\scratch,%r12) #endif |