From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Haiwei Li <lihaiwei.kernel@gmail.com>
Cc: "pbonzini\@redhat.com" <pbonzini@redhat.com>,
Sean Christopherson <sean.j.christopherson@intel.com>,
"wanpengli\@tencent.com" <wanpengli@tencent.com>,
"jmattson\@google.com" <jmattson@google.com>,
"joro\@8bytes.org" <joro@8bytes.org>,
tglx@linutronix.de, mingo@redhat.com,
"bp\@alien8.de" <bp@alien8.de>, "hpa\@zytor.com" <hpa@zytor.com>,
"linux-kernel\@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"kvm\@vger.kernel.org" <kvm@vger.kernel.org>,
"x86\@kernel.org" <x86@kernel.org>
Subject: Re: [PATCH v2] KVM: Check the allocation of pv cpu mask
Date: Thu, 03 Sep 2020 12:39:52 +0200 [thread overview]
Message-ID: <87y2lrnnyf.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <654d8c60-49f0-e398-be25-24aed352360d@gmail.com>
Haiwei Li <lihaiwei.kernel@gmail.com> writes:
> From: Haiwei Li <lihaiwei@tencent.com>
>
> check the allocation of per-cpu __pv_cpu_mask. Initialize ops only when
> successful.
>
> Signed-off-by: Haiwei Li <lihaiwei@tencent.com>
> ---
> arch/x86/kernel/kvm.c | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index 08320b0b2b27..d3c062e551d7 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -555,7 +555,6 @@ static void kvm_send_ipi_mask_allbutself(const
> struct cpumask *mask, int vector)
> static void kvm_setup_pv_ipi(void)
> {
> apic->send_IPI_mask = kvm_send_ipi_mask;
> - apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself;
> pr_info("setup PV IPIs\n");
> }
>
> @@ -654,7 +653,6 @@ static void __init kvm_guest_init(void)
> }
>
> if (pv_tlb_flush_supported()) {
> - pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others;
> pv_ops.mmu.tlb_remove_table = tlb_remove_table;
> pr_info("KVM setup pv remote TLB flush\n");
> }
> @@ -767,6 +765,14 @@ static __init int activate_jump_labels(void)
> }
> arch_initcall(activate_jump_labels);
>
> +static void kvm_free_pv_cpu_mask(void)
> +{
> + unsigned int cpu;
> +
> + for_each_possible_cpu(cpu)
> + free_cpumask_var(per_cpu(__pv_cpu_mask, cpu));
> +}
> +
> static __init int kvm_alloc_cpumask(void)
> {
> int cpu;
> @@ -785,11 +791,21 @@ static __init int kvm_alloc_cpumask(void)
>
> if (alloc)
> for_each_possible_cpu(cpu) {
> - zalloc_cpumask_var_node(per_cpu_ptr(&__pv_cpu_mask, cpu),
> - GFP_KERNEL, cpu_to_node(cpu));
> + if (!zalloc_cpumask_var_node(
> + per_cpu_ptr(&__pv_cpu_mask, cpu),
> + GFP_KERNEL, cpu_to_node(cpu)))
> + goto zalloc_cpumask_fail;
> }
>
> +#if defined(CONFIG_SMP)
> + apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself;
> +#endif
> + pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others;
This is too late I'm afraid. If I'm not mistaken PV patching happens
earlier, so .init.guest_late_init (kvm_guest_init()) is good and
arch_initcall() is bad.
Have you checked that with this patch kvm_flush_tlb_others() is still
being called?
Actually, there is no need to assign kvm_flush_tlb_others() so late. We
can always check if __pv_cpu_mask was allocated and revert back to the
architectural path if not.
> return 0;
> +
> +zalloc_cpumask_fail:
> + kvm_free_pv_cpu_mask();
> + return -ENOMEM;
> }
> arch_initcall(kvm_alloc_cpumask);
>
> --
> 2.18.4
>
--
Vitaly
next prev parent reply other threads:[~2020-09-03 10:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-03 1:59 [PATCH v2] KVM: Check the allocation of pv cpu mask Haiwei Li
2020-09-03 10:39 ` Vitaly Kuznetsov [this message]
2020-09-04 1:01 ` Haiwei Li
2020-09-04 9:53 ` Vitaly Kuznetsov
2020-09-04 12:21 ` Haiwei Li
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=87y2lrnnyf.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=bp@alien8.de \
--cc=hpa@zytor.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=lihaiwei.kernel@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=sean.j.christopherson@intel.com \
--cc=tglx@linutronix.de \
--cc=wanpengli@tencent.com \
--cc=x86@kernel.org \
/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.