All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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

* 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

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 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.