Skip to content

Commit 92fa7a1

Browse files
author
Martin Schwidefsky
committed
s390/kvm: improve stack frame constants in entry.S
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 <[email protected]> Signed-off-by: Martin Schwidefsky <[email protected]>
1 parent e5b9819 commit 92fa7a1

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

arch/s390/kernel/asm-offsets.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ int main(void)
6363
OFFSET(__SF_SIE_CONTROL, stack_frame, empty1[0]);
6464
OFFSET(__SF_SIE_SAVEAREA, stack_frame, empty1[1]);
6565
OFFSET(__SF_SIE_REASON, stack_frame, empty1[2]);
66+
OFFSET(__SF_SIE_FLAGS, stack_frame, empty1[3]);
6667
BLANK();
6768
/* timeval/timezone offsets for use by vdso */
6869
OFFSET(__VDSO_UPD_COUNT, vdso_data, tb_update_count);

arch/s390/kernel/entry.S

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,10 @@ ENTRY(__switch_to)
297297
ENTRY(sie64a)
298298
stmg %r6,%r14,__SF_GPRS(%r15) # save kernel registers
299299
lg %r12,__LC_CURRENT
300-
stg %r2,__SF_EMPTY(%r15) # save control block pointer
301-
stg %r3,__SF_EMPTY+8(%r15) # save guest register save area
302-
xc __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # reason code = 0
303-
mvc __SF_EMPTY+24(8,%r15),__TI_flags(%r12) # copy thread flags
300+
stg %r2,__SF_SIE_CONTROL(%r15) # save control block pointer
301+
stg %r3,__SF_SIE_SAVEAREA(%r15) # save guest register save area
302+
xc __SF_SIE_REASON(8,%r15),__SF_SIE_REASON(%r15) # reason code = 0
303+
mvc __SF_SIE_FLAGS(8,%r15),__TI_flags(%r12) # copy thread flags
304304
TSTMSK __LC_CPU_FLAGS,_CIF_FPU # load guest fp/vx registers ?
305305
jno .Lsie_load_guest_gprs
306306
brasl %r14,load_fpu_regs # load guest fp/vx regs
@@ -311,18 +311,18 @@ ENTRY(sie64a)
311311
jz .Lsie_gmap
312312
lctlg %c1,%c1,__GMAP_ASCE(%r14) # load primary asce
313313
.Lsie_gmap:
314-
lg %r14,__SF_EMPTY(%r15) # get control block pointer
314+
lg %r14,__SF_SIE_CONTROL(%r15) # get control block pointer
315315
oi __SIE_PROG0C+3(%r14),1 # we are going into SIE now
316316
tm __SIE_PROG20+3(%r14),3 # last exit...
317317
jnz .Lsie_skip
318318
TSTMSK __LC_CPU_FLAGS,_CIF_FPU
319319
jo .Lsie_skip # exit if fp/vx regs changed
320-
BPEXIT __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
320+
BPEXIT __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
321321
.Lsie_entry:
322322
sie 0(%r14)
323323
.Lsie_exit:
324324
BPOFF
325-
BPENTER __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
325+
BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
326326
.Lsie_skip:
327327
ni __SIE_PROG0C+3(%r14),0xfe # no longer in SIE
328328
lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
@@ -341,7 +341,7 @@ ENTRY(sie64a)
341341
nopr 7
342342
.globl sie_exit
343343
sie_exit:
344-
lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
344+
lg %r14,__SF_SIE_SAVEAREA(%r15) # load guest register save area
345345
stmg %r0,%r13,0(%r14) # save guest gprs 0-13
346346
xgr %r0,%r0 # clear guest registers to
347347
xgr %r1,%r1 # prevent speculative use
@@ -350,11 +350,11 @@ sie_exit:
350350
xgr %r4,%r4
351351
xgr %r5,%r5
352352
lmg %r6,%r14,__SF_GPRS(%r15) # restore kernel registers
353-
lg %r2,__SF_EMPTY+16(%r15) # return exit reason code
353+
lg %r2,__SF_SIE_REASON(%r15) # return exit reason code
354354
BR_R1USE_R14
355355
.Lsie_fault:
356356
lghi %r14,-EFAULT
357-
stg %r14,__SF_EMPTY+16(%r15) # set exit reason code
357+
stg %r14,__SF_SIE_REASON(%r15) # set exit reason code
358358
j sie_exit
359359

360360
EX_TABLE(.Lrewind_pad6,.Lsie_fault)
@@ -643,7 +643,7 @@ ENTRY(pgm_check_handler)
643643
slg %r14,BASED(.Lsie_critical_start)
644644
clg %r14,BASED(.Lsie_critical_length)
645645
jhe 0f
646-
lg %r14,__SF_EMPTY(%r15) # get control block pointer
646+
lg %r14,__SF_SIE_CONTROL(%r15) # get control block pointer
647647
ni __SIE_PROG0C+3(%r14),0xfe # no longer in SIE
648648
lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
649649
larl %r9,sie_exit # skip forward to sie_exit
@@ -1353,8 +1353,8 @@ cleanup_critical:
13531353
clg %r9,BASED(.Lsie_crit_mcck_length)
13541354
jh 1f
13551355
oi __LC_CPU_FLAGS+7, _CIF_MCCK_GUEST
1356-
1: BPENTER __SF_EMPTY+24(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
1357-
lg %r9,__SF_EMPTY(%r15) # get control block pointer
1356+
1: BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
1357+
lg %r9,__SF_SIE_CONTROL(%r15) # get control block pointer
13581358
ni __SIE_PROG0C+3(%r9),0xfe # no longer in SIE
13591359
lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
13601360
larl %r9,sie_exit # skip forward to sie_exit

0 commit comments

Comments
 (0)