s390/kvm: improve stack frame constants in entry.S
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 20 Mar 2018 12:33:43 +0000 (13:33 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 28 Mar 2018 06:38:29 +0000 (08:38 +0200)
The code in sie64a uses the stack frame passed to the function to store
some temporary data in the empty1 array (see struct stack_frame in
asm/processor.h.

Replace the __SF_EMPTY+x constants with a properly defined offset:
s/__SF_EMPTY/__SF_SIE_CONTROL/, s/__SF_EMPTY+8/__SF_SIE_SAVEAREA/,
s/__SF_EMPTY+16/__SF_SIE_REASON/, s/__SF_EMPTY+24/__SF_SIE_FLAGS/.

Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/entry.S

index 587b195..cfe2c45 100644 (file)
@@ -63,6 +63,7 @@ int main(void)
        OFFSET(__SF_SIE_CONTROL, stack_frame, empty1[0]);
        OFFSET(__SF_SIE_SAVEAREA, stack_frame, empty1[1]);
        OFFSET(__SF_SIE_REASON, stack_frame, empty1[2]);
+       OFFSET(__SF_SIE_FLAGS, stack_frame, empty1[3]);
        BLANK();
        /* timeval/timezone offsets for use by vdso */
        OFFSET(__VDSO_UPD_COUNT, vdso_data, tb_update_count);
index 0aa205e..b52b6ac 100644 (file)
@@ -297,10 +297,10 @@ ENTRY(__switch_to)
 ENTRY(sie64a)
        stmg    %r6,%r14,__SF_GPRS(%r15)        # save kernel registers
        lg      %r12,__LC_CURRENT
-       stg     %r2,__SF_EMPTY(%r15)            # save control block pointer
-       stg     %r3,__SF_EMPTY+8(%r15)          # save guest register save area
-       xc      __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # reason code = 0
-       mvc     __SF_EMPTY+24(8,%r15),__TI_flags(%r12) # copy thread flags
+       stg     %r2,__SF_SIE_CONTROL(%r15)      # save control block pointer
+       stg     %r3,__SF_SIE_SAVEAREA(%r15)     # save guest register save area
+       xc      __SF_SIE_REASON(8,%r15),__SF_SIE_REASON(%r15) # reason code = 0
+       mvc     __SF_SIE_FLAGS(8,%r15),__TI_flags(%r12) # copy thread flags
        TSTMSK  __LC_CPU_FLAGS,_CIF_FPU         # load guest fp/vx registers ?
        jno     .Lsie_load_guest_gprs
        brasl   %r14,load_fpu_regs              # load guest fp/vx regs
@@ -311,18 +311,18 @@ ENTRY(sie64a)
        jz      .Lsie_gmap
        lctlg   %c1,%c1,__GMAP_ASCE(%r14)       # load primary asce
 .Lsie_gmap:
-       lg      %r14,__SF_EMPTY(%r15)           # get control block pointer
+       lg      %r14,__SF_SIE_CONTROL(%r15)     # get control block pointer
        oi      __SIE_PROG0C+3(%r14),1          # we are going into SIE now
        tm      __SIE_PROG20+3(%r14),3          # last exit...
        jnz     .Lsie_skip
        TSTMSK  __LC_CPU_FLAGS,_CIF_FPU
        jo      .Lsie_skip                      # exit if fp/vx regs changed
-       BPEXIT  __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
+       BPEXIT  __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
 .Lsie_entry:
        sie     0(%r14)
 .Lsie_exit:
        BPOFF
-       BPENTER __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
+       BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
 .Lsie_skip:
        ni      __SIE_PROG0C+3(%r14),0xfe       # no longer in SIE
        lctlg   %c1,%c1,__LC_USER_ASCE          # load primary asce
@@ -341,7 +341,7 @@ ENTRY(sie64a)
        nopr    7
        .globl sie_exit
 sie_exit:
-       lg      %r14,__SF_EMPTY+8(%r15)         # load guest register save area
+       lg      %r14,__SF_SIE_SAVEAREA(%r15)    # load guest register save area
        stmg    %r0,%r13,0(%r14)                # save guest gprs 0-13
        xgr     %r0,%r0                         # clear guest registers to
        xgr     %r1,%r1                         # prevent speculative use
@@ -350,11 +350,11 @@ sie_exit:
        xgr     %r4,%r4
        xgr     %r5,%r5
        lmg     %r6,%r14,__SF_GPRS(%r15)        # restore kernel registers
-       lg      %r2,__SF_EMPTY+16(%r15)         # return exit reason code
+       lg      %r2,__SF_SIE_REASON(%r15)       # return exit reason code
        BR_R1USE_R14
 .Lsie_fault:
        lghi    %r14,-EFAULT
-       stg     %r14,__SF_EMPTY+16(%r15)        # set exit reason code
+       stg     %r14,__SF_SIE_REASON(%r15)      # set exit reason code
        j       sie_exit
 
        EX_TABLE(.Lrewind_pad6,.Lsie_fault)
@@ -643,7 +643,7 @@ ENTRY(pgm_check_handler)
        slg     %r14,BASED(.Lsie_critical_start)
        clg     %r14,BASED(.Lsie_critical_length)
        jhe     0f
-       lg      %r14,__SF_EMPTY(%r15)           # get control block pointer
+       lg      %r14,__SF_SIE_CONTROL(%r15)     # get control block pointer
        ni      __SIE_PROG0C+3(%r14),0xfe       # no longer in SIE
        lctlg   %c1,%c1,__LC_USER_ASCE          # load primary asce
        larl    %r9,sie_exit                    # skip forward to sie_exit
@@ -1353,8 +1353,8 @@ cleanup_critical:
        clg     %r9,BASED(.Lsie_crit_mcck_length)
        jh      1f
        oi      __LC_CPU_FLAGS+7, _CIF_MCCK_GUEST
-1:     BPENTER __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
-       lg      %r9,__SF_EMPTY(%r15)            # get control block pointer
+1:     BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
+       lg      %r9,__SF_SIE_CONTROL(%r15)      # get control block pointer
        ni      __SIE_PROG0C+3(%r9),0xfe        # no longer in SIE
        lctlg   %c1,%c1,__LC_USER_ASCE          # load primary asce
        larl    %r9,sie_exit                    # skip forward to sie_exit