From: Paolo Bonzini <pbonzini@redhat.com>
To: Tang Chen <tangchen@cn.fujitsu.com>,
gleb@kernel.org, mtosatti@redhat.com, nadav.amit@gmail.com,
jan.kiszka@web.de
Cc: kvm@vger.kernel.org, laijs@cn.fujitsu.com,
isimatu.yasuaki@jp.fujitsu.com, guz.fnst@cn.fujitsu.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 7/9] kvm, mem-hotplug: Reload L1's apic access page on migration when L2 is running.
Date: Mon, 22 Sep 2014 11:29:56 +0200 [thread overview]
Message-ID: <541FEC14.8030303@redhat.com> (raw)
In-Reply-To: <1411210071-14727-8-git-send-email-tangchen@cn.fujitsu.com>
Il 20/09/2014 12:47, Tang Chen ha scritto:
> We are handling "L1 and L2 share one apic access page" situation when migrating
> apic access page. We should do some handling when migration happens in the
> following situations:
>
> 1) when L0 is running: Update L1's vmcs in the next L0->L1 entry and L2's
> vmcs in the next L1->L2 entry.
>
> 2) when L1 is running: Force a L1->L0 exit, update L1's vmcs in the next
> L0->L1 entry and L2's vmcs in the next L1->L2 entry.
>
> 3) when L2 is running: Force a L2->L0 exit, update L2's vmcs in the next
> L0->L2 entry and L1's vmcs in the next L2->L1 exit.
>
> This patch handles 3).
>
> In L0->L2 entry, L2's vmcs will be updated in prepare_vmcs02() called by
> nested_vm_run(). So we need to do nothing.
>
> In L2->L1 exit, this patch requests apic access page reload in L2->L1 vmexit.
>
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> ---
> arch/x86/include/asm/kvm_host.h | 1 +
> arch/x86/kvm/vmx.c | 6 ++++++
> arch/x86/kvm/x86.c | 3 ++-
> 3 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 56156eb..1a8317e 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -1047,6 +1047,7 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu);
> int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu);
> int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
> void kvm_vcpu_reset(struct kvm_vcpu *vcpu);
> +void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu);
>
> void kvm_define_shared_msr(unsigned index, u32 msr);
> void kvm_set_shared_msr(unsigned index, u64 val, u64 mask);
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index c8e90ec..baac78a 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -8803,6 +8803,12 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
> }
>
> /*
> + * We are now running in L2, mmu_notifier will force to reload the
> + * page's hpa for L2 vmcs. Need to reload it for L1 before entering L1.
> + */
> + kvm_vcpu_reload_apic_access_page(vcpu);
> +
> + /*
> * Exiting from L2 to L1, we're now back to L1 which thinks it just
> * finished a VMLAUNCH or VMRESUME instruction, so we need to set the
> * success or failure flag accordingly.
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index fc54fa6..2ae2dc7 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -5989,7 +5989,7 @@ static void vcpu_scan_ioapic(struct kvm_vcpu *vcpu)
> kvm_apic_update_tmr(vcpu, tmr);
> }
>
> -static void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
> +void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
> {
> /*
> * Only APIC access page shared by L1 and L2 vm is handled. The APIC
> @@ -6009,6 +6009,7 @@ static void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
> page_to_phys(vcpu->kvm->arch.apic_access_page));
> }
> }
> +EXPORT_SYMBOL_GPL(kvm_vcpu_reload_apic_access_page);
>
> /*
> * Returns 1 to let __vcpu_run() continue the guest execution loop without
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
next prev parent reply other threads:[~2014-09-22 9:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-20 10:47 [PATCH v7 0/9] kvm, mem-hotplug: Do not pin ept identity pagetable and apic access page Tang Chen
2014-09-20 10:47 ` [PATCH v7 1/9] kvm: Use APIC_DEFAULT_PHYS_BASE macro as the apic access page address Tang Chen
2014-09-20 10:47 ` [PATCH v7 2/9] kvm: Remove ept_identity_pagetable from struct kvm_arch Tang Chen
2014-09-20 10:47 ` [PATCH v7 3/9] kvm: Make init_rmode_identity_map() return 0 on success Tang Chen
2014-09-20 10:47 ` [PATCH v7 4/9] kvm: Add interface to check if secondary exec virtualzed apic accesses is enabled Tang Chen
2014-09-22 9:50 ` Paolo Bonzini
2014-09-20 10:47 ` [PATCH v7 5/9] kvm, mem-hotplug: Reload L1's apic access page in vcpu_enter_guest() Tang Chen
2014-09-22 9:33 ` Paolo Bonzini
2014-09-22 9:38 ` Paolo Bonzini
2014-09-20 10:47 ` [PATCH v7 6/9] kvm: Rename make_all_cpus_request() to kvm_make_all_cpus_request() and make it non-static Tang Chen
2014-09-22 9:28 ` Paolo Bonzini
2014-09-20 10:47 ` [PATCH v7 7/9] kvm, mem-hotplug: Reload L1's apic access page on migration when L2 is running Tang Chen
2014-09-22 9:29 ` Paolo Bonzini [this message]
2014-09-20 10:47 ` [PATCH v7 8/9] kvm, mem-hotplug: Add arch specific mmu notifier to handle apic access migration Tang Chen
2014-09-22 9:31 ` Paolo Bonzini
2014-09-24 2:09 ` [PATCH 1/1] " Tang Chen
2014-09-24 7:00 ` Paolo Bonzini
2014-09-24 7:08 ` Jan Kiszka
2014-09-24 7:31 ` Tang Chen
2014-09-20 10:47 ` [PATCH v7 9/9] kvm, mem-hotplug: Unpin and remove kvm_arch->apic_access_page Tang Chen
2014-09-22 9:28 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=541FEC14.8030303@redhat.com \
--to=pbonzini@redhat.com \
--cc=gleb@kernel.org \
--cc=guz.fnst@cn.fujitsu.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=jan.kiszka@web.de \
--cc=kvm@vger.kernel.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=nadav.amit@gmail.com \
--cc=tangchen@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.