OSDN Git Service

s390/entry: rework entering DAT-on mode on CPU restart
authorAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 18 Apr 2023 15:40:37 +0000 (17:40 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 3 Jul 2023 09:19:40 +0000 (11:19 +0200)
Instead of enforcing PSW_MASK_DAT bit on previously stored
in lowcore restart_psw.mask use the PSW_KERNEL_BITS mask
(which contains PSW_MASK_DAT) directly.

As result, the PSW mask stored in lowcore is only used to
enter the CPU restart routine, while PSW_KERNEL_BITS is
used to enter the kernel code - similarily to commit
64ea2977add2 ("s390/mm: start kernel with DAT enabled").

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/kernel/entry.S

index bdefd96..0351530 100644 (file)
@@ -598,8 +598,9 @@ SYM_CODE_START(restart_int_handler)
        TSTMSK  __LC_RESTART_FLAGS,RESTART_FLAG_CTLREGS,4
        jz      0f
        lctlg   %c0,%c15,__LC_CREGS_SAVE_AREA
-0:     larl    %r15,stosm_tmp
-       stosm   0(%r15),0x04                    # turn dat on, keep irqs off
+0:     larl    %r15,daton_psw
+       lpswe   0(%r15)                         # turn dat on, keep irqs off
+.Ldaton:
        lg      %r15,__LC_RESTART_STACK
        xc      STACK_FRAME_OVERHEAD(__PT_SIZE,%r15),STACK_FRAME_OVERHEAD(%r15)
        stmg    %r0,%r14,STACK_FRAME_OVERHEAD+__PT_R0(%r15)
@@ -646,7 +647,11 @@ SYM_CODE_END(stack_overflow)
        .balign 4
 SYM_DATA_LOCAL(stop_lock,      .long 0)
 SYM_DATA_LOCAL(this_cpu,       .short 0)
-SYM_DATA_LOCAL(stosm_tmp,      .byte 0)
+       .balign 8
+SYM_DATA_START_LOCAL(daton_psw)
+       .quad   PSW_KERNEL_BITS
+       .quad   .Ldaton
+SYM_DATA_END(daton_psw)
 
        .section .rodata, "a"
 #define SYSCALL(esame,emu)     .quad __s390x_ ## esame