lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 9 Nov 2011 16:34:17 -0800 From: "Fenghua Yu" <fenghua.yu@...el.com> To: "Thomas Gleixner" <tglx@...utronix.de>, "H Peter Anvin" <hpa@...or.com>, "Ingo Molnar" <mingo@...e.hu>, "Linus Torvalds" <torvalds@...ux-foundation.org>, "Andrew Morton" <akpm@...ux-foundation.org>, "Tony Luck" <tony.luck@...el.com>, "Arjan van de Ven" <arjan.van.de.ven@...el.com>, "Suresh B Siddha" <suresh.b.siddha@...el.com>, "Len Brown" <len.brown@...el.com>, "Randy Dunlap" <rdunlap@...otime.net>, "Srivatsa S. Bhat" <srivatsa.bhat@...ux.vnet.ibm.com>, Peter Zijlstra <peterz@...radead.org> Cc: "linux-kernel" <linux-kernel@...r.kernel.org>, "linux-pm" <linux-pm@...r.kernel.org>, "x86" <x86@...nel.org>, "Fenghua Yu" <fenghua.yu@...el.com> Subject: [PATCH v3 7/7] x86/power/cpu.c: Don't hibernate/suspend if CPU0 is offline From: Fenghua Yu <fenghua.yu@...el.com> Because x86 BIOS requires CPU0 to resume from sleep, suspend or hibernate can't be executed if CPU0 is detected offline. Signed-off-by: Fenghua Yu <fenghua.yu@...el.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 f10c0af..a4ec084 100644 --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -236,3 +236,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) { + printk(KERN_WARNING "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); +} + +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); -- 1.6.0.3 -- 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