KVM: VMX: Keep list of loaded VMCSs, instead of vcpus
authorNadav Har'El <nyh@math.technion.ac.il>
Tue, 24 May 2011 12:26:10 +0000 (15:26 +0300)
committerAvi Kivity <avi@redhat.com>
Tue, 12 Jul 2011 08:45:08 +0000 (11:45 +0300)
commitd462b8192368f10e979250377930f9695a4039d0
tree4ea7e4c8cf963742cfab9a0400f1b4d671684b67
parent24c82e576b7860a4f02a21103e9df39e11e97006
KVM: VMX: Keep list of loaded VMCSs, instead of vcpus

In VMX, before we bring down a CPU we must VMCLEAR all VMCSs loaded on it
because (at least in theory) the processor might not have written all of its
content back to memory. Since a patch from June 26, 2008, this is done using
a per-cpu "vcpus_on_cpu" linked list of vcpus loaded on each CPU.

The problem is that with nested VMX, we no longer have the concept of a
vcpu being loaded on a cpu: A vcpu has multiple VMCSs (one for L1, a pool for
L2s), and each of those may be have been last loaded on a different cpu.

So instead of linking the vcpus, we link the VMCSs, using a new structure
loaded_vmcs. This structure contains the VMCS, and the information pertaining
to its loading on a specific cpu (namely, the cpu number, and whether it
was already launched on this cpu once). In nested we will also use the same
structure to hold L2 VMCSs, and vmx->loaded_vmcs is a pointer to the
currently active VMCS.

Signed-off-by: Nadav Har'El <nyh@il.ibm.com>
Acked-by: Acked-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/vmx.c