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 8/9] kvm, mem-hotplug: Add arch specific mmu notifier to handle apic access migration.
Date: Mon, 22 Sep 2014 11:31:37 +0200 [thread overview]
Message-ID: <541FEC79.40209@redhat.com> (raw)
In-Reply-To: <1411210071-14727-9-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 force a L1->L0 exit or L2->L0 exit when shared apic access page is
> migrated using mmu notifier. Since apic access page is only used on intel x86,
> this is arch specific code.
>
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> ---
> arch/x86/kvm/x86.c | 11 +++++++++++
> include/linux/kvm_host.h | 14 +++++++++++++-
> virt/kvm/kvm_main.c | 3 +++
> 3 files changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 2ae2dc7..7dd4179 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -6011,6 +6011,17 @@ void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
> }
> EXPORT_SYMBOL_GPL(kvm_vcpu_reload_apic_access_page);
>
> +void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
> + unsigned long address)
> +{
> + /*
> + * The physical address of apic access page is stored in VMCS.
> + * Update it when it becomes invalid.
> + */
> + if (address == gfn_to_hva(kvm, APIC_DEFAULT_PHYS_BASE >> PAGE_SHIFT))
> + kvm_make_all_cpus_request(kvm, KVM_REQ_APIC_PAGE_RELOAD);
> +}
> +
> /*
> * Returns 1 to let __vcpu_run() continue the guest execution loop without
> * exiting to the userspace. Otherwise, the value will be returned to the
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index 73de13c..b6e4d38 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -917,7 +917,19 @@ static inline int mmu_notifier_retry(struct kvm *kvm, unsigned long mmu_seq)
> return 1;
> return 0;
> }
> -#endif
> +
> +#ifdef _ASM_X86_KVM_HOST_H
> +void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
> + unsigned long address);
> +#else /* _ASM_X86_KVM_HOST_H */
> +inline void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
> + unsigned long address)
This needs to be static.
However, do not add it here. Instead, touch all
arch/*/include/asm/kvm_host.h files, adding either the prototype or the
inline function.
Apart from this, the patch looks good.
Paolo
> +{
> + return;
> +}
> +#endif /* _ASM_X86_KVM_HOST_H */
> +
> +#endif /* CONFIG_MMU_NOTIFIER & KVM_ARCH_WANT_MMU_NOTIFIER */
>
> #ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 0f8b6f6..5427973d 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -295,6 +295,9 @@ static void kvm_mmu_notifier_invalidate_page(struct mmu_notifier *mn,
> kvm_flush_remote_tlbs(kvm);
>
> spin_unlock(&kvm->mmu_lock);
> +
> + kvm_arch_mmu_notifier_invalidate_page(kvm, address);
> +
> srcu_read_unlock(&kvm->srcu, idx);
> }
>
>
next prev parent reply other threads:[~2014-09-22 9:31 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
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 [this message]
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=541FEC79.40209@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.