^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * arch/s390/kernel/base.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright IBM Corp. 2006, 2007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Michael Holzheu <holzheu@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <asm/asm-offsets.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/nospec-insn.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/ptrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/sigp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) GEN_BR_THUNK %r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) GEN_BR_THUNK %r14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ENTRY(s390_base_ext_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) stmg %r0,%r15,__LC_SAVE_AREA_ASYNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) basr %r13,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 0: aghi %r15,-STACK_FRAME_OVERHEAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) larl %r1,s390_base_ext_handler_fn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) lg %r9,0(%r1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) ltgr %r9,%r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) jz 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) BASR_EX %r14,%r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 1: lmg %r0,%r15,__LC_SAVE_AREA_ASYNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) ni __LC_EXT_OLD_PSW+1,0xfd # clear wait state bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) lpswe __LC_EXT_OLD_PSW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) ENDPROC(s390_base_ext_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .section .bss
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) .align 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) .globl s390_base_ext_handler_fn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) s390_base_ext_handler_fn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .quad 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .previous
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ENTRY(s390_base_pgm_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) stmg %r0,%r15,__LC_SAVE_AREA_SYNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) basr %r13,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 0: aghi %r15,-STACK_FRAME_OVERHEAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) larl %r1,s390_base_pgm_handler_fn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) lg %r9,0(%r1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) ltgr %r9,%r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) jz 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) BASR_EX %r14,%r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) lmg %r0,%r15,__LC_SAVE_AREA_SYNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) lpswe __LC_PGM_OLD_PSW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 1: lpswe disabled_wait_psw-0b(%r13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ENDPROC(s390_base_pgm_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) .align 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) disabled_wait_psw:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .section .bss
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .align 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .globl s390_base_pgm_handler_fn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) s390_base_pgm_handler_fn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) .quad 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .previous