@@ -40,8 +40,11 @@ _LPP_OFFSET = __LC_LPP
4040 ALTERNATIVE "nop" , ".insn s,0xb2000000,\address" , ALT_FACILITY(193 )
4141 .endm
4242
43- .macro LPSWEY address,lpswe
44- ALTERNATIVE "b \lpswe; nopr" , ".insn siy,0xeb0000000071,\address,0" , ALT_FACILITY(193 )
43+ .macro LPSWEY address, lpswe
44+ ALTERNATIVE_2 "b \lpswe;nopr" , \
45+ ".insn siy,0xeb0000000071,\address,0" , ALT_FACILITY_EARLY(193 ), \
46+ __stringify(.insn siy,0xeb0000000071 ,LOWCORE_ALT_ADDRESS+\address,0 ), \
47+ ALT_LOWCORE
4548 .endm
4649
4750 .macro MBEAR reg, lowcore
@@ -317,39 +320,40 @@ SYM_CODE_END(ret_from_fork)
317320 */
318321
319322SYM_CODE_START(pgm_check_handler)
320- stpt __LC_SYS_ENTER_TIMER
323+ STMG_LC %r8 ,%r15 ,__LC_SAVE_AREA_SYNC
324+ GET_LC %r13
325+ stpt __LC_SYS_ENTER_TIMER(%r13 )
321326 BPOFF
322- stmg %r8 ,%r15 ,__LC_SAVE_AREA_SYNC
323327 lgr %r10 ,%r15
324- lmg %r8 ,%r9 ,__LC_PGM_OLD_PSW
328+ lmg %r8 ,%r9 ,__LC_PGM_OLD_PSW( %r13 )
325329 tmhh %r8 ,0x0001 # coming from user space?
326330 jno .Lpgm_skip_asce
327- lctlg %c1,%c1,__LC_KERNEL_ASCE
331+ lctlg %c1,%c1,__LC_KERNEL_ASCE( %r13 )
328332 j 3f # -> fault in user space
329333.Lpgm_skip_asce:
3303341: tmhh %r8 ,0x4000 # PER bit set in old PSW ?
331335 jnz 2f # -> enabled, can't be a double fault
332- tm __LC_PGM_ILC+3 ,0x80 # check for per exception
336+ tm __LC_PGM_ILC+3 ( %r13 ) ,0x80 # check for per exception
333337 jnz .Lpgm_svcper # -> single stepped svc
334- 2: CHECK_STACK __LC_SAVE_AREA_SYNC,%r0
338+ 2: CHECK_STACK __LC_SAVE_AREA_SYNC,%r13
335339 aghi %r15 ,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
336340 # CHECK_VMAP_STACK branches to stack_overflow or 4f
337- CHECK_VMAP_STACK __LC_SAVE_AREA_SYNC,%r0 ,4f
338- 3: lg %r15 ,__LC_KERNEL_STACK
341+ CHECK_VMAP_STACK __LC_SAVE_AREA_SYNC,%r13 ,4f
342+ 3: lg %r15 ,__LC_KERNEL_STACK( %r13 )
3393434: la %r11 ,STACK_FRAME_OVERHEAD(%r15 )
340344 xc __PT_FLAGS(8 ,%r11 ),__PT_FLAGS(%r11 )
341345 xc __SF_BACKCHAIN(8 ,%r15 ),__SF_BACKCHAIN(%r15 )
342346 stmg %r0,%r7,__PT_R0(%r11 )
343- mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_SYNC
344- mvc __PT_LAST_BREAK(8 ,%r11 ),__LC_PGM_LAST_BREAK
347+ mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_SYNC( %r13 )
348+ mvc __PT_LAST_BREAK(8 ,%r11 ),__LC_PGM_LAST_BREAK( %r13 )
345349 stctg %c1,%c1,__PT_CR1(%r11 )
346350#if IS_ENABLED(CONFIG_KVM)
347- ltg %r12 ,__LC_GMAP
351+ ltg %r12 ,__LC_GMAP( %r13 )
348352 jz 5f
349353 clc __GMAP_ASCE(8 ,%r12 ), __PT_CR1(%r11 )
350354 jne 5f
351355 BPENTER __SF_SIE_FLAGS(%r10 ),_TIF_ISOLATE_BP_GUEST
352- SIEEXIT __SF_SIE_CONTROL(%r10 ),%r0
356+ SIEEXIT __SF_SIE_CONTROL(%r10 ),%r13
353357#endif
3543585: stmg %r8 ,%r9 ,__PT_PSW(%r11 )
355359 # clear user controlled registers to prevent speculative use
@@ -365,11 +369,11 @@ SYM_CODE_START(pgm_check_handler)
365369 tmhh %r8 ,0x0001 # returning to user space?
366370 jno .Lpgm_exit_kernel
367371 STACKLEAK_ERASE
368- lctlg %c1,%c1,__LC_USER_ASCE
372+ lctlg %c1,%c1,__LC_USER_ASCE( %r13 )
369373 BPON
370- stpt __LC_EXIT_TIMER
374+ stpt __LC_EXIT_TIMER( %r13 )
371375.Lpgm_exit_kernel:
372- mvc __LC_RETURN_PSW(16 ),STACK_FRAME_OVERHEAD+__PT_PSW(%r15 )
376+ mvc __LC_RETURN_PSW(16 , %r13 ),STACK_FRAME_OVERHEAD+__PT_PSW(%r15 )
373377 LBEAR STACK_FRAME_OVERHEAD+__PT_LAST_BREAK(%r15 )
374378 lmg %r0,%r15 ,STACK_FRAME_OVERHEAD+__PT_R0(%r15 )
375379 LPSWEY __LC_RETURN_PSW,__LC_RETURN_LPSWE
@@ -378,11 +382,11 @@ SYM_CODE_START(pgm_check_handler)
378382# single stepped system call
379383#
380384.Lpgm_svcper:
381- mvc __LC_RETURN_PSW(8 ),__LC_SVC_NEW_PSW
385+ mvc __LC_RETURN_PSW(8 , %r13 ),__LC_SVC_NEW_PSW( %r13 )
382386 larl %r14 ,.Lsysc_per
383- stg %r14 ,__LC_RETURN_PSW+8
387+ stg %r14 ,__LC_RETURN_PSW+8 ( %r13 )
384388 lghi %r14 ,1
385- LBEAR __LC_PGM_LAST_BREAK
389+ LBEAR __LC_PGM_LAST_BREAK( %r13 )
386390 LPSWEY __LC_RETURN_PSW,__LC_RETURN_LPSWE # branch to .Lsysc_per
387391SYM_CODE_END(pgm_check_handler)
388392
@@ -596,7 +600,8 @@ SYM_CODE_END(restart_int_handler)
596600 * Setup a pt_regs so that show_trace can provide a good call trace.
597601 */
598602SYM_CODE_START(stack_overflow)
599- lg %r15 ,__LC_NODAT_STACK # change to panic stack
603+ GET_LC %r15
604+ lg %r15 ,__LC_NODAT_STACK(%r15 ) # change to panic stack
600605 la %r11 ,STACK_FRAME_OVERHEAD(%r15 )
601606 stmg %r0,%r7,__PT_R0(%r11 )
602607 stmg %r8 ,%r9 ,__PT_PSW(%r11 )
0 commit comments