[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1331544767.18960.23.camel@twins>
Date: Mon, 12 Mar 2012 10:32:47 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: "Liu, Chuansheng" <chuansheng.liu@...el.com>
Cc: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Yanmin Zhang <yanmin_zhang@...ux.intel.com>,
"tglx@...utronix.de" <tglx@...utronix.de>
Subject: Re: [PATCH] Fix the race between smp_call_function and CPU booting
On Mon, 2012-03-12 at 09:27 +0000, Liu, Chuansheng wrote:
> From: liu chuansheng <chuansheng.liu@...el.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?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists