Re: [PATCH] KVM/x86: Use 32bit xor to clear registers in svm.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 17/10/2018 16:46, Uros Bizjak wrote:
> x86_64 zero-extends 32bit xor operation to a full 64bit register.
> 
> Also add a comment and remove unnecessary instruction suffix in vmx.c
> 
> Signed-off-by: Uros Bizjak <ubizjak@xxxxxxxxx>
> ---
>  arch/x86/kvm/svm.c | 28 +++++++++++++---------------
>  arch/x86/kvm/vmx.c |  6 +++++-
>  2 files changed, 18 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index 1086bebaeea3..f416f5c7f2ae 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -5637,26 +5637,24 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
>  		"mov %%r13, %c[r13](%[svm]) \n\t"
>  		"mov %%r14, %c[r14](%[svm]) \n\t"
>  		"mov %%r15, %c[r15](%[svm]) \n\t"
> -#endif
>  		/*
>  		* Clear host registers marked as clobbered to prevent
>  		* speculative use.
>  		*/
> -		"xor %%" _ASM_BX ", %%" _ASM_BX " \n\t"
> -		"xor %%" _ASM_CX ", %%" _ASM_CX " \n\t"
> -		"xor %%" _ASM_DX ", %%" _ASM_DX " \n\t"
> -		"xor %%" _ASM_SI ", %%" _ASM_SI " \n\t"
> -		"xor %%" _ASM_DI ", %%" _ASM_DI " \n\t"
> -#ifdef CONFIG_X86_64
> -		"xor %%r8, %%r8 \n\t"
> -		"xor %%r9, %%r9 \n\t"
> -		"xor %%r10, %%r10 \n\t"
> -		"xor %%r11, %%r11 \n\t"
> -		"xor %%r12, %%r12 \n\t"
> -		"xor %%r13, %%r13 \n\t"
> -		"xor %%r14, %%r14 \n\t"
> -		"xor %%r15, %%r15 \n\t"
> +		"xor %%r8d, %%r8d \n\t"
> +		"xor %%r9d, %%r9d \n\t"
> +		"xor %%r10d, %%r10d \n\t"
> +		"xor %%r11d, %%r11d \n\t"
> +		"xor %%r12d, %%r12d \n\t"
> +		"xor %%r13d, %%r13d \n\t"
> +		"xor %%r14d, %%r14d \n\t"
> +		"xor %%r15d, %%r15d \n\t"
>  #endif
> +		"xor %%ebx, %%ebx \n\t"
> +		"xor %%ecx, %%ecx \n\t"
> +		"xor %%edx, %%edx \n\t"
> +		"xor %%esi, %%esi \n\t"
> +		"xor %%edi, %%edi \n\t"
>  		"pop %%" _ASM_BP
>  		:
>  		: [svm]"a"(svm),
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 91f4f5288150..3677609145a4 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -62,7 +62,7 @@
>  
>  #define __ex(x) __kvm_handle_fault_on_reboot(x)
>  #define __ex_clear(x, reg) \
> -	____kvm_handle_fault_on_reboot(x, "xorl " reg " , " reg)
> +	____kvm_handle_fault_on_reboot(x, "xor " reg ", " reg)
>  
>  MODULE_AUTHOR("Qumranet");
>  MODULE_LICENSE("GPL");
> @@ -11285,6 +11285,10 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
>  		"mov %%r13, %c[r13](%0) \n\t"
>  		"mov %%r14, %c[r14](%0) \n\t"
>  		"mov %%r15, %c[r15](%0) \n\t"
> +		/*
> +		* Clear host registers marked as clobbered to prevent
> +		* speculative use.
> +		*/
>  		"xor %%r8d,  %%r8d \n\t"
>  		"xor %%r9d,  %%r9d \n\t"
>  		"xor %%r10d, %%r10d \n\t"
> 

Queued, thanks.

Paolo



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux