s390: make sie intercept independent of thread_info
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 9 May 2012 14:27:36 +0000 (16:27 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 16 May 2012 12:42:38 +0000 (14:42 +0200)
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>
arch/s390/kernel/entry64.S

index 6b5ea904e99703d59db7afcec8e2c9e4391f34e3..570c29d9b31b6b6324d943a39729c13dccefdb8b 100644 (file)
@@ -81,16 +81,16 @@ _TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING)
 
        .macro  HANDLE_SIE_INTERCEPT scratch
 #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
-       tm      __TI_flags+6(%r12),_TIF_SIE>>8
-       jz      .+42
-       tm      __LC_MACHINE_FLAGS+6,0x20       # MACHINE_FLAG_SPP
-       jz      .+8
-       .insn   s,0xb2800000,BASED(.Lhost_id)   # set host id
+       tmhh    %r8,0x0001              # interrupting from user ?
+       jnz     .+42
        lgr     \scratch,%r9
        slg     \scratch,BASED(.Lsie_loop)
        clg     \scratch,BASED(.Lsie_length)
-       jhe     .+10
+       jhe     .+22
        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
        .endm