Messages in this thread | | | Subject | Re: [PATCH] Fix the race between smp_call_function and CPU booting | From | Peter Zijlstra <> | Date | Mon, 12 Mar 2012 10:32:47 +0100 |
| |
On Mon, 2012-03-12 at 09:27 +0000, Liu, Chuansheng wrote: > From: liu chuansheng <chuansheng.liu@intel.com> > Subject: [PATCH] Fix the race between smp_call_function and CPU booting > > When system is waking up from suspend state, sometimes the > smp_call_function is called which will cause deadlock specially on the > platform which just has two CPUs. > > CPU0: CPU1: > pm_suspend --> > suspend_devices_and_enter --> > enable_nonboot_cpus --> > _cpu_up --> > __cpu_up --> > native_cpu_up > start_secondary > -- set cpu online > -- waiting for the active state new thread call: > smp_call_function --> > smp_call_function_many --> > smp_call_function_single --> > -- csd_lock > -- generic_exec_single --> > -- arch_send_call_function_single_ipi > -- csd_lock_wait > > At this time, both CPUs are blocked. Normally the CPU0 will set the > CPU1 with active state after finished the _cpu_up calling, but CPU1 > can not handle the IPI due to the corresponding irq is still disabled, > which will be enabled after waiting for the active state. > > The solution is just to send smp call to active cpus instead of online > cpus.
Wouldn't http://lkml.org/lkml/2011/12/15/255 also solve that?
| |