All of lore.kernel.org
 help / color / mirror / Atom feed
From: <yang.yang29@zte.com.cn>
To: <tglx@linutronix.de>, <peterz@infradead.org>
Cc: <linux-kernel@vger.kernel.org>
Subject: [PATCH] cpu/hotplug: dont offline the last non-isolated CPU
Date: Sat, 16 Sep 2023 10:37:41 +0800 (CST)	[thread overview]
Message-ID: <202309161037416349176@zte.com.cn> (raw)

From: Ran Xiaokai <ran.xiaokai@zte.com.cn>

If system has some isolate cpus with "isolcpus=" parameter,
and user try to offline all the non-isolated CPUs, kernel will
first report a warning and then panic when taking the last
non-isolated CPU offline.

Kernel should not panic when user managing CPUs with this
meaningless behavior, so we add a check for this, which
prevent user taking the last non-isolated CPU offline.

[   19.415123] WARNING: CPU: 4 PID: 80 at kernel/sched/topology.c:2366 build_sched_domains+0x120c/0x1408
[   19.430451] Call trace:
[   19.430792]  build_sched_domains+0x120c/0x1408
[   19.431334]  partition_sched_domains_locked+0x234/0x880
[   19.431878]  rebuild_sched_domains_locked+0x37c/0x798
[   19.432436]  rebuild_sched_domains+0x30/0x58
[   19.432902]  cpuset_hotplug_workfn+0x2a8/0x930
[   19.433383]  process_scheduled_works+0x178/0x3e0
[   19.433878]  worker_thread+0x174/0x2f0
[   19.435204] ---[ end trace 0000000000000000 ]---
[   19.438650] Unable to handle kernel paging request at virtual address fffe80027ab37080
[   19.456414]  partition_sched_domains_locked+0x318/0x880
[   19.456899]  rebuild_sched_domains_locked+0x37c/0x798
[   19.457361]  rebuild_sched_domains+0x30/0x58
[   19.457761]  cpuset_hotplug_workfn+0x2a8/0x930
[   19.458175]  process_scheduled_works+0x178/0x3e0
[   19.458599]  worker_thread+0x174/0x2f0
[   19.458948]  kthread+0x10c/0x128
[   19.459268]  ret_from_fork+0x10/0x20
[   19.459728] Code: 1a850042 b9441883 f862dae0 8b000021 (f945003b)

Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
Cc: Xuexin Jiang <jiang.xuexin@zte.com.cn>
Cc: Yang Yang <yang.yang29@zte.com.cn>
---
 kernel/cpu.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index 6de7c6bb74ee..09ecc19d2999 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1502,6 +1502,7 @@ static long __cpu_down_maps_locked(void *arg)
 static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target)
 {
 	struct cpu_down_work work = { .cpu = cpu, .target = target, };
+	struct cpumask tmp_mask;

 	/*
 	 * If the platform does not support hotplug, report it explicitly to
@@ -1512,11 +1513,16 @@ static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target)
 	if (cpu_hotplug_disabled)
 		return -EBUSY;

+	/*
+	 * Ensure the last non-isolated CPU is not offlined.
+	 */
+	cpumask_and(&tmp_mask, cpu_online_mask, housekeeping_cpumask(HK_TYPE_DOMAIN));
+
 	/*
 	 * Ensure that the control task does not run on the to be offlined
 	 * CPU to prevent a deadlock against cfs_b->period_timer.
 	 */
-	cpu = cpumask_any_but(cpu_online_mask, cpu);
+	cpu = cpumask_any_but(&tmp_mask, cpu);
 	if (cpu >= nr_cpu_ids)
 		return -EBUSY;
 	return work_on_cpu(cpu, __cpu_down_maps_locked, &work);
-- 
2.15.2

             reply	other threads:[~2023-09-16  2:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-16  2:37 yang.yang29 [this message]
2023-10-11 12:56 ` [PATCH] cpu/hotplug: dont offline the last non-isolated CPU Thomas Gleixner
2023-10-17  9:09   ` [PATCH V2] " yang.yang29

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202309161037416349176@zte.com.cn \
    --to=yang.yang29@zte.com.cn \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.