aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2007-05-09 05:35:10 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-09 15:30:56 -0400
commit8bb7844286fb8c9fce6f65d8288aeb09d03a5e0d (patch)
treef4e305edaedbde05774bb1e4acd89a9475661d2e /arch/x86_64
parentf37bc2712b54ec641e0c0c8634f1a4b61d9956c0 (diff)
Add suspend-related notifications for CPU hotplug
Since nonboot CPUs are now disabled after tasks and devices have been frozen and the CPU hotplug infrastructure is used for this purpose, we need special CPU hotplug notifications that will help the CPU-hotplug-aware subsystems distinguish normal CPU hotplug events from CPU hotplug events related to a system-wide suspend or resume operation in progress. This patch introduces such notifications and causes them to be used during suspend and resume transitions. It also changes all of the CPU-hotplug-aware subsystems to take these notifications into consideration (for now they are handled in the same way as the corresponding "normal" ones). [oleg@tv-sign.ru: cleanups] Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Cc: Gautham R Shenoy <ego@in.ibm.com> Cc: Pavel Machek <pavel@ucw.cz> Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/kernel/mce.c2
-rw-r--r--arch/x86_64/kernel/mce_amd.c2
-rw-r--r--arch/x86_64/kernel/vsyscall.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c
index 442169640e4..a14375dd542 100644
--- a/arch/x86_64/kernel/mce.c
+++ b/arch/x86_64/kernel/mce.c
@@ -720,9 +720,11 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
720 720
721 switch (action) { 721 switch (action) {
722 case CPU_ONLINE: 722 case CPU_ONLINE:
723 case CPU_ONLINE_FROZEN:
723 mce_create_device(cpu); 724 mce_create_device(cpu);
724 break; 725 break;
725 case CPU_DEAD: 726 case CPU_DEAD:
727 case CPU_DEAD_FROZEN:
726 mce_remove_device(cpu); 728 mce_remove_device(cpu);
727 break; 729 break;
728 } 730 }
diff --git a/arch/x86_64/kernel/mce_amd.c b/arch/x86_64/kernel/mce_amd.c
index d0bd5d66e10..03356e64f9c 100644
--- a/arch/x86_64/kernel/mce_amd.c
+++ b/arch/x86_64/kernel/mce_amd.c
@@ -654,9 +654,11 @@ static int threshold_cpu_callback(struct notifier_block *nfb,
654 654
655 switch (action) { 655 switch (action) {
656 case CPU_ONLINE: 656 case CPU_ONLINE:
657 case CPU_ONLINE_FROZEN:
657 threshold_create_device(cpu); 658 threshold_create_device(cpu);
658 break; 659 break;
659 case CPU_DEAD: 660 case CPU_DEAD:
661 case CPU_DEAD_FROZEN:
660 threshold_remove_device(cpu); 662 threshold_remove_device(cpu);
661 break; 663 break;
662 default: 664 default:
diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c
index dc32cef9619..51d4c6fa88c 100644
--- a/arch/x86_64/kernel/vsyscall.c
+++ b/arch/x86_64/kernel/vsyscall.c
@@ -327,7 +327,7 @@ static int __cpuinit
327cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg) 327cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg)
328{ 328{
329 long cpu = (long)arg; 329 long cpu = (long)arg;
330 if (action == CPU_ONLINE) 330 if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN)
331 smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1); 331 smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1);
332 return NOTIFY_DONE; 332 return NOTIFY_DONE;
333} 333}