OSDN Git Service

s390: use 64-bit lctlg to load task pid to cr4 on context switch
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 3 Apr 2017 11:30:23 +0000 (13:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 5 Apr 2017 05:35:14 +0000 (07:35 +0200)
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>
arch/s390/kernel/entry.S

index fa8b8f2..02f1101 100644 (file)
@@ -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