1313#include <asm/cpufeatures.h>
1414#include <asm/alternative.h>
1515
16- /* "Raw" instruction opcodes */
17- #define __ASM_CLAC ".byte 0x0f,0x01,0xca"
18- #define __ASM_STAC ".byte 0x0f,0x01,0xcb"
19-
2016#ifdef __ASSEMBLY__
2117
2218#define ASM_CLAC \
23- ALTERNATIVE "", __ASM_CLAC , X86_FEATURE_SMAP
19+ ALTERNATIVE "", "clac" , X86_FEATURE_SMAP
2420
2521#define ASM_STAC \
26- ALTERNATIVE "", __ASM_STAC , X86_FEATURE_SMAP
22+ ALTERNATIVE "", "stac" , X86_FEATURE_SMAP
2723
2824#else /* __ASSEMBLY__ */
2925
3026static __always_inline void clac (void )
3127{
3228 /* Note: a barrier is implicit in alternative() */
33- alternative ("" , __ASM_CLAC , X86_FEATURE_SMAP );
29+ alternative ("" , "clac" , X86_FEATURE_SMAP );
3430}
3531
3632static __always_inline void stac (void )
3733{
3834 /* Note: a barrier is implicit in alternative() */
39- alternative ("" , __ASM_STAC , X86_FEATURE_SMAP );
35+ alternative ("" , "stac" , X86_FEATURE_SMAP );
4036}
4137
4238static __always_inline unsigned long smap_save (void )
4339{
4440 unsigned long flags ;
4541
4642 asm volatile ("# smap_save\n\t"
47- ALTERNATIVE ("" , "pushf; pop %0; " __ASM_CLAC "\n\t" ,
43+ ALTERNATIVE (ANNOTATE_IGNORE_ALTERNATIVE
44+ "" , "pushf; pop %0; clac" ,
4845 X86_FEATURE_SMAP )
4946 : "=rm" (flags ) : : "memory" , "cc" );
5047
@@ -54,16 +51,22 @@ static __always_inline unsigned long smap_save(void)
5451static __always_inline void smap_restore (unsigned long flags )
5552{
5653 asm volatile ("# smap_restore\n\t"
57- ALTERNATIVE ("" , "push %0; popf\n\t" ,
54+ ALTERNATIVE (ANNOTATE_IGNORE_ALTERNATIVE
55+ "" , "push %0; popf" ,
5856 X86_FEATURE_SMAP )
5957 : : "g " (flags) : " memory ", " cc ");
6058}
6159
6260/* These macros can be used in asm() statements */
6361#define ASM_CLAC \
64- ALTERNATIVE("", __ASM_CLAC , X86_FEATURE_SMAP)
62+ ALTERNATIVE("", "clac" , X86_FEATURE_SMAP)
6563#define ASM_STAC \
66- ALTERNATIVE("", __ASM_STAC, X86_FEATURE_SMAP)
64+ ALTERNATIVE("", "stac", X86_FEATURE_SMAP)
65+
66+ #define ASM_CLAC_UNSAFE \
67+ ALTERNATIVE("", ANNOTATE_IGNORE_ALTERNATIVE "clac", X86_FEATURE_SMAP)
68+ #define ASM_STAC_UNSAFE \
69+ ALTERNATIVE("", ANNOTATE_IGNORE_ALTERNATIVE "stac", X86_FEATURE_SMAP)
6770
6871#endif /* __ASSEMBLY__ */
6972
0 commit comments