Bug 53631 - nVMX: Support exit/entry MSR load/store
Summary: nVMX: Support exit/entry MSR load/store
Status: RESOLVED CODE_FIX
Alias: None
Product: Virtualization
Classification: Unclassified
Component: kvm (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: virtualization_kvm
URL:
Keywords:
Depends on:
Blocks: 94971 53601
  Show dependency tree
 
Reported: 2013-02-11 14:21 UTC by Nadav Har'El
Modified: 2015-04-08 08:57 UTC (History)
1 user (show)

See Also:
Kernel Version: 3.19
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description Nadav Har'El 2013-02-11 14:21:24 UTC
Currently, nested VMX does not allow L1 to use the MSR load/store feature on entry/exit. The code fails entry (from L1 to L2) if these VMCS features are used:

        if (vmcs12->vm_entry_msr_load_count > 0 ||
            vmcs12->vm_exit_msr_load_count > 0 ||
            vmcs12->vm_exit_msr_store_count > 0) {
                pr_warn_ratelimited("%s: VMCS MSR_{LOAD,STORE} unsupported\n",
                                    __func__);
                nested_vmx_failValid(vcpu, VMXERR_ENTRY_INVALID_CONTROL_FIELD);
                return 1;
        }

This was not a big problem if L1 is also KVM, because KVM didn't use this feature - it only uses it in case of EPT for switching the EFER (see explanation in http://kerneltrap.org/mailarchive/linux-kvm/2010/5/2/6261577), and in that case there is a simpler alternative: supporting VM_ENTRY/EXIT_LOAD_IA32_EFER is enough. So this is what we did in the nested EPT patches proposed in bug 53611.

However, it is likely that for different L1s (or even KVM in the future), we'll need to support the generic MSR load/store feature.
Comment 1 Nadav Har'El 2013-02-26 15:21:19 UTC
To support this feature correctly, I think we can't give the msr array address given by L1 (vmcs12) directly to the processor (vmcs02), but rather we should loop on the entries in the array given by L1, using KVM's writemsr/readmsr.
Comment 2 Paolo Bonzini 2015-04-08 08:57:55 UTC
Fixed by commit ff651cb613b4 (KVM: nVMX: Add nested msr load/restore algorithm, 2014-12-11).

Note You need to log in before you can comment on or make changes to this bug.