linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH REPOST v2 0/2 v2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again.
@ 2022-02-09  8:02 Sebastian Andrzej Siewior
  2022-02-09  8:02 ` [PATCH REPOST v2 1/2] x86/xen: Allow to retry if cpu_initialize_context() failed Sebastian Andrzej Siewior
  2022-02-09  8:02 ` [PATCH REPOST v2 2/2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
  0 siblings, 2 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2022-02-09  8:02 UTC (permalink / raw)
  To: linux-kernel, x86, xen-devel
  Cc: Thomas Gleixner, Longpeng, Gonglei, Peter Zijlstra, Ingo Molnar,
	Valentin Schneider, Juergen Gross, Stefano Stabellini,
	Ingo Molnar, Borislav Petkov, Dave Hansen, H . Peter Anvin

This is a another repost of the previous patch (#2) and adding Boris
(Ostrovsky)'s suggestion regarding the XEN bits.
The previous posts can be found at
   https://lore.kernel.org/all/20211206152034.2150770-1-bigeasy@linutronix.de/
   https://lore.kernel.org/all/20211122154714.xaoxok3fpk5bgznz@linutronix.de/

Sebastian


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

* [PATCH REPOST v2 1/2] x86/xen: Allow to retry if cpu_initialize_context() failed.
  2022-02-09  8:02 [PATCH REPOST v2 0/2 v2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
@ 2022-02-09  8:02 ` Sebastian Andrzej Siewior
  2022-04-12 12:19   ` [tip: smp/core] " tip-bot2 for Boris Ostrovsky
  2022-02-09  8:02 ` [PATCH REPOST v2 2/2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
  1 sibling, 1 reply; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2022-02-09  8:02 UTC (permalink / raw)
  To: linux-kernel, x86, xen-devel
  Cc: Thomas Gleixner, Longpeng, Gonglei, Peter Zijlstra, Ingo Molnar,
	Valentin Schneider, Juergen Gross, Stefano Stabellini,
	Ingo Molnar, Borislav Petkov, Dave Hansen, H . Peter Anvin,
	Boris Ostrovsky, Sebastian Andrzej Siewior

From: Boris Ostrovsky <boris.ostrovsky@oracle.com>

If memory allocation in cpu_initialize_context() fails then it will
bring up the VCPU and leave with the corresponding CPU bit set in
xen_cpu_initialized_map.
The following (presumably successful) CPU bring up will BUG in
xen_pv_cpu_up() because nothing for that VCPU would be initialized.

Clear the CPU bits, that were set in cpu_initialize_context() in case
the memory allocation fails.

[ bigeasy: Creating a patch from Boris' email. ]

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://lore.kernel.org/r/20211206152034.2150770-2-bigeasy@linutronix.de
---
 arch/x86/xen/smp_pv.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
index 4a6019238ee7d..57c3f9332ec94 100644
--- a/arch/x86/xen/smp_pv.c
+++ b/arch/x86/xen/smp_pv.c
@@ -260,8 +260,11 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
 		return 0;
 
 	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
-	if (ctxt == NULL)
+	if (ctxt == NULL) {
+		cpumask_clear_cpu(cpu, xen_cpu_initialized_map);
+		cpumask_clear_cpu(cpu, cpu_callout_mask);
 		return -ENOMEM;
+	}
 
 	gdt = get_cpu_gdt_rw(cpu);
 
-- 
2.34.1


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

* [PATCH REPOST v2 2/2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again.
  2022-02-09  8:02 [PATCH REPOST v2 0/2 v2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
  2022-02-09  8:02 ` [PATCH REPOST v2 1/2] x86/xen: Allow to retry if cpu_initialize_context() failed Sebastian Andrzej Siewior
@ 2022-02-09  8:02 ` Sebastian Andrzej Siewior
  2022-04-12 12:19   ` [tip: smp/core] " tip-bot2 for Longpeng(Mike)
  1 sibling, 1 reply; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2022-02-09  8:02 UTC (permalink / raw)
  To: linux-kernel, x86, xen-devel
  Cc: Thomas Gleixner, Longpeng, Gonglei, Peter Zijlstra, Ingo Molnar,
	Valentin Schneider, Juergen Gross, Stefano Stabellini,
	Ingo Molnar, Borislav Petkov, Dave Hansen, H . Peter Anvin,
	Sebastian Andrzej Siewior, Dongli Zhang, Henry Wang

From: "Longpeng(Mike)" <longpeng2@huawei.com>

A CPU will not show up in virtualized environment which includes an
Enclave. The VM splits its resources into a primary VM and a Enclave
VM. While the Enclave is active, the hypervisor will ignore all requests
to bring up a CPU and this CPU will remain in CPU_UP_PREPARE state.
The kernel will wait up to ten seconds for CPU to show up
(do_boot_cpu()) and then rollback the hotplug state back to
CPUHP_OFFLINE leaving the CPU state in CPU_UP_PREPARE. The CPU state is
set back to CPUHP_TEARDOWN_CPU during the CPU_POST_DEAD stage.

After the Enclave VM terminates, the primary VM can bring up the CPU
again.

Allow to bring up the CPU if it is in the CPU_UP_PREPARE state.

[bigeasy: Rewrite commit description.]

Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://lore.kernel.org/r/20210901051143.2752-1-longpeng2@huawei.com
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Tested-by: Dongli Zhang <dongli.zhang@oracle.com>
Reviewed-by: Henry Wang <Henry.Wang@arm.com>
Link: https://lore.kernel.org/r/20211122154714.xaoxok3fpk5bgznz@linutronix.de
Link: https://lore.kernel.org/r/20211206152034.2150770-3-bigeasy@linutronix.de
---
 kernel/smpboot.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/kernel/smpboot.c b/kernel/smpboot.c
index f6bc0bc8a2aab..b9f54544e7499 100644
--- a/kernel/smpboot.c
+++ b/kernel/smpboot.c
@@ -392,6 +392,13 @@ int cpu_check_up_prepare(int cpu)
 		 */
 		return -EAGAIN;
 
+	case CPU_UP_PREPARE:
+		/*
+		 * Timeout while waiting for the CPU to show up. Allow to try
+		 * again later.
+		 */
+		return 0;
+
 	default:
 
 		/* Should not happen.  Famous last words. */
-- 
2.34.1


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

* [tip: smp/core] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again.
  2022-02-09  8:02 ` [PATCH REPOST v2 2/2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
@ 2022-04-12 12:19   ` tip-bot2 for Longpeng(Mike)
  0 siblings, 0 replies; 5+ messages in thread
From: tip-bot2 for Longpeng(Mike) @ 2022-04-12 12:19 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Longpeng(Mike),
	Sebastian Andrzej Siewior, Thomas Gleixner, Dongli Zhang,
	Valentin Schneider, Henry Wang, x86, linux-kernel

The following commit has been merged into the smp/core branch of tip:

Commit-ID:     c7dfb2591b23856182e2c9da6b1d526ef7fd6b2e
Gitweb:        https://git.kernel.org/tip/c7dfb2591b23856182e2c9da6b1d526ef7fd6b2e
Author:        Longpeng(Mike) <longpeng2@huawei.com>
AuthorDate:    Wed, 09 Feb 2022 09:02:14 +01:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Tue, 12 Apr 2022 14:13:01 +02:00

cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again.

A CPU will not show up in virtualized environment which includes an
Enclave. The VM splits its resources into a primary VM and a Enclave
VM. While the Enclave is active, the hypervisor will ignore all requests to
bring up a CPU and this CPU will remain in CPU_UP_PREPARE state.

The kernel will wait up to ten seconds for CPU to show up (do_boot_cpu())
and then rollback the hotplug state back to CPUHP_OFFLINE leaving the CPU
state in CPU_UP_PREPARE. The CPU state is set back to CPUHP_TEARDOWN_CPU
during the CPU_POST_DEAD stage.

After the Enclave VM terminates, the primary VM can bring up the CPU
again.

Allow to bring up the CPU if it is in the CPU_UP_PREPARE state.

[bigeasy: Rewrite commit description.]

Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Dongli Zhang <dongli.zhang@oracle.com>
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Reviewed-by: Henry Wang <Henry.Wang@arm.com>
Link: https://lore.kernel.org/r/20220209080214.1439408-3-bigeasy@linutronix.de

---
 kernel/smpboot.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/kernel/smpboot.c b/kernel/smpboot.c
index f6bc0bc..b9f5454 100644
--- a/kernel/smpboot.c
+++ b/kernel/smpboot.c
@@ -392,6 +392,13 @@ int cpu_check_up_prepare(int cpu)
 		 */
 		return -EAGAIN;
 
+	case CPU_UP_PREPARE:
+		/*
+		 * Timeout while waiting for the CPU to show up. Allow to try
+		 * again later.
+		 */
+		return 0;
+
 	default:
 
 		/* Should not happen.  Famous last words. */

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

* [tip: smp/core] x86/xen: Allow to retry if cpu_initialize_context() failed.
  2022-02-09  8:02 ` [PATCH REPOST v2 1/2] x86/xen: Allow to retry if cpu_initialize_context() failed Sebastian Andrzej Siewior
@ 2022-04-12 12:19   ` tip-bot2 for Boris Ostrovsky
  0 siblings, 0 replies; 5+ messages in thread
From: tip-bot2 for Boris Ostrovsky @ 2022-04-12 12:19 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Boris Ostrovsky, Sebastian Andrzej Siewior, Thomas Gleixner, x86,
	linux-kernel

The following commit has been merged into the smp/core branch of tip:

Commit-ID:     e8a69f12f01f487c6a0e704eb14ccf2dd015277d
Gitweb:        https://git.kernel.org/tip/e8a69f12f01f487c6a0e704eb14ccf2dd015277d
Author:        Boris Ostrovsky <boris.ostrovsky@oracle.com>
AuthorDate:    Wed, 09 Feb 2022 09:02:13 +01:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Tue, 12 Apr 2022 14:13:01 +02:00

x86/xen: Allow to retry if cpu_initialize_context() failed.

If memory allocation in cpu_initialize_context() fails then it will
bring up the VCPU and leave with the corresponding CPU bit set in
xen_cpu_initialized_map.

The following (presumably successful) CPU bring up will BUG in
xen_pv_cpu_up() because nothing for that VCPU would be initialized.

Clear the CPU bits, that were set in cpu_initialize_context() in case
the memory allocation fails.

[ bigeasy: Creating a patch from Boris' email. ]

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220209080214.1439408-2-bigeasy@linutronix.de

---
 arch/x86/xen/smp_pv.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
index 688aa8b..ba7af2e 100644
--- a/arch/x86/xen/smp_pv.c
+++ b/arch/x86/xen/smp_pv.c
@@ -260,8 +260,11 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
 		return 0;
 
 	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
-	if (ctxt == NULL)
+	if (ctxt == NULL) {
+		cpumask_clear_cpu(cpu, xen_cpu_initialized_map);
+		cpumask_clear_cpu(cpu, cpu_callout_mask);
 		return -ENOMEM;
+	}
 
 	gdt = get_cpu_gdt_rw(cpu);
 

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

end of thread, other threads:[~2022-04-12 12:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-09  8:02 [PATCH REPOST v2 0/2 v2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
2022-02-09  8:02 ` [PATCH REPOST v2 1/2] x86/xen: Allow to retry if cpu_initialize_context() failed Sebastian Andrzej Siewior
2022-04-12 12:19   ` [tip: smp/core] " tip-bot2 for Boris Ostrovsky
2022-02-09  8:02 ` [PATCH REPOST v2 2/2] cpu/hotplug: Allow the CPU in CPU_UP_PREPARE state to be brought up again Sebastian Andrzej Siewior
2022-04-12 12:19   ` [tip: smp/core] " tip-bot2 for Longpeng(Mike)

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