Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1626430 > unrolled thread

[PATCH v5] x86: call smp vmxoff in smp stop

Started byPaolo Bonzini <pbonzini@redhat.com>
First post2017-04-19 18:20 +0200
Last post2017-04-20 13:30 +0200
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v5] x86: call smp vmxoff in smp stop Paolo Bonzini <pbonzini@redhat.com> - 2017-04-19 18:20 +0200
    Re: [PATCH v5] x86: call smp vmxoff in smp stop David Hildenbrand <david@redhat.com> - 2017-04-20 12:10 +0200
      Re: [PATCH v5] x86: call smp vmxoff in smp stop Paolo Bonzini <pbonzini@redhat.com> - 2017-04-20 12:20 +0200
        Re: [PATCH v5] x86: call smp vmxoff in smp stop David Hildenbrand <david@redhat.com> - 2017-04-20 13:10 +0200
    [tip:x86/boot] x86/reboot: Turn off KVM when halting a CPU tip-bot for Tiantian Feng <tipbot@zytor.com> - 2017-04-20 13:30 +0200

#1626430 — [PATCH v5] x86: call smp vmxoff in smp stop

FromPaolo Bonzini <pbonzini@redhat.com>
Date2017-04-19 18:20 +0200
Subject[PATCH v5] x86: call smp vmxoff in smp stop
Message-ID<ty0uJ-5Cb-5@gated-at.bofh.it>
From: Tiantian Feng <fengtiantian@huawei.com>

A CPU in VMX root mode will ignore INIT signals and fail to bring
up the APs after reboot.  Therefore, on a panic we disable VMX on all
CPUs before rebooting or triggering kdump.

Do this when halting the machine as well, in case a firmware-level reboot
does not perform a cold reset for all processors.  Without doing this,
rebooting the host may hang.

