Subversion Repositories Kolibri OS

Rev

Rev 7143 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7143 Rev 9951
Line 91... Line 91...
91
}
91
}
Line 92... Line 92...
92
 
92
 
93
static inline unsigned long long native_read_msr_safe(unsigned int msr,
93
static inline unsigned long long native_read_msr_safe(unsigned int msr,
94
						      int *err)
94
						      int *err)
95
{
-
 
96
	DECLARE_ARGS(val, low, high);
-
 
97
 
95
{
98
	asm volatile("2: rdmsr ; xor %[err],%[err]\n"
96
#warning "FIXME: native_read_msr_safe always return err = 0!"
99
		     "1:\n\t"
-
 
100
		     ".section .fixup,\"ax\"\n\t"
-
 
101
		     "3:  mov %[fault],%[err] ; jmp 1b\n\t"
-
 
102
		     ".previous\n\t"
-
 
103
		     _ASM_EXTABLE(2b, 3b)
-
 
104
		     : [err] "=r" (*err), EAX_EDX_RET(val, low, high)
-
 
105
		     : "c" (msr), [fault] "i" (-EIO));
-
 
106
	if (msr_tracepoint_active(__tracepoint_read_msr))
-
 
107
		do_trace_read_msr(msr, EAX_EDX_VAL(val, low, high), *err);
97
	*err = 0;
108
	return EAX_EDX_VAL(val, low, high);
98
	return native_read_msr(msr);
Line 109... Line 99...
109
}
99
}
110
 
100
 
111
static inline void native_write_msr(unsigned int msr,
101
static inline void native_write_msr(unsigned int msr,
Line 118... Line 108...
118
 
108
 
119
/* Can be uninlined because referenced by paravirt */
109
/* Can be uninlined because referenced by paravirt */
120
notrace static inline int native_write_msr_safe(unsigned int msr,
110
notrace static inline int native_write_msr_safe(unsigned int msr,
121
					unsigned low, unsigned high)
111
					unsigned low, unsigned high)
122
{
-
 
123
	int err;
-
 
124
	asm volatile("2: wrmsr ; xor %[err],%[err]\n"
-
 
125
		     "1:\n\t"
-
 
126
		     ".section .fixup,\"ax\"\n\t"
-
 
127
		     "3:  mov %[fault],%[err] ; jmp 1b\n\t"
-
 
128
		     ".previous\n\t"
-
 
129
		     _ASM_EXTABLE(2b, 3b)
-
 
130
		     : [err] "=a" (err)
-
 
131
		     : "c" (msr), "0" (low), "d" (high),
-
 
132
		       [fault] "i" (-EIO)
-
 
133
		     : "memory");
112
{
134
	if (msr_tracepoint_active(__tracepoint_write_msr))
113
#warning "FIXME: native_write_msr_safe always return 0!"
135
		do_trace_write_msr(msr, ((u64)high << 32 | low), err);
114
	native_write_msr(msr, low, high);
136
	return err;
115
	return 0;
Line 137... Line 116...
137
}
116
}
138
 
117