linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] x86/xen: fix warning when running with nosmt mitigations
@ 2020-11-06  0:35 Brian Masney
  2020-11-06  0:47 ` Brian Masney
  0 siblings, 1 reply; 3+ messages in thread
From: Brian Masney @ 2020-11-06  0:35 UTC (permalink / raw)
  To: boris.ostrovsky, jgross, sstabellini
  Cc: tglx, mingo, bp, x86, hpa, xen-devel, linux-kernel, dustymabe

When booting a hyperthreaded system with the kernel parameter
'mitigations=auto,nosmt', the following warning occurs:

    WARNING: CPU: 0 PID: 1 at drivers/xen/events/events_base.c:1112 unbind_from_irqhandler+0x4e/0x60
    ...
    Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
    ...
    Call Trace:
     xen_uninit_lock_cpu+0x28/0x62
     xen_hvm_cpu_die+0x21/0x30
     takedown_cpu+0x9c/0xe0
     ? trace_suspend_resume+0x60/0x60
     cpuhp_invoke_callback+0x9a/0x530
     _cpu_up+0x11a/0x130
     cpu_up+0x7e/0xc0
     bringup_nonboot_cpus+0x48/0x50
     smp_init+0x26/0x79
     kernel_init_freeable+0xea/0x229
     ? rest_init+0xaa/0xaa
     kernel_init+0xa/0x106
     ret_from_fork+0x35/0x40

The secondary CPUs are not activated with the nosmt mitigations and only
the primary thread on each CPU core is used. In this situation,
xen_hvm_smp_prepare_cpus(), and more importantly xen_init_lock_cpu(), is
not called, so the lock_kicker_irq is not initialized for the secondary
CPUs. Let's fix this by exiting early in xen_uninit_lock_cpu() if the
irq is not set to avoid the warning from above for each secondary CPU.

Signed-off-by: Brian Masney <bmasney@redhat.com>
---
 arch/x86/xen/spinlock.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 799f4eba0a62..4a052459a08e 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -93,9 +93,24 @@ void xen_init_lock_cpu(int cpu)
 
 void xen_uninit_lock_cpu(int cpu)
 {
+	int irq;
+
 	if (!xen_pvspin)
 		return;
 
+	/*
+	 * When booting the kernel with 'mitigations=auto,nosmt', the secondary
+	 * CPUs are not activated and only the primary thread on each CPU core
+	 * is used. In this situation, xen_hvm_smp_prepare_cpus(), and more
+	 * importantly xen_init_lock_cpu(), is not called, so the
+	 * lock_kicker_irq is not initialized for the secondary CPUs. Let's
+	 * exit early if the irq is not set to avoid a warning in the console
+	 * log.
+	 */
+	irq = per_cpu(lock_kicker_irq, cpu);
+	if (irq == -1)
+		return;
+
 	unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
 	per_cpu(lock_kicker_irq, cpu) = -1;
 	kfree(per_cpu(irq_name, cpu));
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] x86/xen: fix warning when running with nosmt mitigations
  2020-11-06  0:35 [PATCH] x86/xen: fix warning when running with nosmt mitigations Brian Masney
@ 2020-11-06  0:47 ` Brian Masney
  2020-11-07  0:44   ` boris.ostrovsky
  0 siblings, 1 reply; 3+ messages in thread
From: Brian Masney @ 2020-11-06  0:47 UTC (permalink / raw)
  To: boris.ostrovsky, jgross, sstabellini
  Cc: tglx, mingo, bp, x86, hpa, xen-devel, linux-kernel, dustymabe

On Thu, Nov 05, 2020 at 07:35:29PM -0500, Brian Masney wrote:
> diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
> index 799f4eba0a62..4a052459a08e 100644
> --- a/arch/x86/xen/spinlock.c
> +++ b/arch/x86/xen/spinlock.c
> @@ -93,9 +93,24 @@ void xen_init_lock_cpu(int cpu)
>  
>  void xen_uninit_lock_cpu(int cpu)
>  {
> +	int irq;
> +
>  	if (!xen_pvspin)
>  		return;
>  
> +	/*
> +	 * When booting the kernel with 'mitigations=auto,nosmt', the secondary
> +	 * CPUs are not activated and only the primary thread on each CPU core
> +	 * is used. In this situation, xen_hvm_smp_prepare_cpus(), and more
> +	 * importantly xen_init_lock_cpu(), is not called, so the
> +	 * lock_kicker_irq is not initialized for the secondary CPUs. Let's
> +	 * exit early if the irq is not set to avoid a warning in the console
> +	 * log.
> +	 */
> +	irq = per_cpu(lock_kicker_irq, cpu);
> +	if (irq == -1)
> +		return;
> +
>  	unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);

As soon as I saw this on lore, I saw that I should have passed the irq
variable to unbind_from_irqhandler() rather than doing another per_cpu()
lookup. I'll wait for feedback about the general approach before posting
a v2.

Brian


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] x86/xen: fix warning when running with nosmt mitigations
  2020-11-06  0:47 ` Brian Masney
@ 2020-11-07  0:44   ` boris.ostrovsky
  0 siblings, 0 replies; 3+ messages in thread
From: boris.ostrovsky @ 2020-11-07  0:44 UTC (permalink / raw)
  To: Brian Masney, jgross, sstabellini
  Cc: tglx, mingo, bp, x86, hpa, xen-devel, linux-kernel, dustymabe


On 11/5/20 7:47 PM, Brian Masney wrote:
> On Thu, Nov 05, 2020 at 07:35:29PM -0500, Brian Masney wrote:
>> diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
>> index 799f4eba0a62..4a052459a08e 100644
>> --- a/arch/x86/xen/spinlock.c
>> +++ b/arch/x86/xen/spinlock.c
>> @@ -93,9 +93,24 @@ void xen_init_lock_cpu(int cpu)
>>  
>>  void xen_uninit_lock_cpu(int cpu)
>>  {
>> +	int irq;
>> +
>>  	if (!xen_pvspin)
>>  		return;
>>  
>> +	/*
>> +	 * When booting the kernel with 'mitigations=auto,nosmt', the secondary
>> +	 * CPUs are not activated and only the primary thread on each CPU core
>> +	 * is used. In this situation, xen_hvm_smp_prepare_cpus(), and more
>> +	 * importantly xen_init_lock_cpu(), is not called, so the
>> +	 * lock_kicker_irq is not initialized for the secondary CPUs. Let's
>> +	 * exit early if the irq is not set to avoid a warning in the console
>> +	 * log.
>> +	 */
>> +	irq = per_cpu(lock_kicker_irq, cpu);
>> +	if (irq == -1)
>> +		return;
>> +
>>  	unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
> As soon as I saw this on lore, I saw that I should have passed the irq
> variable to unbind_from_irqhandler() rather than doing another per_cpu()
> lookup. I'll wait for feedback about the general approach before posting
> a v2.


This looks good. I'd shorten the comment though: your commit message already describes the scenario. And change the subject to something like "Don't unbind uninitialized lock_kicker_irq".


-boris


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-11-07  0:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-06  0:35 [PATCH] x86/xen: fix warning when running with nosmt mitigations Brian Masney
2020-11-06  0:47 ` Brian Masney
2020-11-07  0:44   ` boris.ostrovsky

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