diff options
| -rw-r--r-- | include/asm-i386/msr.h | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/include/asm-i386/msr.h b/include/asm-i386/msr.h index c70773e2ff94..df21ea049369 100644 --- a/include/asm-i386/msr.h +++ b/include/asm-i386/msr.h | |||
| @@ -86,55 +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 rdtscl(low) \ | 120 | #define rdtscl(low) \ |
| 125 | do { \ | 121 | ((low) = (u32)native_read_tsc()) |
| 126 | (low) = native_read_tsc(); \ | ||
| 127 | } while(0) | ||
| 128 | 122 | ||
| 129 | #define rdtscll(val) ((val) = native_read_tsc()) | 123 | #define rdtscll(val) \ |
| 124 | ((val) = native_read_tsc()) | ||
| 130 | 125 | ||
| 131 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) | 126 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) |
| 132 | 127 | ||
| 133 | #define rdpmc(counter,low,high) \ | 128 | #define rdpmc(counter,low,high) \ |
| 134 | do { \ | 129 | do { \ |
| 135 | u64 _l = native_read_pmc(); \ | 130 | u64 _l = native_read_pmc(); \ |
| 136 | low = (u32)_l; \ | 131 | (low) = (u32)_l; \ |
| 137 | high = _l >> 32; \ | 132 | (high) = (u32)(_l >> 32); \ |
| 138 | } while(0) | 133 | } while(0) |
| 139 | #endif /* !CONFIG_PARAVIRT */ | 134 | #endif /* !CONFIG_PARAVIRT */ |
| 140 | 135 | ||
