s390: make sie intercept independent of thread_info
HANDLE_SIE_INTERCEPT is called early, use supervisor state and instruction address to decide if the reset of the PSW to sie_loop is required. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -81,16 +81,16 @@ _TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING)
|
|||||||
|
|
||||||
.macro HANDLE_SIE_INTERCEPT scratch
|
.macro HANDLE_SIE_INTERCEPT scratch
|
||||||
#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
|
#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
|
||||||
tm __TI_flags+6(%r12),_TIF_SIE>>8
|
tmhh %r8,0x0001 # interrupting from user ?
|
||||||
jz .+42
|
jnz .+42
|
||||||
tm __LC_MACHINE_FLAGS+6,0x20 # MACHINE_FLAG_SPP
|
|
||||||
jz .+8
|
|
||||||
.insn s,0xb2800000,BASED(.Lhost_id) # set host id
|
|
||||||
lgr \scratch,%r9
|
lgr \scratch,%r9
|
||||||
slg \scratch,BASED(.Lsie_loop)
|
slg \scratch,BASED(.Lsie_loop)
|
||||||
clg \scratch,BASED(.Lsie_length)
|
clg \scratch,BASED(.Lsie_length)
|
||||||
jhe .+10
|
jhe .+22
|
||||||
lg %r9,BASED(.Lsie_loop)
|
lg %r9,BASED(.Lsie_loop)
|
||||||
|
tm __LC_MACHINE_FLAGS+6,0x20 # MACHINE_FLAG_SPP
|
||||||
|
jz .+8
|
||||||
|
.insn s,0xb2800000,BASED(.Lhost_id) # set host id
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user