| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright IBM Corp. 1999, 2024 |
| */ |
| |
| #ifndef __ASM_S390_ACCESS_REGS_H |
| #define __ASM_S390_ACCESS_REGS_H |
| |
| #include <linux/instrumented.h> |
| #include <asm/sigcontext.h> |
| |
| struct access_regs { |
| unsigned int regs[NUM_ACRS]; |
| }; |
| |
| static inline void save_access_regs(unsigned int *acrs) |
| { |
| struct access_regs *regs = (struct access_regs *)acrs; |
| |
| instrument_write(regs, sizeof(*regs)); |
| asm volatile("stamy 0,15,%[regs]" |
| : [regs] "=QS" (*regs) |
| : |
| : "memory"); |
| } |
| |
| static inline void restore_access_regs(unsigned int *acrs) |
| { |
| struct access_regs *regs = (struct access_regs *)acrs; |
| |
| instrument_read(regs, sizeof(*regs)); |
| asm volatile("lamy 0,15,%[regs]" |
| : |
| : [regs] "QS" (*regs) |
| : "memory"); |
| } |
| |
| #endif /* __ASM_S390_ACCESS_REGS_H */ |