diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-05-09 10:27:36 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-05-16 08:42:38 -0400 |
commit | 6022afc060425864c33f4ab62bbe41d20ac85362 (patch) | |
tree | da532cc7efa5a577d144a1682bb1cc82c3e0ce70 /arch/s390 | |
parent | b603d258a43b4e7339660bdd3b5c25eacd603e54 (diff) |
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>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/entry64.S | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 6b5ea904e997..570c29d9b31b 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -81,16 +81,16 @@ _TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING) | |||
81 | 81 | ||
82 | .macro HANDLE_SIE_INTERCEPT scratch | 82 | .macro HANDLE_SIE_INTERCEPT scratch |
83 | #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) | 83 | #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) |
84 | tm __TI_flags+6(%r12),_TIF_SIE>>8 | 84 | tmhh %r8,0x0001 # interrupting from user ? |
85 | jz .+42 | 85 | jnz .+42 |
86 | tm __LC_MACHINE_FLAGS+6,0x20 # MACHINE_FLAG_SPP | ||
87 | jz .+8 | ||
88 | .insn s,0xb2800000,BASED(.Lhost_id) # set host id | ||
89 | lgr \scratch,%r9 | 86 | lgr \scratch,%r9 |
90 | slg \scratch,BASED(.Lsie_loop) | 87 | slg \scratch,BASED(.Lsie_loop) |
91 | clg \scratch,BASED(.Lsie_length) | 88 | clg \scratch,BASED(.Lsie_length) |
92 | jhe .+10 | 89 | jhe .+22 |
93 | lg %r9,BASED(.Lsie_loop) | 90 | lg %r9,BASED(.Lsie_loop) |
91 | tm __LC_MACHINE_FLAGS+6,0x20 # MACHINE_FLAG_SPP | ||
92 | jz .+8 | ||
93 | .insn s,0xb2800000,BASED(.Lhost_id) # set host id | ||
94 | #endif | 94 | #endif |
95 | .endm | 95 | .endm |
96 | 96 | ||