Signed-off-by: Tiantian Feng <fengtiantian@huawei.com>
Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
[Rewritten commit message. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 arch/x86/kernel/smp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index d3c66a15bbde..9d7223cad389 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -33,6 +33,7 @@
 #include <asm/mce.h>
 #include <asm/trace/irq_vectors.h>
 #include <asm/kexec.h>
+#include <asm/virtext.h>
 
 /*
  *	Some notes on x86 processor bugs affecting SMP operation:
@@ -162,6 +163,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
 	if (raw_smp_processor_id() == atomic_read(&stopping_cpu))
 		return NMI_HANDLED;
 
+	cpu_emergency_vmxoff();
 	stop_this_cpu(NULL);
 
 	return NMI_HANDLED;
@@ -174,6 +176,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
 asmlinkage __visible void smp_reboot_interrupt(void)
 {
 	ipi_entering_ack_irq();
+	cpu_emergency_vmxoff();
 	stop_this_cpu(NULL);
 	irq_exit();
 }
-- 
2.9.3

[toc] | [next] | [standalone]


#1627266

FromDavid Hildenbrand <david@redhat.com>
Date2017-04-20 12:10 +0200
Message-ID<tyhce-7D4-1@gated-at.bofh.it>
In reply to#1626430
On 19.04.2017 18:18, Paolo Bonzini wrote:
> From: Tiantian Feng <fengtiantian@huawei.com>
> 
> A CPU in VMX root mode will ignore INIT signals and fail to bring
> up the APs after reboot.  Therefore, on a panic we disable VMX on all
> CPUs before rebooting or triggering kdump.
> 
> Do this when halting the machine as well, in case a firmware-level reboot
> does not perform a cold reset for all processors.  Without doing this,
> rebooting the host may hang.

Guess this make sense, just wonder if something like that is actually
expected to work? Not doing a cold reset feels like leaving a lot of
stuff in an uninitialized state. Shouldn't that specific firmware then
care about performing any necessary resets?

-- 

Thanks,

David

[toc] | [prev] | [next] | [standalone]


#1627290

FromPaolo Bonzini <pbonzini@redhat.com>
Date2017-04-20 12:20 +0200
Message-ID<tyhlT-7Gn-3@gated-at.bofh.it>
In reply to#1627266

On 20/04/2017 12:01, David Hildenbrand wrote:
> On 19.04.2017 18:18, Paolo Bonzini wrote:
>> From: Tiantian Feng <fengtiantian@huawei.com>
>>
>> A CPU in VMX root mode will ignore INIT signals and fail to bring
>> up the APs after reboot.  Therefore, on a panic we disable VMX on all
>> CPUs before rebooting or triggering kdump.
>>
>> Do this when halting the machine as well, in case a firmware-level reboot
>> does not perform a cold reset for all processors.  Without doing this,
>> rebooting the host may hang.
>
> Guess this make sense, just wonder if something like that is actually
> expected to work? Not doing a cold reset feels like leaving a lot of
> stuff in an uninitialized state. Shouldn't that specific firmware then
> care about performing any necessary resets?

Yes, but it cannot do them if it cannot even perform the initial warm
reset ("INIT").

It's probably rare, after all the original introduction of
cpu_emergency_vmxoff is as old as 2008 and it took nine years for
someone to think of making this extra change.

Paolo

[toc] | [prev] | [next] | [standalone]


#1627324

FromDavid Hildenbrand <david@redhat.com>
Date2017-04-20 13:10 +0200
Message-ID<tyi8i-8cx-19@gated-at.bofh.it>
In reply to#1627290
On 20.04.2017 12:13, Paolo Bonzini wrote:
> 
> 
> On 20/04/2017 12:01, David Hildenbrand wrote:
>> On 19.04.2017 18:18, Paolo Bonzini wrote:
>>> From: Tiantian Feng <fengtiantian@huawei.com>
>>>
>>> A CPU in VMX root mode will ignore INIT signals and fail to bring
>>> up the APs after reboot.  Therefore, on a panic we disable VMX on all
>>> CPUs before rebooting or triggering kdump.
>>>
>>> Do this when halting the machine as well, in case a firmware-level reboot
>>> does not perform a cold reset for all processors.  Without doing this,
>>> rebooting the host may hang.
>>
>> Guess this make sense, just wonder if something like that is actually
>> expected to work? Not doing a cold reset feels like leaving a lot of
>> stuff in an uninitialized state. Shouldn't that specific firmware then
>> care about performing any necessary resets?
> 
> Yes, but it cannot do them if it cannot even perform the initial warm
> reset ("INIT").
> 
> It's probably rare, after all the original introduction of
> cpu_emergency_vmxoff is as old as 2008 and it took nine years for
> someone to think of making this extra change.

Right, so this is really a special case. I think this is just fine.

The same problem with !vmm_exclusive as with other callers of
cpu_emergency_vmxoff(), but that should be solved as soon as
vmm_exclusive is dropped.

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 

Thanks,

David

[toc] | [prev] | [next] | [standalone]


#1627372 — [tip:x86/boot] x86/reboot: Turn off KVM when halting a CPU

Fromtip-bot for Tiantian Feng <tipbot@zytor.com>
Date2017-04-20 13:30 +0200
Subject[tip:x86/boot] x86/reboot: Turn off KVM when halting a CPU
Message-ID<tyirG-8jz-49@gated-at.bofh.it>
In reply to#1626430
Commit-ID:  fba4f472b33aa81ca1836f57d005455261e9126f
Gitweb:     http://git.kernel.org/tip/fba4f472b33aa81ca1836f57d005455261e9126f
Author:     Tiantian Feng <fengtiantian@huawei.com>
AuthorDate: Wed, 19 Apr 2017 18:18:39 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 20 Apr 2017 10:06:57 +0200

x86/reboot: Turn off KVM when halting a CPU

A CPU in VMX root mode will ignore INIT signals and will fail to bring
up the APs after reboot.  Therefore, on a panic we disable VMX on all
CPUs before rebooting or triggering kdump.

Do this when halting the machine as well, in case a firmware-level reboot
does not perform a cold reset for all processors.  Without doing this,
rebooting the host may hang.

Signed-off-by: Tiantian Feng <fengtiantian@huawei.com>
Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
[ Rewritten commit message. ]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: kvm@vger.kernel.org
Link: http://lkml.kernel.org/r/20170419161839.30550-1-pbonzini@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/smp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index d3c66a1..9d7223c 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -33,6 +33,7 @@
 #include <asm/mce.h>
 #include <asm/trace/irq_vectors.h>
 #include <asm/kexec.h>
+#include <asm/virtext.h>
 
 /*
  *	Some notes on x86 processor bugs affecting SMP operation:
@@ -162,6 +163,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
 	if (raw_smp_processor_id() == atomic_read(&stopping_cpu))
 		return NMI_HANDLED;
 
+	cpu_emergency_vmxoff();
 	stop_this_cpu(NULL);
 
 	return NMI_HANDLED;
@@ -174,6 +176,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
 asmlinkage __visible void smp_reboot_interrupt(void)
 {
 	ipi_entering_ack_irq();
+	cpu_emergency_vmxoff();
 	stop_this_cpu(NULL);
 	irq_exit();
 }

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web