Commit d861f6e6 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'smp-core-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull SMP updates from Ingo Molnar:
 "Misc cleanups in the SMP hotplug and cross-call code"

* tag 'smp-core-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  cpu/hotplug: Remove __freeze_secondary_cpus()
  cpu/hotplug: Remove disable_nonboot_cpus()
  cpu/hotplug: Fix a typo in comment "broadacasted"->"broadcasted"
  smp: Use smp_call_func_t in on_each_cpu()
parents 58ff3b76 fb7fb84a
...@@ -48,7 +48,7 @@ More details follow:: ...@@ -48,7 +48,7 @@ More details follow::
| |
| |
v v
disable_nonboot_cpus() freeze_secondary_cpus()
/* start */ /* start */
| |
v v
...@@ -83,7 +83,7 @@ More details follow:: ...@@ -83,7 +83,7 @@ More details follow::
Release cpu_add_remove_lock Release cpu_add_remove_lock
| |
v v
/* disable_nonboot_cpus() complete */ /* freeze_secondary_cpus() complete */
| |
v v
Do suspend Do suspend
...@@ -93,7 +93,7 @@ More details follow:: ...@@ -93,7 +93,7 @@ More details follow::
Resuming back is likewise, with the counterparts being (in the order of Resuming back is likewise, with the counterparts being (in the order of
execution during resume): execution during resume):
* enable_nonboot_cpus() which involves:: * thaw_secondary_cpus() which involves::
| Acquire cpu_add_remove_lock | Acquire cpu_add_remove_lock
| Decrease cpu_hotplug_disabled, thereby enabling regular cpu hotplug | Decrease cpu_hotplug_disabled, thereby enabling regular cpu hotplug
......
...@@ -1384,12 +1384,12 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) ...@@ -1384,12 +1384,12 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
speculative_store_bypass_ht_init(); speculative_store_bypass_ht_init();
} }
void arch_enable_nonboot_cpus_begin(void) void arch_thaw_secondary_cpus_begin(void)
{ {
set_mtrr_aps_delayed_init(); set_mtrr_aps_delayed_init();
} }
void arch_enable_nonboot_cpus_end(void) void arch_thaw_secondary_cpus_end(void)
{ {
mtrr_aps_init(); mtrr_aps_init();
} }
......
...@@ -307,7 +307,7 @@ int hibernate_resume_nonboot_cpu_disable(void) ...@@ -307,7 +307,7 @@ int hibernate_resume_nonboot_cpu_disable(void)
if (ret) if (ret)
return ret; return ret;
smp_ops.play_dead = resume_play_dead; smp_ops.play_dead = resume_play_dead;
ret = disable_nonboot_cpus(); ret = freeze_secondary_cpus(0);
smp_ops.play_dead = play_dead; smp_ops.play_dead = play_dead;
return ret; return ret;
} }
......
...@@ -144,18 +144,8 @@ static inline void get_online_cpus(void) { cpus_read_lock(); } ...@@ -144,18 +144,8 @@ static inline void get_online_cpus(void) { cpus_read_lock(); }
static inline void put_online_cpus(void) { cpus_read_unlock(); } static inline void put_online_cpus(void) { cpus_read_unlock(); }
#ifdef CONFIG_PM_SLEEP_SMP #ifdef CONFIG_PM_SLEEP_SMP
int __freeze_secondary_cpus(int primary, bool suspend); extern int freeze_secondary_cpus(int primary);
static inline int freeze_secondary_cpus(int primary) extern void thaw_secondary_cpus(void);
{
return __freeze_secondary_cpus(primary, true);
}
static inline int disable_nonboot_cpus(void)
{
return __freeze_secondary_cpus(0, false);
}
void enable_nonboot_cpus(void);
static inline int suspend_disable_secondary_cpus(void) static inline int suspend_disable_secondary_cpus(void)
{ {
...@@ -168,12 +158,11 @@ static inline int suspend_disable_secondary_cpus(void) ...@@ -168,12 +158,11 @@ static inline int suspend_disable_secondary_cpus(void)
} }
static inline void suspend_enable_secondary_cpus(void) static inline void suspend_enable_secondary_cpus(void)
{ {
return enable_nonboot_cpus(); return thaw_secondary_cpus();
} }
#else /* !CONFIG_PM_SLEEP_SMP */ #else /* !CONFIG_PM_SLEEP_SMP */
static inline int disable_nonboot_cpus(void) { return 0; } static inline void thaw_secondary_cpus(void) {}
static inline void enable_nonboot_cpus(void) {}
static inline int suspend_disable_secondary_cpus(void) { return 0; } static inline int suspend_disable_secondary_cpus(void) { return 0; }
static inline void suspend_enable_secondary_cpus(void) { } static inline void suspend_enable_secondary_cpus(void) { }
#endif /* !CONFIG_PM_SLEEP_SMP */ #endif /* !CONFIG_PM_SLEEP_SMP */
......
...@@ -227,8 +227,8 @@ static inline int get_boot_cpu_id(void) ...@@ -227,8 +227,8 @@ static inline int get_boot_cpu_id(void)
*/ */
extern void arch_disable_smp_support(void); extern void arch_disable_smp_support(void);
extern void arch_enable_nonboot_cpus_begin(void); extern void arch_thaw_secondary_cpus_begin(void);
extern void arch_enable_nonboot_cpus_end(void); extern void arch_thaw_secondary_cpus_end(void);
void smp_setup_processor_id(void); void smp_setup_processor_id(void);
......
...@@ -432,7 +432,7 @@ static inline bool cpu_smt_allowed(unsigned int cpu) ...@@ -432,7 +432,7 @@ static inline bool cpu_smt_allowed(unsigned int cpu)
/* /*
* On x86 it's required to boot all logical CPUs at least once so * On x86 it's required to boot all logical CPUs at least once so
* that the init code can get a chance to set CR4.MCE on each * that the init code can get a chance to set CR4.MCE on each
* CPU. Otherwise, a broadacasted MCE observing CR4.MCE=0b on any * CPU. Otherwise, a broadcasted MCE observing CR4.MCE=0b on any
* core will shutdown the machine. * core will shutdown the machine.
*/ */
return !cpumask_test_cpu(cpu, &cpus_booted_once_mask); return !cpumask_test_cpu(cpu, &cpus_booted_once_mask);
...@@ -1327,7 +1327,7 @@ void bringup_nonboot_cpus(unsigned int setup_max_cpus) ...@@ -1327,7 +1327,7 @@ void bringup_nonboot_cpus(unsigned int setup_max_cpus)
#ifdef CONFIG_PM_SLEEP_SMP #ifdef CONFIG_PM_SLEEP_SMP
static cpumask_var_t frozen_cpus; static cpumask_var_t frozen_cpus;
int __freeze_secondary_cpus(int primary, bool suspend) int freeze_secondary_cpus(int primary)
{ {
int cpu, error = 0; int cpu, error = 0;
...@@ -1352,7 +1352,7 @@ int __freeze_secondary_cpus(int primary, bool suspend) ...@@ -1352,7 +1352,7 @@ int __freeze_secondary_cpus(int primary, bool suspend)
if (cpu == primary) if (cpu == primary)
continue; continue;
if (suspend && pm_wakeup_pending()) { if (pm_wakeup_pending()) {
pr_info("Wakeup pending. Abort CPU freeze\n"); pr_info("Wakeup pending. Abort CPU freeze\n");
error = -EBUSY; error = -EBUSY;
break; break;
...@@ -1376,8 +1376,8 @@ int __freeze_secondary_cpus(int primary, bool suspend) ...@@ -1376,8 +1376,8 @@ int __freeze_secondary_cpus(int primary, bool suspend)
/* /*
* Make sure the CPUs won't be enabled by someone else. We need to do * Make sure the CPUs won't be enabled by someone else. We need to do
* this even in case of failure as all disable_nonboot_cpus() users are * this even in case of failure as all freeze_secondary_cpus() users are
* supposed to do enable_nonboot_cpus() on the failure path. * supposed to do thaw_secondary_cpus() on the failure path.
*/ */
cpu_hotplug_disabled++; cpu_hotplug_disabled++;
...@@ -1385,15 +1385,15 @@ int __freeze_secondary_cpus(int primary, bool suspend) ...@@ -1385,15 +1385,15 @@ int __freeze_secondary_cpus(int primary, bool suspend)
return error; return error;
} }
void __weak arch_enable_nonboot_cpus_begin(void) void __weak arch_thaw_secondary_cpus_begin(void)
{ {
} }
void __weak arch_enable_nonboot_cpus_end(void) void __weak arch_thaw_secondary_cpus_end(void)
{ {
} }
void enable_nonboot_cpus(void) void thaw_secondary_cpus(void)
{ {
int cpu, error; int cpu, error;
...@@ -1405,7 +1405,7 @@ void enable_nonboot_cpus(void) ...@@ -1405,7 +1405,7 @@ void enable_nonboot_cpus(void)
pr_info("Enabling non-boot CPUs ...\n"); pr_info("Enabling non-boot CPUs ...\n");
arch_enable_nonboot_cpus_begin(); arch_thaw_secondary_cpus_begin();
for_each_cpu(cpu, frozen_cpus) { for_each_cpu(cpu, frozen_cpus) {
trace_suspend_resume(TPS("CPU_ON"), cpu, true); trace_suspend_resume(TPS("CPU_ON"), cpu, true);
...@@ -1418,7 +1418,7 @@ void enable_nonboot_cpus(void) ...@@ -1418,7 +1418,7 @@ void enable_nonboot_cpus(void)
pr_warn("Error taking CPU%d up: %d\n", cpu, error); pr_warn("Error taking CPU%d up: %d\n", cpu, error);
} }
arch_enable_nonboot_cpus_end(); arch_thaw_secondary_cpus_end();
cpumask_clear(frozen_cpus); cpumask_clear(frozen_cpus);
out: out:
......
...@@ -620,7 +620,7 @@ void __init smp_init(void) ...@@ -620,7 +620,7 @@ void __init smp_init(void)
* early_boot_irqs_disabled is set. Use local_irq_save/restore() instead * early_boot_irqs_disabled is set. Use local_irq_save/restore() instead
* of local_irq_disable/enable(). * of local_irq_disable/enable().
*/ */
void on_each_cpu(void (*func) (void *info), void *info, int wait) void on_each_cpu(smp_call_func_t func, void *info, int wait)
{ {
unsigned long flags; unsigned long flags;
......
...@@ -125,7 +125,7 @@ acpi_suspend_begin: ...@@ -125,7 +125,7 @@ acpi_suspend_begin:
suspend_console: suspend_console:
acpi_pm_prepare: acpi_pm_prepare:
syscore_suspend: syscore_suspend:
arch_enable_nonboot_cpus_end: arch_thaw_secondary_cpus_end:
syscore_resume: syscore_resume:
acpi_pm_finish: acpi_pm_finish:
resume_console: resume_console:
......
...@@ -198,7 +198,7 @@ class SystemValues: ...@@ -198,7 +198,7 @@ class SystemValues:
'suspend_console': {}, 'suspend_console': {},
'acpi_pm_prepare': {}, 'acpi_pm_prepare': {},
'syscore_suspend': {}, 'syscore_suspend': {},
'arch_enable_nonboot_cpus_end': {}, 'arch_thaw_secondary_cpus_end': {},
'syscore_resume': {}, 'syscore_resume': {},
'acpi_pm_finish': {}, 'acpi_pm_finish': {},
'resume_console': {}, 'resume_console': {},
......
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