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)25static 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