xref: /linux/arch/s390/include/asm/skey.h (revision bc46b7cbc58c4cb562b6a45a1fbc7b8e7b23df58)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_SKEY_H
3 #define __ASM_SKEY_H
4 
5 #include <asm/rwonce.h>
6 
7 struct skey_region {
8 	unsigned long start;
9 	unsigned long end;
10 };
11 
12 #define SKEY_REGION(_start, _end)			\
13 	stringify_in_c(.section .skey_region,"a";)	\
14 	stringify_in_c(.balign 8;)			\
15 	stringify_in_c(.quad (_start);)			\
16 	stringify_in_c(.quad (_end);)			\
17 	stringify_in_c(.previous)
18 
19 extern int skey_regions_initialized;
20 extern struct skey_region __skey_region_start[];
21 extern struct skey_region __skey_region_end[];
22 
23 void __skey_regions_initialize(void);
24 
skey_regions_initialize(void)25 static inline void skey_regions_initialize(void)
26 {
27 	if (READ_ONCE(skey_regions_initialized))
28 		return;
29 	__skey_regions_initialize();
30 }
31 
32 #endif /* __ASM_SKEY_H */
33