提交 ac5ffda2 编写于 作者: U Uros Bizjak 提交者: Paolo Bonzini

KVM/x86: Use SVM assembly instruction mnemonics instead of .byte streams

Recently the minimum required version of binutils was changed to 2.20,
which supports all SVM instruction mnemonics. The patch removes
all .byte #defines and uses real instruction mnemonics instead.
Signed-off-by: NUros Bizjak <ubizjak@gmail.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 71883a62
...@@ -290,11 +290,4 @@ struct __attribute__ ((__packed__)) vmcb { ...@@ -290,11 +290,4 @@ struct __attribute__ ((__packed__)) vmcb {
#define SVM_CR0_SELECTIVE_MASK (X86_CR0_TS | X86_CR0_MP) #define SVM_CR0_SELECTIVE_MASK (X86_CR0_TS | X86_CR0_MP)
#define SVM_VMLOAD ".byte 0x0f, 0x01, 0xda"
#define SVM_VMRUN ".byte 0x0f, 0x01, 0xd8"
#define SVM_VMSAVE ".byte 0x0f, 0x01, 0xdb"
#define SVM_CLGI ".byte 0x0f, 0x01, 0xdd"
#define SVM_STGI ".byte 0x0f, 0x01, 0xdc"
#define SVM_INVLPGA ".byte 0x0f, 0x01, 0xdf"
#endif #endif
...@@ -706,17 +706,17 @@ static u32 svm_msrpm_offset(u32 msr) ...@@ -706,17 +706,17 @@ static u32 svm_msrpm_offset(u32 msr)
static inline void clgi(void) static inline void clgi(void)
{ {
asm volatile (__ex(SVM_CLGI)); asm volatile (__ex("clgi"));
} }
static inline void stgi(void) static inline void stgi(void)
{ {
asm volatile (__ex(SVM_STGI)); asm volatile (__ex("stgi"));
} }
static inline void invlpga(unsigned long addr, u32 asid) static inline void invlpga(unsigned long addr, u32 asid)
{ {
asm volatile (__ex(SVM_INVLPGA) : : "a"(addr), "c"(asid)); asm volatile (__ex("invlpga %1, %0") : : "c"(asid), "a"(addr));
} }
static int get_npt_level(struct kvm_vcpu *vcpu) static int get_npt_level(struct kvm_vcpu *vcpu)
...@@ -5652,9 +5652,9 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) ...@@ -5652,9 +5652,9 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
/* Enter guest mode */ /* Enter guest mode */
"push %%" _ASM_AX " \n\t" "push %%" _ASM_AX " \n\t"
"mov %c[vmcb](%[svm]), %%" _ASM_AX " \n\t" "mov %c[vmcb](%[svm]), %%" _ASM_AX " \n\t"
__ex(SVM_VMLOAD) "\n\t" __ex("vmload %%" _ASM_AX) "\n\t"
__ex(SVM_VMRUN) "\n\t" __ex("vmrun %%" _ASM_AX) "\n\t"
__ex(SVM_VMSAVE) "\n\t" __ex("vmsave %%" _ASM_AX) "\n\t"
"pop %%" _ASM_AX " \n\t" "pop %%" _ASM_AX " \n\t"
/* Save guest registers, load host registers */ /* Save guest registers, load host registers */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册