On Tue, Jul 15, 2014 at 03:10:15PM +0200, Jan Kiszka wrote: > On 2014-07-15 14:40, Gleb Natapov wrote: > >> > >> ...... > >> 7922 if (!vmx->nested.apic_access_page) > >> 7923 exec_control &= > >> 7924 ~SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; > >> 7925 else > >> 7926 vmcs_write64(APIC_ACCESS_ADDR, > >> 7927 page_to_phys(vmx->nested.apic_access_page)); > >> 7928 } else if > >> (vm_need_virtualize_apic_accesses(vmx->vcpu.kvm)) { > >> 7929 exec_control |= > >> 7930 SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; > >> 7931 vmcs_write64(APIC_ACCESS_ADDR, > >> 7932 page_to_phys(vcpu->kvm->arch.apic_access_page)); > >> 7933 } > >> > >> And yes, we have the problem you said here. We can migrate the page while L2 > >> vm is running. > >> So I think we should enforce L2 vm to exit to L1. Right ? > >> > > We can request APIC_ACCESS_ADDR reload during L2->L1 vmexit emulation, so > > if APIC_ACCESS_ADDR changes while L2 is running it will be reloaded for L1 too. > > How should this host-managed VMCS field possibly change while L2 is running? > That what "Do not pin apic access page in memory" patch is doing. It changes APIC_ACCESS_ADDR of a current vmcs. It kicks vcpu out of a guest mode of course, but vcpu may still be in L2 at this point, so only L2 vmcs will get new APIC_ACCESS_ADDR pointer, L1 vmcs will still have an old one. -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html