1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef _ASM_S390_ASCE_H 4 #define _ASM_S390_ASCE_H 5 6 #include <linux/thread_info.h> 7 #include <linux/irqflags.h> 8 #include <asm/lowcore.h> 9 #include <asm/ctlreg.h> 10 11 static inline bool enable_sacf_uaccess(void) 12 { 13 unsigned long flags; 14 15 if (test_thread_flag(TIF_ASCE_PRIMARY)) 16 return true; 17 local_irq_save(flags); 18 local_ctl_load(1, &get_lowcore()->kernel_asce); 19 set_thread_flag(TIF_ASCE_PRIMARY); 20 local_irq_restore(flags); 21 return false; 22 } 23 24 static inline void disable_sacf_uaccess(bool previous) 25 { 26 unsigned long flags; 27 28 if (previous) 29 return; 30 local_irq_save(flags); 31 local_ctl_load(1, &get_lowcore()->user_asce); 32 clear_thread_flag(TIF_ASCE_PRIMARY); 33 local_irq_restore(flags); 34 } 35 36 #endif /* _ASM_S390_ASCE_H */ 37