Rev 6934 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6934 | Rev 7143 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | #define _ASM_X86_SPECIAL_INSNS_H |
2 | #define _ASM_X86_SPECIAL_INSNS_H |
Line 3... | Line 3... | ||
3 | 3 | ||
Line -... | Line 4... | ||
- | 4 | ||
- | 5 | #ifdef __KERNEL__ |
|
4 | 6 | ||
5 | #ifdef __KERNEL__ |
7 | #include |
6 | 8 | ||
7 | static inline void native_clts(void) |
9 | static inline void native_clts(void) |
Line 94... | Line 96... | ||
94 | { |
96 | { |
95 | asm volatile("movq %0,%%cr8" :: "r" (val) : "memory"); |
97 | asm volatile("movq %0,%%cr8" :: "r" (val) : "memory"); |
96 | } |
98 | } |
97 | #endif |
99 | #endif |
Line -... | Line 100... | ||
- | 100 | ||
- | 101 | #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS |
|
- | 102 | static inline u32 __read_pkru(void) |
|
- | 103 | { |
|
- | 104 | u32 ecx = 0; |
|
- | 105 | u32 edx, pkru; |
|
- | 106 | ||
- | 107 | /* |
|
- | 108 | * "rdpkru" instruction. Places PKRU contents in to EAX, |
|
- | 109 | * clears EDX and requires that ecx=0. |
|
- | 110 | */ |
|
- | 111 | asm volatile(".byte 0x0f,0x01,0xee\n\t" |
|
- | 112 | : "=a" (pkru), "=d" (edx) |
|
- | 113 | : "c" (ecx)); |
|
- | 114 | return pkru; |
|
- | 115 | } |
|
- | 116 | ||
- | 117 | static inline void __write_pkru(u32 pkru) |
|
- | 118 | { |
|
- | 119 | u32 ecx = 0, edx = 0; |
|
- | 120 | ||
- | 121 | /* |
|
- | 122 | * "wrpkru" instruction. Loads contents in EAX to PKRU, |
|
- | 123 | * requires that ecx = edx = 0. |
|
- | 124 | */ |
|
- | 125 | asm volatile(".byte 0x0f,0x01,0xef\n\t" |
|
- | 126 | : : "a" (pkru), "c"(ecx), "d"(edx)); |
|
- | 127 | } |
|
- | 128 | #else |
|
- | 129 | static inline u32 __read_pkru(void) |
|
- | 130 | { |
|
- | 131 | return 0; |
|
- | 132 | } |
|
- | 133 | ||
- | 134 | static inline void __write_pkru(u32 pkru) |
|
- | 135 | { |
|
- | 136 | } |
|
- | 137 | #endif |
|
98 | 138 | ||
99 | static inline void native_wbinvd(void) |
139 | static inline void native_wbinvd(void) |
100 | { |
140 | { |
101 | asm volatile("wbinvd": : :"memory"); |
141 | asm volatile("wbinvd": : :"memory"); |