summaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry.S
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2017-04-03 13:30:23 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2017-04-05 07:35:14 +0200
commitcab36c262ef9a5ddf3c7ae0f8031b191338b3142 (patch)
tree35160f929d3067f977ec2f7bc700a019792b23d5 /arch/s390/kernel/entry.S
parent6fb81d69d0bb455e6dbb5bd99529e2dea74b93e7 (diff)
downloadlinux-0-day-cab36c262ef9a5ddf3c7ae0f8031b191338b3142.tar.gz
linux-0-day-cab36c262ef9a5ddf3c7ae0f8031b191338b3142.tar.xz
s390: use 64-bit lctlg to load task pid to cr4 on context switch
The 32-bit lctl instruction is quite a bit slower than the 64-bit counter part lctlg. Use the faster instruction. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/entry.S')
-rw-r--r--arch/s390/kernel/entry.S4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index fa8b8f28e08b5..02f11018e2df1 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -190,7 +190,9 @@ ENTRY(__switch_to)
stg %r15,__LC_KERNEL_STACK # store end of kernel stack
lg %r15,__THREAD_ksp(%r1) # load kernel stack of next
/* c4 is used in guest detection: arch/s390/kernel/perf_cpum_sf.c */
- lctl %c4,%c4,__TASK_pid(%r3) # load pid to control reg. 4
+ xc __SF_EMPTY(8,%r15),__SF_EMPTY(%r15)
+ mvc __SF_EMPTY+4(4,%r15),__TASK_pid(%r3)
+ lctlg %c4,%c4,__SF_EMPTY(%r15) # load pid to control reg. 4
mvc __LC_CURRENT_PID(4,%r0),__TASK_pid(%r3) # store pid of next
lmg %r6,%r15,__SF_GPRS(%r15) # load gprs of next task
TSTMSK __LC_MACHINE_FLAGS,MACHINE_FLAG_LPP