Subversion Repositories Kolibri OS

Rev

Rev 6934 | 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");