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 |