⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msr.h

📁 xen 3.2.2 源码
💻 H
字号:
#ifndef __ASM_MSR_H#define __ASM_MSR_H#include "msr-index.h"#ifndef __ASSEMBLY__#include <xen/smp.h>#include <xen/percpu.h>#define rdmsr(msr,val1,val2) \     __asm__ __volatile__("rdmsr" \			  : "=a" (val1), "=d" (val2) \			  : "c" (msr))#define rdmsrl(msr,val) do { unsigned long a__,b__; \       __asm__ __volatile__("rdmsr" \			    : "=a" (a__), "=d" (b__) \			    : "c" (msr)); \       val = a__ | ((u64)b__<<32); \} while(0);#define wrmsr(msr,val1,val2) \     __asm__ __volatile__("wrmsr" \			  : /* no outputs */ \			  : "c" (msr), "a" (val1), "d" (val2))static inline void wrmsrl(unsigned int msr, __u64 val){        __u32 lo, hi;        lo = (__u32)val;        hi = (__u32)(val >> 32);        wrmsr(msr, lo, hi);}/* rdmsr with exception handling */#define rdmsr_safe(msr,val1,val2) ({\    int _rc; \    __asm__ __volatile__( \        "1: rdmsr\n2:\n" \        ".section .fixup,\"ax\"\n" \        "3: movl %5,%2\n; jmp 2b\n" \        ".previous\n" \        ".section __ex_table,\"a\"\n" \        "   "__FIXUP_ALIGN"\n" \        "   "__FIXUP_WORD" 1b,3b\n" \        ".previous\n" \        : "=a" (val1), "=d" (val2), "=&r" (_rc) \        : "c" (msr), "2" (0), "i" (-EFAULT)); \    _rc; })/* wrmsr with exception handling */#define wrmsr_safe(msr,val1,val2) ({\    int _rc; \    __asm__ __volatile__( \        "1: wrmsr\n2:\n" \        ".section .fixup,\"ax\"\n" \        "3: movl %5,%0\n; jmp 2b\n" \        ".previous\n" \        ".section __ex_table,\"a\"\n" \        "   "__FIXUP_ALIGN"\n" \        "   "__FIXUP_WORD" 1b,3b\n" \        ".previous\n" \        : "=&r" (_rc) \        : "c" (msr), "a" (val1), "d" (val2), "0" (0), "i" (-EFAULT)); \    _rc; })#define rdtsc(low,high) \     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))#define rdtscl(low) \     __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")#if defined(__i386__)#define rdtscll(val) \     __asm__ __volatile__("rdtsc" : "=A" (val))#elif defined(__x86_64__)#define rdtscll(val) do { \     unsigned int a,d; \     asm volatile("rdtsc" : "=a" (a), "=d" (d)); \     (val) = ((unsigned long)a) | (((unsigned long)d)<<32); \} while(0)#endif#define write_tsc(val1,val2) wrmsr(0x10, val1, val2)#define rdpmc(counter,low,high) \     __asm__ __volatile__("rdpmc" \			  : "=a" (low), "=d" (high) \			  : "c" (counter))DECLARE_PER_CPU(u64, efer);static inline u64 read_efer(void){    return this_cpu(efer);}static inline void write_efer(u64 val){    this_cpu(efer) = val;    wrmsrl(MSR_EFER, val);}DECLARE_PER_CPU(u32, ler_msr);static inline void ler_enable(void){    u64 debugctl;        if ( !this_cpu(ler_msr) )        return;    rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl);    wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1);}#endif /* !__ASSEMBLY__ */#endif /* __ASM_MSR_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -