2019-02-07 10:44:36

by Vitaly Kuznetsov

[permalink] [raw]
Subject: [PATCH] x86/kvm/nVMX: read from MSR_IA32_VMX_PROCBASED_CTLS2 only when it is available

SDM says MSR_IA32_VMX_PROCBASED_CTLS2 is only available "If
(CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63])". It was found that
some old cpus (namely "Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz (family: 0x6,
model: 0xf, stepping: 0x6") don't have it. Add the missing check.

Reported-by: Zdenek Kaspar <[email protected]>
Tested-by: Zdenek Kaspar <[email protected]>
Signed-off-by: Vitaly Kuznetsov <[email protected]>
---
arch/x86/kvm/vmx/nested.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
index 653830d0f3da..4bd0902bfd8c 100644
--- a/arch/x86/kvm/vmx/nested.c
+++ b/arch/x86/kvm/vmx/nested.c
@@ -5557,9 +5557,11 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps,
* secondary cpu-based controls. Do not include those that
* depend on CPUID bits, they are added later by vmx_cpuid_update.
*/
- rdmsr(MSR_IA32_VMX_PROCBASED_CTLS2,
- msrs->secondary_ctls_low,
- msrs->secondary_ctls_high);
+ if (msrs->procbased_ctls_high & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
+ rdmsr(MSR_IA32_VMX_PROCBASED_CTLS2,
+ msrs->secondary_ctls_low,
+ msrs->secondary_ctls_high);
+
msrs->secondary_ctls_low = 0;
msrs->secondary_ctls_high &=
SECONDARY_EXEC_DESC |
--
2.20.1



2019-02-07 21:18:28

by Jim Mattson

[permalink] [raw]
Subject: Re: [PATCH] x86/kvm/nVMX: read from MSR_IA32_VMX_PROCBASED_CTLS2 only when it is available

On Thu, Feb 7, 2019 at 2:42 AM Vitaly Kuznetsov <[email protected]> wrote:
>
> SDM says MSR_IA32_VMX_PROCBASED_CTLS2 is only available "If
> (CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63])". It was found that
> some old cpus (namely "Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz (family: 0x6,
> model: 0xf, stepping: 0x6") don't have it. Add the missing check.
>
> Reported-by: Zdenek Kaspar <[email protected]>
> Tested-by: Zdenek Kaspar <[email protected]>
> Signed-off-by: Vitaly Kuznetsov <[email protected]>
Reviewed-by: Jim Mattson <[email protected]>

2019-02-12 14:17:18

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH] x86/kvm/nVMX: read from MSR_IA32_VMX_PROCBASED_CTLS2 only when it is available

On 07/02/19 22:17, Jim Mattson wrote:
>> SDM says MSR_IA32_VMX_PROCBASED_CTLS2 is only available "If
>> (CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63])". It was found that
>> some old cpus (namely "Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz (family: 0x6,
>> model: 0xf, stepping: 0x6") don't have it. Add the missing check.
>>
>> Reported-by: Zdenek Kaspar <[email protected]>
>> Tested-by: Zdenek Kaspar <[email protected]>
>> Signed-off-by: Vitaly Kuznetsov <[email protected]>
>
> Reviewed-by: Jim Mattson <[email protected]>

Queued, thanks.

Paolo

2019-02-12 18:01:50

by Jim Mattson

[permalink] [raw]
Subject: Re: [PATCH] x86/kvm/nVMX: read from MSR_IA32_VMX_PROCBASED_CTLS2 only when it is available

On Tue, Feb 12, 2019 at 6:16 AM Paolo Bonzini <[email protected]> wrote:
>
> On 07/02/19 22:17, Jim Mattson wrote:
> >> SDM says MSR_IA32_VMX_PROCBASED_CTLS2 is only available "If
> >> (CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63])". It was found that
> >> some old cpus (namely "Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz (family: 0x6,
> >> model: 0xf, stepping: 0x6") don't have it. Add the missing check.
> >>
> >> Reported-by: Zdenek Kaspar <[email protected]>
> >> Tested-by: Zdenek Kaspar <[email protected]>
> >> Signed-off-by: Vitaly Kuznetsov <[email protected]>
> >
> > Reviewed-by: Jim Mattson <[email protected]>
>
> Queued, thanks.
>
> Paolo

Alternatively, rdmsr could be changed to rdmsr_safe.