* [PATCH 0/2] Fix the allocation of pv cpu mask @ 2020-09-14 9:11 lihaiwei.kernel 2020-09-14 9:11 ` [PATCH 1/2] KVM: Fix the build error lihaiwei.kernel 2020-09-14 9:11 ` [PATCH 2/2] KVM: Check if __pv_cpu_mask was allocated instead of assigning ops too late lihaiwei.kernel 0 siblings, 2 replies; 6+ messages in thread From: lihaiwei.kernel @ 2020-09-14 9:11 UTC (permalink / raw) To: linux-kernel, kvm, x86 Cc: pbonzini, sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei From: Haiwei Li <lihaiwei@tencent.com> Hi, There is a old version patch of 'KVM: Check the allocation of pv cpu mask' in upstream. The v2 and what is discussed is in url: https://lore.kernel.org/kvm/87o8mlooki.fsf@vitty.brq.redhat.com/ In this patch, i fix the build error and make changes as suggested. Haiwei Li (2): KVM: Fix the build error KVM: Check if __pv_cpu_mask was allocated instead of assigning ops too late arch/x86/kernel/kvm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) -- 2.18.4 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] KVM: Fix the build error 2020-09-14 9:11 [PATCH 0/2] Fix the allocation of pv cpu mask lihaiwei.kernel @ 2020-09-14 9:11 ` lihaiwei.kernel 2020-09-20 13:09 ` Paolo Bonzini 2020-09-14 9:11 ` [PATCH 2/2] KVM: Check if __pv_cpu_mask was allocated instead of assigning ops too late lihaiwei.kernel 1 sibling, 1 reply; 6+ messages in thread From: lihaiwei.kernel @ 2020-09-14 9:11 UTC (permalink / raw) To: linux-kernel, kvm, x86 Cc: pbonzini, sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei, kernel test robot From: Haiwei Li <lihaiwei@tencent.com> When CONFIG_SMP is not set, an build error occurs with message "error: use of undeclared identifier 'kvm_send_ipi_mask_allbutself'" Fixes: 0f990222108d ("KVM: Check the allocation of pv cpu mask", 2020-09-01) Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Haiwei Li <lihaiwei@tencent.com> --- arch/x86/kernel/kvm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 1b51b727b140..7e8be0421720 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -797,7 +797,9 @@ static __init int kvm_alloc_cpumask(void) } } +#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; return 0; -- 2.18.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] KVM: Fix the build error 2020-09-14 9:11 ` [PATCH 1/2] KVM: Fix the build error lihaiwei.kernel @ 2020-09-20 13:09 ` Paolo Bonzini 2020-09-21 0:23 ` Haiwei Li 2020-09-23 5:02 ` Haiwei Li 0 siblings, 2 replies; 6+ messages in thread From: Paolo Bonzini @ 2020-09-20 13:09 UTC (permalink / raw) To: lihaiwei.kernel, linux-kernel, kvm, x86 Cc: sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei, kernel test robot On 14/09/20 11:11, lihaiwei.kernel@gmail.com wrote: > From: Haiwei Li <lihaiwei@tencent.com> > > When CONFIG_SMP is not set, an build error occurs with message "error: > use of undeclared identifier 'kvm_send_ipi_mask_allbutself'" > > Fixes: 0f990222108d ("KVM: Check the allocation of pv cpu mask", 2020-09-01) > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Haiwei Li <lihaiwei@tencent.com> > --- > arch/x86/kernel/kvm.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 1b51b727b140..7e8be0421720 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -797,7 +797,9 @@ static __init int kvm_alloc_cpumask(void) > } > } > > +#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; > return 0; > > If CONFIG_SMP is not set you don't need kvm_alloc_cpumask or pv_ops.mmu.flush_tlb_others at all. Can you squash these two into the original patch and re-submit for 5.10? Paolo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] KVM: Fix the build error 2020-09-20 13:09 ` Paolo Bonzini @ 2020-09-21 0:23 ` Haiwei Li 2020-09-23 5:02 ` Haiwei Li 1 sibling, 0 replies; 6+ messages in thread From: Haiwei Li @ 2020-09-21 0:23 UTC (permalink / raw) To: Paolo Bonzini, linux-kernel, kvm, x86 Cc: sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei, kernel test robot On 20/9/20 21:09, Paolo Bonzini wrote: > On 14/09/20 11:11, lihaiwei.kernel@gmail.com wrote: >> From: Haiwei Li <lihaiwei@tencent.com> >> >> When CONFIG_SMP is not set, an build error occurs with message "error: >> use of undeclared identifier 'kvm_send_ipi_mask_allbutself'" >> >> Fixes: 0f990222108d ("KVM: Check the allocation of pv cpu mask", 2020-09-01) >> Reported-by: kernel test robot <lkp@intel.com> >> Signed-off-by: Haiwei Li <lihaiwei@tencent.com> >> --- >> arch/x86/kernel/kvm.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c >> index 1b51b727b140..7e8be0421720 100644 >> --- a/arch/x86/kernel/kvm.c >> +++ b/arch/x86/kernel/kvm.c >> @@ -797,7 +797,9 @@ static __init int kvm_alloc_cpumask(void) >> } >> } >> >> +#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; >> return 0; >> >> > > If CONFIG_SMP is not set you don't need kvm_alloc_cpumask or > pv_ops.mmu.flush_tlb_others at all. Can you squash these two into the > original patch and re-submit for 5.10? I will, thanks. Haiwei Li ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] KVM: Fix the build error 2020-09-20 13:09 ` Paolo Bonzini 2020-09-21 0:23 ` Haiwei Li @ 2020-09-23 5:02 ` Haiwei Li 1 sibling, 0 replies; 6+ messages in thread From: Haiwei Li @ 2020-09-23 5:02 UTC (permalink / raw) To: Paolo Bonzini, linux-kernel, kvm, x86 Cc: sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei, kernel test robot On 20/9/20 21:09, Paolo Bonzini wrote: > On 14/09/20 11:11, lihaiwei.kernel@gmail.com wrote: >> From: Haiwei Li <lihaiwei@tencent.com> >> >> When CONFIG_SMP is not set, an build error occurs with message "error: >> use of undeclared identifier 'kvm_send_ipi_mask_allbutself'" >> >> Fixes: 0f990222108d ("KVM: Check the allocation of pv cpu mask", 2020-09-01) >> Reported-by: kernel test robot <lkp@intel.com> >> Signed-off-by: Haiwei Li <lihaiwei@tencent.com> >> --- >> arch/x86/kernel/kvm.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c >> index 1b51b727b140..7e8be0421720 100644 >> --- a/arch/x86/kernel/kvm.c >> +++ b/arch/x86/kernel/kvm.c >> @@ -797,7 +797,9 @@ static __init int kvm_alloc_cpumask(void) >> } >> } >> >> +#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; >> return 0; >> >> > > If CONFIG_SMP is not set you don't need kvm_alloc_cpumask or > pv_ops.mmu.flush_tlb_others at all. Can you squash these two into the > original patch and re-submit for 5.10? Hi, Paolo I'm a little confused. Function kvm_flush_tlb_others doesn't seem to be related to CONFIG_SMP. And my patch like: --- arch/x86/kernel/kvm.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 9663ba31347c..1e5da6db519c 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -553,7 +553,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"); } @@ -619,6 +618,11 @@ static void kvm_flush_tlb_others(const struct cpumask *cpumask, struct kvm_steal_time *src; struct cpumask *flushmask = this_cpu_cpumask_var_ptr(__pv_cpu_mask); + if (unlikely(!flushmask)) { + native_flush_tlb_others(cpumask, info); + return; + } + cpumask_copy(flushmask, cpumask); /* * We have to call flush only on online vCPUs. And @@ -765,6 +769,14 @@ static __init int activate_jump_labels(void) } arch_initcall(activate_jump_labels); +static void kvm_free_cpumask(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; @@ -783,11 +795,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; } +#if defined(CONFIG_SMP) + apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself; +#endif return 0; + +zalloc_cpumask_fail: + kvm_free_cpumask(); + return -ENOMEM; } arch_initcall(kvm_alloc_cpumask); -- 2.18.4 Do you have any suggestion? Thanks. Haiwei ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] KVM: Check if __pv_cpu_mask was allocated instead of assigning ops too late 2020-09-14 9:11 [PATCH 0/2] Fix the allocation of pv cpu mask lihaiwei.kernel 2020-09-14 9:11 ` [PATCH 1/2] KVM: Fix the build error lihaiwei.kernel @ 2020-09-14 9:11 ` lihaiwei.kernel 1 sibling, 0 replies; 6+ messages in thread From: lihaiwei.kernel @ 2020-09-14 9:11 UTC (permalink / raw) To: linux-kernel, kvm, x86 Cc: pbonzini, sean.j.christopherson, vkuznets, wanpengli, jmattson, joro, tglx, mingo, bp, hpa, lihaiwei From: Haiwei Li <lihaiwei@tencent.com> Without this patch, kvm_flush_tlb_others is not called. We can always check if __pv_cpu_mask was allocated and revert back to the architectural path if not. Suggested-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Haiwei Li <lihaiwei@tencent.com> --- arch/x86/kernel/kvm.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 7e8be0421720..3c6c516d9828 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -553,7 +553,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"); } @@ -619,6 +618,11 @@ static void kvm_flush_tlb_others(const struct cpumask *cpumask, struct kvm_steal_time *src; struct cpumask *flushmask = this_cpu_cpumask_var_ptr(__pv_cpu_mask); + if (unlikely(!flushmask)) { + native_flush_tlb_others(cpumask, info); + return; + } + cpumask_copy(flushmask, cpumask); /* * We have to call flush only on online vCPUs. And @@ -652,6 +656,7 @@ 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"); } @@ -800,7 +805,6 @@ static __init int kvm_alloc_cpumask(void) #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; return 0; zalloc_cpumask_fail: -- 2.18.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-09-23 5:02 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-09-14 9:11 [PATCH 0/2] Fix the allocation of pv cpu mask lihaiwei.kernel 2020-09-14 9:11 ` [PATCH 1/2] KVM: Fix the build error lihaiwei.kernel 2020-09-20 13:09 ` Paolo Bonzini 2020-09-21 0:23 ` Haiwei Li 2020-09-23 5:02 ` Haiwei Li 2020-09-14 9:11 ` [PATCH 2/2] KVM: Check if __pv_cpu_mask was allocated instead of assigning ops too late lihaiwei.kernel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).