summaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry.S
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2016-11-25 09:53:42 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-11-25 10:07:55 +0100
commit61aaef51cc98314b4c9a87f0b27c0493ce111867 (patch)
tree17674d7d8060ed8f9d7024946f465384be16cfc1 /arch/s390/kernel/entry.S
parents390/pci: use unique UIDs for domain enumeration (diff)
downloadlinux-61aaef51cc98314b4c9a87f0b27c0493ce111867.tar.xz
linux-61aaef51cc98314b4c9a87f0b27c0493ce111867.zip
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>
Diffstat (limited to 'arch/s390/kernel/entry.S')
-rw-r--r--arch/s390/kernel/entry.S3
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