diff mbox

[3/4] kvm: cpuid: fix xsave area size of XSAVEC

Message ID 1417681468-7165-3-git-send-email-wanpeng.li@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wanpeng Li Dec. 4, 2014, 8:24 a.m. UTC
XSAVEC also use the compacted format for the extended region
of the XSAVE area. This patch fix it by caculate the size of 
XSAVEC extended region of XSAVE area as compact format.

Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
---
 arch/x86/kvm/cpuid.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Nadav Amit Dec. 4, 2014, 8:30 a.m. UTC | #1
Wanpeng Li <wanpeng.li@linux.intel.com> wrote:

> XSAVEC also use the compacted format for the extended region
> of the XSAVE area. This patch fix it by caculate the size of 
> XSAVEC extended region of XSAVE area as compact format.
> 
> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
> ---
> arch/x86/kvm/cpuid.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> index 70f0fa1..e16a0c7 100644
> --- a/arch/x86/kvm/cpuid.c
> +++ b/arch/x86/kvm/cpuid.c
> @@ -92,7 +92,7 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
> 	}
> 
> 	best = kvm_find_cpuid_entry(vcpu, 0xD, 1);
> -	if (best && (best->eax & F(XSAVES)))
> +	if (best && (best->eax & (F(XSAVES) || F(XSAVEC))))
Did you want to use | (bitwise or) instead of II (logical or) ?

> 		best->ebx = xstate_required_size(vcpu->arch.xcr0, true);
> 
> 	/*
> -- 
> 1.9.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Nadav
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wanpeng Li Dec. 4, 2014, 8:54 a.m. UTC | #2
Hi Nadav,
On 12/4/14, 4:30 PM, Nadav Amit wrote:
> Wanpeng Li <wanpeng.li@linux.intel.com> wrote:
>
>> XSAVEC also use the compacted format for the extended region
>> of the XSAVE area. This patch fix it by caculate the size of
>> XSAVEC extended region of XSAVE area as compact format.
>>
>> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
>> ---
>> arch/x86/kvm/cpuid.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
>> index 70f0fa1..e16a0c7 100644
>> --- a/arch/x86/kvm/cpuid.c
>> +++ b/arch/x86/kvm/cpuid.c
>> @@ -92,7 +92,7 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
>> 	}
>>
>> 	best = kvm_find_cpuid_entry(vcpu, 0xD, 1);
>> -	if (best && (best->eax & F(XSAVES)))
>> +	if (best && (best->eax & (F(XSAVES) || F(XSAVEC))))
> Did you want to use | (bitwise or) instead of II (logical or) ?

I make a mistake here, I will fix it in next version.

Regards,
Wanpeng Li

>
>> 		best->ebx = xstate_required_size(vcpu->arch.xcr0, true);
>>
>> 	/*
>> -- 
>> 1.9.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe kvm" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Nadav
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paolo Bonzini Dec. 4, 2014, 1:57 p.m. UTC | #3
On 04/12/2014 09:24, Wanpeng Li wrote:
> XSAVEC also use the compacted format for the extended region
> of the XSAVE area. This patch fix it by caculate the size of 
> XSAVEC extended region of XSAVE area as compact format.
> 
> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
> ---
>  arch/x86/kvm/cpuid.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> index 70f0fa1..e16a0c7 100644
> --- a/arch/x86/kvm/cpuid.c
> +++ b/arch/x86/kvm/cpuid.c
> @@ -92,7 +92,7 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
>  	}
>  
>  	best = kvm_find_cpuid_entry(vcpu, 0xD, 1);
> -	if (best && (best->eax & F(XSAVES)))
> +	if (best && (best->eax & (F(XSAVES) || F(XSAVEC))))

"|" instead of "||" as mentioned by Nadav.

Is the Intel manual implicitly relying on the fact that there is no
processor that has XSAVES but not XSAVEC?

Paolo

>  		best->ebx = xstate_required_size(vcpu->arch.xcr0, true);
>  
>  	/*
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 70f0fa1..e16a0c7 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -92,7 +92,7 @@  int kvm_update_cpuid(struct kvm_vcpu *vcpu)
 	}
 
 	best = kvm_find_cpuid_entry(vcpu, 0xD, 1);
-	if (best && (best->eax & F(XSAVES)))
+	if (best && (best->eax & (F(XSAVES) || F(XSAVEC))))
 		best->ebx = xstate_required_size(vcpu->arch.xcr0, true);
 
 	/*