kvm: vmx: Implement set_apic_access_page_addr
authorTang Chen <tangchen@cn.fujitsu.com>
Wed, 24 Sep 2014 07:57:54 +0000 (15:57 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 24 Sep 2014 12:08:01 +0000 (14:08 +0200)
commit38b9917350cb2946e368ba684cfc33d1672f104e
tree1cdccc2589b2957a32bdd926574071760d22402d
parent4256f43f9fab91e1c17b5846a240cf4b66a768a8
kvm: vmx: Implement set_apic_access_page_addr

Currently, the APIC access page is pinned by KVM for the entire life
of the guest.  We want to make it migratable in order to make memory
hot-unplug available for machines that run KVM.

This patch prepares to handle this for the case where there is no nested
virtualization, or where the nested guest does not have an APIC page of
its own.  All accesses to kvm->arch.apic_access_page are changed to go
through kvm_vcpu_reload_apic_access_page.

If the APIC access page is invalidated when the host is running, we update
the VMCS in the next guest entry.

If it is invalidated when the guest is running, the MMU notifier will force
an exit, after which we will handle everything as in the previous case.

If it is invalidated when a nested guest is running, the request will update
either the VMCS01 or the VMCS02.  Updating the VMCS01 is done at the
next L2->L1 exit, while updating the VMCS02 is done in prepare_vmcs02.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c