Commit 0eff0491 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'smp-core-2024-07-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull CPU hotplug updates from Thomas Gleixner:
 "A small set of SMP/CPU hotplug updates:

   - Reverse the order of iteration when freezing secondary CPUs for
     hibernation.

     This avoids that drivers like the Intel uncore performance counter
     have to transfer the assignement of handling the per package uncore
     events for every CPU in a package, which is a considerable speedup
     on larger systems.

   - Add a missing destroy_work_on_stack() invocation in
     smp_call_on_cpu() to prevent debug objects to emit a false positive
     warning when the stack is freed.

   - Small cleanups in comments and a str_plural() conversion"

* tag 'smp-core-2024-07-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  smp: Add missing destroy_work_on_stack() call in smp_call_on_cpu()
  cpu/hotplug: Reverse order of iteration in freeze_secondary_cpus()
  smp: Use str_plural() to fix Coccinelle warnings
  cpu/hotplug: Fix typo in comment
parents 0e4b77d4 77aeb1b6
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
* startup callbacks sequentially from CPUHP_OFFLINE + 1 to CPUHP_ONLINE * startup callbacks sequentially from CPUHP_OFFLINE + 1 to CPUHP_ONLINE
* during a CPU online operation. During a CPU offline operation the * during a CPU online operation. During a CPU offline operation the
* installed teardown callbacks are invoked in the reverse order from * installed teardown callbacks are invoked in the reverse order from
* CPU_ONLINE - 1 down to CPUHP_OFFLINE. * CPUHP_ONLINE - 1 down to CPUHP_OFFLINE.
* *
* The state space has three sections: PREPARE, STARTING and ONLINE. * The state space has three sections: PREPARE, STARTING and ONLINE.
* *
......
...@@ -1894,8 +1894,8 @@ int freeze_secondary_cpus(int primary) ...@@ -1894,8 +1894,8 @@ int freeze_secondary_cpus(int primary)
cpumask_clear(frozen_cpus); cpumask_clear(frozen_cpus);
pr_info("Disabling non-boot CPUs ...\n"); pr_info("Disabling non-boot CPUs ...\n");
for_each_online_cpu(cpu) { for (cpu = nr_cpu_ids - 1; cpu >= 0; cpu--) {
if (cpu == primary) if (!cpu_online(cpu) || cpu == primary)
continue; continue;
if (pm_wakeup_pending()) { if (pm_wakeup_pending()) {
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/nmi.h> #include <linux/nmi.h>
#include <linux/sched/debug.h> #include <linux/sched/debug.h>
#include <linux/jump_label.h> #include <linux/jump_label.h>
#include <linux/string_choices.h>
#include <trace/events/ipi.h> #include <trace/events/ipi.h>
#define CREATE_TRACE_POINTS #define CREATE_TRACE_POINTS
...@@ -982,8 +983,7 @@ void __init smp_init(void) ...@@ -982,8 +983,7 @@ void __init smp_init(void)
num_nodes = num_online_nodes(); num_nodes = num_online_nodes();
num_cpus = num_online_cpus(); num_cpus = num_online_cpus();
pr_info("Brought up %d node%s, %d CPU%s\n", pr_info("Brought up %d node%s, %d CPU%s\n",
num_nodes, (num_nodes > 1 ? "s" : ""), num_nodes, str_plural(num_nodes), num_cpus, str_plural(num_cpus));
num_cpus, (num_cpus > 1 ? "s" : ""));
/* Any cleanup work */ /* Any cleanup work */
smp_cpus_done(setup_max_cpus); smp_cpus_done(setup_max_cpus);
...@@ -1119,6 +1119,7 @@ int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys) ...@@ -1119,6 +1119,7 @@ int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
queue_work_on(cpu, system_wq, &sscs.work); queue_work_on(cpu, system_wq, &sscs.work);
wait_for_completion(&sscs.done); wait_for_completion(&sscs.done);
destroy_work_on_stack(&sscs.work);
return sscs.ret; return sscs.ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment