diff options
Diffstat (limited to 'include/asm-i386/msr.h')
-rw-r--r-- | include/asm-i386/msr.h | 56 |
1 files changed, 22 insertions, 34 deletions
diff --git a/include/asm-i386/msr.h b/include/asm-i386/msr.h index 26861df52cc4..df21ea049369 100644 --- a/include/asm-i386/msr.h +++ b/include/asm-i386/msr.h | |||
@@ -86,62 +86,50 @@ static inline unsigned long long native_read_pmc(void) | |||
86 | 86 | ||
87 | #define rdmsr(msr,val1,val2) \ | 87 | #define rdmsr(msr,val1,val2) \ |
88 | do { \ | 88 | do { \ |
89 | unsigned long long __val = native_read_msr(msr); \ | 89 | u64 __val = native_read_msr(msr); \ |
90 | val1 = __val; \ | 90 | (val1) = (u32)__val; \ |
91 | val2 = __val >> 32; \ | 91 | (val2) = (u32)(__val >> 32); \ |
92 | } while(0) | 92 | } while(0) |
93 | 93 | ||
94 | #define wrmsr(msr,val1,val2) \ | 94 | static inline void wrmsr(u32 __msr, u32 __low, u32 __high) |
95 | native_write_msr(msr, ((unsigned long long)val2 << 32) | val1) | ||
96 | |||
97 | #define rdmsrl(msr,val) \ | ||
98 | do { \ | ||
99 | (val) = native_read_msr(msr); \ | ||
100 | } while(0) | ||
101 | |||
102 | static inline void wrmsrl (unsigned long msr, unsigned long long val) | ||
103 | { | 95 | { |
104 | unsigned long lo, hi; | 96 | native_write_msr(__msr, ((u64)__high << 32) | __low); |
105 | lo = (unsigned long) val; | ||
106 | hi = val >> 32; | ||
107 | wrmsr (msr, lo, hi); | ||
108 | } | 97 | } |
109 | 98 | ||
99 | #define rdmsrl(msr,val) \ | ||
100 | ((val) = native_read_msr(msr)) | ||
101 | |||
102 | #define wrmsrl(msr,val) native_write_msr(msr, val) | ||
103 | |||
110 | /* wrmsr with exception handling */ | 104 | /* wrmsr with exception handling */ |
111 | #define wrmsr_safe(msr,val1,val2) \ | 105 | static inline int wrmsr_safe(u32 __msr, u32 __low, u32 __high) |
112 | (native_write_msr_safe(msr, ((unsigned long long)val2 << 32) | val1)) | 106 | { |
107 | return native_write_msr_safe(__msr, ((u64)__high << 32) | __low); | ||
108 | } | ||
113 | 109 | ||
114 | /* rdmsr with exception handling */ | 110 | /* rdmsr with exception handling */ |
115 | #define rdmsr_safe(msr,p1,p2) \ | 111 | #define rdmsr_safe(msr,p1,p2) \ |
116 | ({ \ | 112 | ({ \ |
117 | int __err; \ | 113 | int __err; \ |
118 | unsigned long long __val = native_read_msr_safe(msr, &__err);\ | 114 | u64 __val = native_read_msr_safe(msr, &__err); \ |
119 | (*p1) = __val; \ | 115 | (*p1) = (u32)__val; \ |
120 | (*p2) = __val >> 32; \ | 116 | (*p2) = (u32)(__val >> 32); \ |
121 | __err; \ | 117 | __err; \ |
122 | }) | 118 | }) |
123 | 119 | ||
124 | #define rdtsc(low,high) \ | ||
125 | do { \ | ||
126 | u64 _l = native_read_tsc(); \ | ||
127 | (low) = (u32)_l; \ | ||
128 | (high) = _l >> 32; \ | ||
129 | } while(0) | ||
130 | |||
131 | #define rdtscl(low) \ | 120 | #define rdtscl(low) \ |
132 | do { \ | 121 | ((low) = (u32)native_read_tsc()) |
133 | (low) = native_read_tsc(); \ | ||
134 | } while(0) | ||
135 | 122 | ||
136 | #define rdtscll(val) ((val) = native_read_tsc()) | 123 | #define rdtscll(val) \ |
124 | ((val) = native_read_tsc()) | ||
137 | 125 | ||
138 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) | 126 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) |
139 | 127 | ||
140 | #define rdpmc(counter,low,high) \ | 128 | #define rdpmc(counter,low,high) \ |
141 | do { \ | 129 | do { \ |
142 | u64 _l = native_read_pmc(); \ | 130 | u64 _l = native_read_pmc(); \ |
143 | low = (u32)_l; \ | 131 | (low) = (u32)_l; \ |
144 | high = _l >> 32; \ | 132 | (high) = (u32)(_l >> 32); \ |
145 | } while(0) | 133 | } while(0) |
146 | #endif /* !CONFIG_PARAVIRT */ | 134 | #endif /* !CONFIG_PARAVIRT */ |
147 | 135 | ||