#ifndef _MSR_H #define _MSR_H #include #define MSR_IA32APICBASE 0x1B #define MSR_PERF_FIXED_CTR2 0x30b #define MSR_PERF_FIXED_CTR_CTRL 0x38d #define MSR_PERF_GLOBAL_STATUS 0x38e #define MSR_PERF_GLOBAL_CTRL 0x38f #define MSR_PERF_GLOBAL_OVF_CTRL 0x390 #define MSR_EFER 0xC0000080 #define MSR_STAR 0xC0000081 #define MSR_LSTAR 0xC0000082 #define MSR_CSTAR 0xC0000083 #define MSR_FMASK 0xC0000084 #define MSR_FSBASE 0xC0000100 #define MSR_GSBASE 0xC0000101 #define MSR_KERNELGSBASE 0xC0000102 #define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01 static inline uint64_t rdmsr(uint32_t which) { uint64_t low,high; asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(which)); return (high << 32) | low; } static inline void wrmsr(uint32_t which, uint64_t value) { uint32_t low = value & 0xFFFFFFFF; uint32_t high = (value >> 32) & 0xFFFFFFFF; asm volatile("wrmsr" : : "a"(low), "d"(high), "c"(which)); } #endif