Message ID | 20181126160008.20666-1-ubizjak@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM/x86: Use SVM assembly instruction mnemonics instead of .byte streams | expand |
On 26/11/18 17:00, Uros Bizjak wrote: > 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: Uros Bizjak <ubizjak@gmail.com> > --- > arch/x86/include/asm/svm.h | 7 ------- > arch/x86/kvm/svm.c | 12 ++++++------ > 2 files changed, 6 insertions(+), 13 deletions(-) > > diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h > index 93b462e48067..dec9c1e84c78 100644 > --- a/arch/x86/include/asm/svm.h > +++ b/arch/x86/include/asm/svm.h > @@ -290,11 +290,4 @@ struct __attribute__ ((__packed__)) vmcb { > > #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 > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > index 0d1a74069a9e..33ff4da0457c 100644 > --- a/arch/x86/kvm/svm.c > +++ b/arch/x86/kvm/svm.c > @@ -711,17 +711,17 @@ static u32 svm_msrpm_offset(u32 msr) > > static inline void clgi(void) > { > - asm volatile (__ex(SVM_CLGI)); > + asm volatile (__ex("clgi")); > } > > static inline void stgi(void) > { > - asm volatile (__ex(SVM_STGI)); > + asm volatile (__ex("stgi")); > } > > 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) > @@ -5625,9 +5625,9 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) > /* Enter guest mode */ > "push %%" _ASM_AX " \n\t" > "mov %c[vmcb](%[svm]), %%" _ASM_AX " \n\t" > - __ex(SVM_VMLOAD) "\n\t" > - __ex(SVM_VMRUN) "\n\t" > - __ex(SVM_VMSAVE) "\n\t" > + __ex("vmload %%" _ASM_AX) "\n\t" > + __ex("vmrun %%" _ASM_AX) "\n\t" > + __ex("vmsave %%" _ASM_AX) "\n\t" > "pop %%" _ASM_AX " \n\t" > > /* Save guest registers, load host registers */ > Queued, thanks. Paolo
diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index 93b462e48067..dec9c1e84c78 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -290,11 +290,4 @@ struct __attribute__ ((__packed__)) vmcb { #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 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 0d1a74069a9e..33ff4da0457c 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -711,17 +711,17 @@ static u32 svm_msrpm_offset(u32 msr) static inline void clgi(void) { - asm volatile (__ex(SVM_CLGI)); + asm volatile (__ex("clgi")); } static inline void stgi(void) { - asm volatile (__ex(SVM_STGI)); + asm volatile (__ex("stgi")); } 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) @@ -5625,9 +5625,9 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) /* Enter guest mode */ "push %%" _ASM_AX " \n\t" "mov %c[vmcb](%[svm]), %%" _ASM_AX " \n\t" - __ex(SVM_VMLOAD) "\n\t" - __ex(SVM_VMRUN) "\n\t" - __ex(SVM_VMSAVE) "\n\t" + __ex("vmload %%" _ASM_AX) "\n\t" + __ex("vmrun %%" _ASM_AX) "\n\t" + __ex("vmsave %%" _ASM_AX) "\n\t" "pop %%" _ASM_AX " \n\t" /* Save guest registers, load host registers */
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: Uros Bizjak <ubizjak@gmail.com> --- arch/x86/include/asm/svm.h | 7 ------- arch/x86/kvm/svm.c | 12 ++++++------ 2 files changed, 6 insertions(+), 13 deletions(-)