+++ /dev/null
-From 7892a446a898c5917facd424d81daec0869d11ef Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 1 Sep 2020 19:41:37 +0800
-Subject: KVM: Check the allocation of pv cpu mask
-
-From: Haiwei Li <lihaiwei@tencent.com>
-
-[ Upstream commit 0f990222108d214a0924d920e6095b58107d7b59 ]
-
-check the allocation of per-cpu __pv_cpu_mask. Initialize ops only when
-successful.
-
-Signed-off-by: Haiwei Li <lihaiwei@tencent.com>
-Message-Id: <d59f05df-e6d3-3d31-a036-cc25a2b2f33f@gmail.com>
-Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/kernel/kvm.c | 22 +++++++++++++++++++---
- 1 file changed, 19 insertions(+), 3 deletions(-)
-
-diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
-index df63786e7bfa4..d6219f3181d63 100644
---- a/arch/x86/kernel/kvm.c
-+++ b/arch/x86/kernel/kvm.c
-@@ -638,7 +638,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");
- }
-@@ -750,6 +749,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;
-@@ -768,11 +775,20 @@ 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;
-+ }
- }
-
-+ apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself;
-+ pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others;
- return 0;
-+
-+zalloc_cpumask_fail:
-+ kvm_free_pv_cpu_mask();
-+ return -ENOMEM;
- }
- arch_initcall(kvm_alloc_cpumask);
-
---
-2.25.1
-