aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry64.S
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2012-05-09 10:27:36 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2012-05-16 08:42:38 -0400
commit6022afc060425864c33f4ab62bbe41d20ac85362 (patch)
treeda532cc7efa5a577d144a1682bb1cc82c3e0ce70 /arch/s390/kernel/entry64.S
parentb603d258a43b4e7339660bdd3b5c25eacd603e54 (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/kernel/entry64.S')
-rw-r--r--arch/s390/kernel/entry64.S12
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