| #ifndef _LINUX_KAISER_H | |
| #define _LINUX_KAISER_H | |
| #ifdef CONFIG_PAGE_TABLE_ISOLATION | |
| #include <asm/kaiser.h> | |
| static inline int kaiser_map_thread_stack(void *stack) | |
| { | |
| /* | |
| * Map that page of kernel stack on which we enter from user context. | |
| */ | |
| return kaiser_add_mapping((unsigned long)stack + | |
| THREAD_SIZE - PAGE_SIZE, PAGE_SIZE, __PAGE_KERNEL); | |
| } | |
| static inline void kaiser_unmap_thread_stack(void *stack) | |
| { | |
| /* | |
| * Note: may be called even when kaiser_map_thread_stack() failed. | |
| */ | |
| kaiser_remove_mapping((unsigned long)stack + | |
| THREAD_SIZE - PAGE_SIZE, PAGE_SIZE); | |
| } | |
| #else | |
| /* | |
| * These stubs are used whenever CONFIG_PAGE_TABLE_ISOLATION is off, which | |
| * includes architectures that support KAISER, but have it disabled. | |
| */ | |
| static inline void kaiser_init(void) | |
| { | |
| } | |
| static inline int kaiser_add_mapping(unsigned long addr, | |
| unsigned long size, u64 flags) | |
| { | |
| return 0; | |
| } | |
| static inline void kaiser_remove_mapping(unsigned long start, | |
| unsigned long size) | |
| { | |
| } | |
| static inline int kaiser_map_thread_stack(void *stack) | |
| { | |
| return 0; | |
| } | |
| static inline void kaiser_unmap_thread_stack(void *stack) | |
| { | |
| } | |
| #endif /* !CONFIG_PAGE_TABLE_ISOLATION */ | |
| #endif /* _LINUX_KAISER_H */ |