lkml.org 
[lkml]   [2012]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH v9 05/12] x86, hotplug, suspend: Online CPU0 for suspend or hibernate
Date
On Friday 12 of October 2012 09:09:42 Fenghua Yu wrote:
> From: Fenghua Yu <fenghua.yu@intel.com>
>
> Because x86 BIOS requires CPU0 to resume from sleep, suspend or hibernate can't
> be executed if CPU0 is detected offline. To make suspend or hibernate and
> further resume succeed, CPU0 must be online.
>
> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
> ---
> arch/x86/power/cpu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 44 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
> index 218cdb1..adde775 100644
> --- a/arch/x86/power/cpu.c
> +++ b/arch/x86/power/cpu.c
> @@ -237,3 +237,47 @@ void restore_processor_state(void)
> #ifdef CONFIG_X86_32
> EXPORT_SYMBOL(restore_processor_state);
> #endif
> +
> +/*
> + * When bsp_check() is called in hibernate and suspend, cpu hotplug
> + * is disabled already. So it's unnessary to handle race condition between
> + * cpumask query and cpu hotplug.
> + */
> +static int bsp_check(void)
> +{
> + if (cpumask_first(cpu_online_mask) != 0) {
> + pr_warn("CPU0 is offline.\n");
> + return -ENODEV;
> + }
> +
> + return 0;
> +}
> +
> +static int bsp_pm_callback(struct notifier_block *nb, unsigned long action,
> + void *ptr)
> +{
> + int ret = 0;
> +
> + switch (action) {
> + case PM_SUSPEND_PREPARE:
> + case PM_HIBERNATION_PREPARE:
> + ret = bsp_check();
> + break;
> + default:
> + break;
> + }
> + return notifier_from_errno(ret);
> +}
> +

I wonder if there's anything preventing CPU0 from becoming offline after you've
done this check and before user space is frozen?

Rafael


> +static int __init bsp_pm_check_init(void)
> +{
> + /*
> + * Set this bsp_pm_callback as lower priority than
> + * cpu_hotplug_pm_callback. So cpu_hotplug_pm_callback will be called
> + * earlier to disable cpu hotplug before bsp online check.
> + */
> + pm_notifier(bsp_pm_callback, -INT_MAX);
> + return 0;
> +}
> +
> +core_initcall(bsp_pm_check_init);
>
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.


\
 
 \ /
  Last update: 2012-10-15 23:21    [W:0.251 / U:0.132 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site