Messages in this thread | | | Date | Tue, 19 Nov 2019 23:59:10 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: [PATCH 04/12] ia64: Replace cpu_down with freeze_secondary_cpus |
| |
On Tue, 19 Nov 2019, Qais Yousef wrote: > On 11/19/19 23:21, Thomas Gleixner wrote: > > On Wed, 30 Oct 2019, Qais Yousef wrote: > > > void machine_shutdown(void) > > > { > > > #ifdef CONFIG_HOTPLUG_CPU > > > - int cpu; > > > - > > > - for_each_online_cpu(cpu) { > > > - if (cpu != smp_processor_id()) > > > - cpu_down(cpu); > > > - } > > > + /* TODO: Can we use disable_nonboot_cpus()? */ > > > + freeze_secondary_cpus(smp_processor_id()); > > > > freeze_secondary_cpus() is only available for CONFIG_PM_SLEEP_SMP=y and > > disable_nonboot_cpus() is a NOOP for CONFIG_PM_SLEEP_SMP=n :) > > I thought I replied to this :-( > > My plan was to simply make freeze_secondary_cpus() available and protected by > CONFIG_SMP only instead. > > Good plan?
No. freeze_secondary_cpus() is really for hibernation. Look at the exit conditions there.
So you really want a seperate function which depends on CONFIG_HOTPLUG_CPU and provides an inline stub for the CONFIG_HOTPLUG_CPU=n case.
But I have a hard time to see how that stuff works at all on ia64:
cpu_down() might sleep, i.e. it must be called from preemptible context. smp_processor_id() is invalid from preemtible context.
As this is obviously broken and ia64 is in keep compile mode only, it should just go away.
Thanks,
tglx
| |