1 /* SPDX-License-Identifier: GPL-2.0+ */
2 #include <linux/linkage.h>
3 #include <asm/stackframe.h>
7 .macro save_all_base_regs
38 csrrd t0, LOONGARCH_CSR_CRMD
39 andi t0, t0, 0x7 /* extract bit[1:0] PLV, bit[2] IE */
40 LONG_S t0, sp, PT_CRMD
43 .macro restore_all_base_regs
73 LONG_L t0, sp, PT_CRMD
74 li.d t1, 0x7 /* mask bit[1:0] PLV, bit[2] IE */
75 csrxchg t0, t1, LOONGARCH_CSR_CRMD
78 SYM_CODE_START(arch_rethook_trampoline)
79 addi.d sp, sp, -PT_SIZE
82 addi.d t0, sp, PT_SIZE
85 move a0, sp /* pt_regs */
87 bl arch_rethook_trampoline_callback
89 /* use the result as the return-address */
93 addi.d sp, sp, PT_SIZE
96 SYM_CODE_END(arch_rethook_trampoline)