From: Guenter Roeck <linux@roeck-us.net>
To: linux-kernel@vger.kernel.org
Cc: linux-m32r-ja@ml.linux-m32r.org, linux-mips@linux-mips.org,
linux-efi@vger.kernel.org, linux-ia64@vger.kernel.org,
Steven Miao <realmz6@gmail.com>,
linux-xtensa@linux-xtensa.org,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
David Howells <dhowells@redhat.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Paul Mackerras <paulus@samba.org>,
Ralf Baechle <ralf@linux-mips.org>, Pavel Machek <pavel@ucw.cz>,
"H. Peter Anvin" <hpa@zytor.com>,
Guan Xuetao <gxt@mprc.pku.edu.cn>,
Thomas Gleixner <tglx@linutronix.de>,
Lennox Wu <lennox.wu@gmail.com>,
Hans-Christian Egtvedt <egtvedt@samfundet.no>,
devel@driverdev.osuosl.org, linux-s390@vger.kernel.org,
Jesper Nilsson <jesper.nilsson@axis.com>,
lguest@lists.ozlabs.org, Russell King <linux@arm.linux.org.uk>,
linux-c6x-dev@linux-c6x.org, Len Brown <len.brown@intel.com>,
"David S. Miller" <davem@davemloft.net>,
linux-hexagon@vger.kernel.org,
Hirokazu Takata <takata@linux-m32r.org>,
linux-sh@vger.kernel.org,
"James E.J. Bottomley" <jejb@parisc-linux.org>,
linux-acpi@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Mark Salter <msalter@redhat.com>,
xen-devel@lists.xenproject.org, Matt Turner <mattst88@gmail.com>,
Chen Liqin <liqin.linux@gmail.com>,
Jonas Bonn <jonas@southpole.se>,
Guenter Roeck <linux@roeck-us.net>,
Haavard Skinnemoen <hskinnemoen@gmail.com>,
devicetree@vger.kernel.org, James Hogan <james.hogan@imgtec.com>,
user-mode-linux-devel@lists.sourceforge.net,
linux-pm@vger.kernel.org, Aurelien Jacquiot <a-jacquiot@ti.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Jeff Dike <jdike@addtoit.com>,
adi-buildroot-devel@lists.sourceforge.net,
Chris Metcalf <cmetcalf@tilera.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Mikael Starvik <starvik@axis.com>,
Richard Weinberger <richard@nod.at>,
linux-m68k@lists.linux-m68k.org, linux-am33-list@redhat.com,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
linux-tegra@vger.kernel.org,
openipmi-developer@lists.sourceforge.net,
linux-metag@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Richard Henderson <rth@twiddle.net>,
Chris Zankel <chris@zankel.net>, Michal Simek <monstr@monstr.eu>,
Tony Luck <tony.luck@intel.com>,
linux-parisc@vger.kernel.org, linux-cris-kernel@axis.com,
Vineet Gupta <vgupta@synopsys.com>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Fenghua Yu <fenghua.yu@intel.com>,
Richard Kuo <rkuo@codeaurora.org>,
David Vrabel <david.vrabel@citrix.com>,
linux-alpha@vger.kernel.org,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Koichi Yasutake <yasutake.koichi@jp.panasonic.com>,
linuxppc-dev@lists.ozlabs.org, Helge Deller <deller@gmx.de>
Subject: [PATCH 08/44] kernel: Move pm_power_off to common code
Date: Mon, 6 Oct 2014 22:28:10 -0700 [thread overview]
Message-ID: <1412659726-29957-9-git-send-email-linux@roeck-us.net> (raw)
In-Reply-To: <1412659726-29957-1-git-send-email-linux@roeck-us.net>
pm_power_off is defined for all architectures. Move it to common code.
Have all architectures call do_kernel_poweroff instead of pm_power_off.
Some architectures point pm_power_off to machine_power_off. For those,
call do_kernel_poweroff from machine_power_off instead.
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Haavard Skinnemoen <hskinnemoen@gmail.com>
Cc: Hans-Christian Egtvedt <egtvedt@samfundet.no>
Cc: Steven Miao <realmz6@gmail.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: Aurelien Jacquiot <a-jacquiot@ti.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Richard Kuo <rkuo@codeaurora.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Koichi Yasutake <yasutake.koichi@jp.panasonic.com>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: James E.J. Bottomley <jejb@parisc-linux.org>
Cc: Helge Deller <deller@gmx.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Chen Liqin <liqin.linux@gmail.com>
Cc: Lennox Wu <lennox.wu@gmail.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Chris Zankel <chris@zankel.net>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: Len Brown <len.brown@intel.com>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
arch/alpha/kernel/process.c | 9 +++------
arch/arc/kernel/reset.c | 5 +----
arch/arm/kernel/process.c | 5 +----
arch/arm64/kernel/process.c | 5 +----
arch/avr32/kernel/process.c | 6 +-----
arch/blackfin/kernel/process.c | 3 ---
arch/blackfin/kernel/reboot.c | 2 ++
arch/c6x/kernel/process.c | 9 +--------
arch/cris/kernel/process.c | 4 +---
arch/frv/kernel/process.c | 5 ++---
arch/hexagon/kernel/reset.c | 5 ++---
arch/ia64/kernel/process.c | 5 +----
arch/m32r/kernel/process.c | 8 ++++----
arch/m68k/kernel/process.c | 6 +-----
arch/metag/kernel/process.c | 6 +-----
arch/microblaze/kernel/process.c | 3 ---
arch/microblaze/kernel/reset.c | 1 +
arch/mips/kernel/reset.c | 6 +-----
arch/mn10300/kernel/process.c | 8 ++------
arch/openrisc/kernel/process.c | 8 +++++---
arch/parisc/kernel/process.c | 8 ++++----
arch/powerpc/kernel/setup-common.c | 6 +++---
arch/s390/kernel/setup.c | 8 ++------
arch/score/kernel/process.c | 8 ++++----
arch/sh/kernel/reboot.c | 6 +-----
arch/sparc/kernel/process_32.c | 10 ++--------
arch/sparc/kernel/reboot.c | 8 ++------
arch/tile/kernel/reboot.c | 7 +++----
arch/um/kernel/reboot.c | 2 --
arch/unicore32/kernel/process.c | 9 +--------
arch/x86/kernel/reboot.c | 11 +++--------
arch/x86/xen/enlighten.c | 3 +--
arch/xtensa/kernel/process.c | 4 ----
drivers/parisc/power.c | 3 +--
kernel/power/poweroff_handler.c | 8 ++++++++
kernel/reboot.c | 4 ++--
36 files changed, 68 insertions(+), 146 deletions(-)
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c
index 1941a07..a463e8f 100644
--- a/arch/alpha/kernel/process.c
+++ b/arch/alpha/kernel/process.c
@@ -24,6 +24,7 @@
#include <linux/vt.h>
#include <linux/mman.h>
#include <linux/elfcore.h>
+#include <linux/pm.h>
#include <linux/reboot.h>
#include <linux/tty.h>
#include <linux/console.h>
@@ -40,12 +41,6 @@
#include "proto.h"
#include "pci_impl.h"
-/*
- * Power off function, if any
- */
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL(pm_power_off);
-
#ifdef CONFIG_ALPHA_WTINT
/*
* Sleep the CPU.
@@ -184,6 +179,8 @@ machine_halt(void)
void
machine_power_off(void)
{
+ do_kernel_poweroff();
+
common_shutdown(LINUX_REBOOT_CMD_POWER_OFF, NULL);
}
diff --git a/arch/arc/kernel/reset.c b/arch/arc/kernel/reset.c
index 2768fa1..8a4fc47 100644
--- a/arch/arc/kernel/reset.c
+++ b/arch/arc/kernel/reset.c
@@ -26,9 +26,6 @@ void machine_restart(char *__unused)
void machine_power_off(void)
{
- /* FIXME :: power off ??? */
+ do_kernel_poweroff();
machine_halt();
}
-
-void (*pm_power_off) (void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 9fced7b..954e79c 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -117,8 +117,6 @@ void soft_restart(unsigned long addr)
/*
* Function pointers to optional machine specific functions
*/
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
@@ -205,8 +203,7 @@ void machine_power_off(void)
local_irq_disable();
smp_send_stop();
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
}
/*
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index e0ef8ba..db396bb 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -94,8 +94,6 @@ void soft_restart(unsigned long addr)
/*
* Function pointers to optional machine specific functions
*/
-void (*pm_power_off)(void);
-EXPORT_SYMBOL_GPL(pm_power_off);
void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
@@ -155,8 +153,7 @@ void machine_power_off(void)
{
local_irq_disable();
smp_send_stop();
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
}
/*
diff --git a/arch/avr32/kernel/process.c b/arch/avr32/kernel/process.c
index 42a53e74..c6774d8 100644
--- a/arch/avr32/kernel/process.c
+++ b/arch/avr32/kernel/process.c
@@ -23,9 +23,6 @@
#include <mach/pm.h>
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
/*
* This file handles the architecture-dependent parts of process handling..
*/
@@ -48,8 +45,7 @@ void machine_halt(void)
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
}
void machine_restart(char *cmd)
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c
index 4aa5545..812dd83 100644
--- a/arch/blackfin/kernel/process.c
+++ b/arch/blackfin/kernel/process.c
@@ -39,9 +39,6 @@ int nr_l1stack_tasks;
void *l1_stack_base;
unsigned long l1_stack_len;
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
-
/*
* The idle loop on BFIN
*/
diff --git a/arch/blackfin/kernel/reboot.c b/arch/blackfin/kernel/reboot.c
index c4f50a3..1da27d1 100644
--- a/arch/blackfin/kernel/reboot.c
+++ b/arch/blackfin/kernel/reboot.c
@@ -7,6 +7,7 @@
*/
#include <linux/interrupt.h>
+#include <linux/pm.h>
#include <asm/bfin-global.h>
#include <asm/reboot.h>
#include <asm/bfrom.h>
@@ -106,6 +107,7 @@ void machine_halt(void)
__attribute__((weak))
void native_machine_power_off(void)
{
+ do_kernel_poweroff();
idle_with_irq_disabled();
}
diff --git a/arch/c6x/kernel/process.c b/arch/c6x/kernel/process.c
index 57d2ea8..ddc4a61 100644
--- a/arch/c6x/kernel/process.c
+++ b/arch/c6x/kernel/process.c
@@ -27,12 +27,6 @@ void (*c6x_halt)(void);
extern asmlinkage void ret_from_fork(void);
extern asmlinkage void ret_from_kernel_thread(void);
-/*
- * power off function, if any
- */
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
void arch_cpu_idle(void)
{
unsigned long tmp;
@@ -73,8 +67,7 @@ void machine_halt(void)
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
halt_loop();
}
diff --git a/arch/cris/kernel/process.c b/arch/cris/kernel/process.c
index b78498e..eaafad0 100644
--- a/arch/cris/kernel/process.c
+++ b/arch/cris/kernel/process.c
@@ -31,9 +31,6 @@
extern void default_idle(void);
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
void arch_cpu_idle(void)
{
default_idle();
@@ -60,6 +57,7 @@ void machine_halt(void)
void machine_power_off(void)
{
+ do_kernel_poweroff();
}
/*
diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c
index 5d40aeb77..a673725 100644
--- a/arch/frv/kernel/process.c
+++ b/arch/frv/kernel/process.c
@@ -42,9 +42,6 @@ asmlinkage void ret_from_kernel_thread(void);
#include <asm/pgalloc.h>
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
static void core_sleep_idle(void)
{
#ifdef LED_DEBUG_SLEEP
@@ -107,6 +104,8 @@ void machine_power_off(void)
gdbstub_exit(0);
#endif
+ do_kernel_poweroff();
+
for (;;);
}
diff --git a/arch/hexagon/kernel/reset.c b/arch/hexagon/kernel/reset.c
index 76483c1..cfb8e3663 100644
--- a/arch/hexagon/kernel/reset.c
+++ b/arch/hexagon/kernel/reset.c
@@ -16,11 +16,13 @@
* 02110-1301, USA.
*/
+#include <linux/pm.h>
#include <linux/smp.h>
#include <asm/hexagon_vm.h>
void machine_power_off(void)
{
+ do_kernel_poweroff();
smp_send_stop();
__vmstop();
}
@@ -32,6 +34,3 @@ void machine_halt(void)
void machine_restart(char *cmd)
{
}
-
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index deed6fa..ac68302 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -57,8 +57,6 @@ void (*ia64_mark_idle)(int);
unsigned long boot_option_idle_override = IDLE_NO_OVERRIDE;
EXPORT_SYMBOL(boot_option_idle_override);
-void (*pm_power_off) (void);
-EXPORT_SYMBOL(pm_power_off);
void
ia64_do_show_stack (struct unw_frame_info *info, void *arg)
@@ -675,8 +673,7 @@ machine_halt (void)
void
machine_power_off (void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
machine_halt();
}
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
index e69221d..b71c852 100644
--- a/arch/m32r/kernel/process.c
+++ b/arch/m32r/kernel/process.c
@@ -23,6 +23,7 @@
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/module.h>
+#include <linux/pm.h>
#include <linux/ptrace.h>
#include <linux/unistd.h>
#include <linux/hardirq.h>
@@ -44,9 +45,6 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
return tsk->thread.lr;
}
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
-
void machine_restart(char *__unused)
{
#if defined(CONFIG_PLAT_MAPPI3)
@@ -67,7 +65,9 @@ void machine_halt(void)
void machine_power_off(void)
{
- /* M32R_FIXME */
+ do_kernel_poweroff();
+ for (;;)
+ ;
}
void show_regs(struct pt_regs * regs)
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c
index afe3d6e..f2c02fe 100644
--- a/arch/m68k/kernel/process.c
+++ b/arch/m68k/kernel/process.c
@@ -78,14 +78,10 @@ void machine_halt(void)
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
for (;;);
}
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL(pm_power_off);
-
void show_regs(struct pt_regs * regs)
{
printk("\n");
diff --git a/arch/metag/kernel/process.c b/arch/metag/kernel/process.c
index 483dff9..d725043 100644
--- a/arch/metag/kernel/process.c
+++ b/arch/metag/kernel/process.c
@@ -67,9 +67,6 @@ void arch_cpu_idle_dead(void)
}
#endif
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
void (*soc_restart)(char *cmd);
void (*soc_halt)(void);
@@ -90,8 +87,7 @@ void machine_halt(void)
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
smp_send_stop();
hard_processor_halt(HALT_OK);
}
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c
index b2dd371..0ebca36 100644
--- a/arch/microblaze/kernel/process.c
+++ b/arch/microblaze/kernel/process.c
@@ -44,9 +44,6 @@ void show_regs(struct pt_regs *regs)
regs->msr, regs->ear, regs->esr, regs->fsr);
}
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
-
void flush_thread(void)
{
}
diff --git a/arch/microblaze/kernel/reset.c b/arch/microblaze/kernel/reset.c
index fbe58c6..9498ee7 100644
--- a/arch/microblaze/kernel/reset.c
+++ b/arch/microblaze/kernel/reset.c
@@ -103,6 +103,7 @@ void machine_halt(void)
void machine_power_off(void)
{
pr_notice("Machine power off...\n");
+ do_kernel_poweroff();
while (1)
;
}
diff --git a/arch/mips/kernel/reset.c b/arch/mips/kernel/reset.c
index 07fc524..f5e134d 100644
--- a/arch/mips/kernel/reset.c
+++ b/arch/mips/kernel/reset.c
@@ -21,9 +21,6 @@
*/
void (*_machine_restart)(char *command);
void (*_machine_halt)(void);
-void (*pm_power_off)(void);
-
-EXPORT_SYMBOL(pm_power_off);
void machine_restart(char *command)
{
@@ -39,6 +36,5 @@ void machine_halt(void)
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
}
diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c
index 3707da5..00d8b61 100644
--- a/arch/mn10300/kernel/process.c
+++ b/arch/mn10300/kernel/process.c
@@ -20,6 +20,7 @@
#include <linux/user.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
+#include <linux/pm.h>
#include <linux/reboot.h>
#include <linux/percpu.h>
#include <linux/err.h>
@@ -45,12 +46,6 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
}
/*
- * power off function, if any
- */
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
-/*
* On SMP it's slightly faster (but much more power-consuming!)
* to poll the ->work.need_resched flag instead of waiting for the
* cross-CPU IPI to arrive. Use this option with caution.
@@ -93,6 +88,7 @@ void machine_power_off(void)
#ifdef CONFIG_KERNEL_DEBUGGER
gdbstub_exit(0);
#endif
+ do_kernel_poweroff();
}
void show_regs(struct pt_regs *regs)
diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c
index 386af25..f3ad1bc 100644
--- a/arch/openrisc/kernel/process.c
+++ b/arch/openrisc/kernel/process.c
@@ -25,6 +25,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mm.h>
+#include <linux/pm.h>
#include <linux/stddef.h>
#include <linux/unistd.h>
#include <linux/ptrace.h>
@@ -51,7 +52,7 @@
*/
struct thread_info *current_thread_info_set[NR_CPUS] = { &init_thread_info, };
-void machine_restart(void)
+void machine_restart(char *cmd)
{
printk(KERN_INFO "*** MACHINE RESTART ***\n");
__asm__("l.nop 1");
@@ -72,11 +73,12 @@ void machine_halt(void)
void machine_power_off(void)
{
printk(KERN_INFO "*** MACHINE POWER OFF ***\n");
+
+ do_kernel_poweroff();
+
__asm__("l.nop 1");
}
-void (*pm_power_off) (void) = machine_power_off;
-
/*
* When a process does an "exec", machine state like FPU and debug
* registers need to be reset. This is a hook function for that.
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 0bbbf0d..5f1d2af 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -41,6 +41,7 @@
#include <linux/fs.h>
#include <linux/module.h>
#include <linux/personality.h>
+#include <linux/pm.h>
#include <linux/ptrace.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -133,7 +134,9 @@ void machine_power_off(void)
pdc_soft_power_button(0);
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_SHUTDOWN);
-
+
+ do_kernel_poweroff();
+
/* It seems we have no way to power the system off via
* software. The user has to press the button himself. */
@@ -141,9 +144,6 @@ void machine_power_off(void)
"Please power this system off now.");
}
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL(pm_power_off);
-
/*
* Free current thread data structures etc..
*/
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 1b0e260..b6b5fcb 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -140,6 +140,9 @@ void machine_power_off(void)
machine_shutdown();
if (ppc_md.power_off)
ppc_md.power_off();
+
+ do_kernel_poweroff();
+
#ifdef CONFIG_SMP
smp_send_stop();
#endif
@@ -150,9 +153,6 @@ void machine_power_off(void)
/* Used by the G5 thermal driver */
EXPORT_SYMBOL_GPL(machine_power_off);
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL_GPL(pm_power_off);
-
void machine_halt(void)
{
machine_shutdown();
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 82bc113..1fa182f 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -263,13 +263,9 @@ void machine_power_off(void)
*/
console_unblank();
_machine_power_off();
-}
-/*
- * Dummy power off function.
- */
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL_GPL(pm_power_off);
+ do_kernel_poweroff();
+}
static int __init early_parse_mem(char *p)
{
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index a1519ad3..cf9531a 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -29,9 +29,6 @@
#include <linux/pm.h>
#include <linux/rcupdate.h>
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
/* If or when software machine-restart is implemented, add code here. */
void machine_restart(char *command) {}
@@ -39,7 +36,10 @@ void machine_restart(char *command) {}
void machine_halt(void) {}
/* If or when software machine-power-off is implemented, add code here. */
-void machine_power_off(void) {}
+void machine_power_off(void)
+{
+ do_kernel_poweroff();
+}
void ret_from_fork(void);
void ret_from_kernel_thread(void);
diff --git a/arch/sh/kernel/reboot.c b/arch/sh/kernel/reboot.c
index 04afe5b..e59b2aa 100644
--- a/arch/sh/kernel/reboot.c
+++ b/arch/sh/kernel/reboot.c
@@ -11,9 +11,6 @@
#include <asm/tlbflush.h>
#include <asm/traps.h>
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
#ifdef CONFIG_SUPERH32
static void watchdog_trigger_immediate(void)
{
@@ -51,8 +48,7 @@ static void native_machine_shutdown(void)
static void native_machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
}
static void native_machine_halt(void)
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index 50e7b62..3138191 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -48,14 +48,6 @@
*/
void (*sparc_idle)(void);
-/*
- * Power-off handler instantiation for pm.h compliance
- * This is done via auxio, but could be used as a fallback
- * handler when auxio is not present-- unused for now...
- */
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL(pm_power_off);
-
/*
* sysctl - toggle power-off restriction for serial console
* systems in machine_power_off()
@@ -112,6 +104,8 @@ void machine_power_off(void)
sbus_writeb(power_register, auxio_power_register);
}
+ do_kernel_poweroff();
+
machine_halt();
}
diff --git a/arch/sparc/kernel/reboot.c b/arch/sparc/kernel/reboot.c
index eba7d91..6717c5d 100644
--- a/arch/sparc/kernel/reboot.c
+++ b/arch/sparc/kernel/reboot.c
@@ -16,17 +16,13 @@
*/
int scons_pwroff = 1;
-/* This isn't actually used, it exists merely to satisfy the
- * reference in kernel/sys.c
- */
-void (*pm_power_off)(void) = machine_power_off;
-EXPORT_SYMBOL(pm_power_off);
-
void machine_power_off(void)
{
if (strcmp(of_console_device->type, "serial") || scons_pwroff)
prom_halt_power_off();
+ do_kernel_poweroff();
+
prom_halt();
}
diff --git a/arch/tile/kernel/reboot.c b/arch/tile/kernel/reboot.c
index 6c5d2c0..706d3bd 100644
--- a/arch/tile/kernel/reboot.c
+++ b/arch/tile/kernel/reboot.c
@@ -36,6 +36,9 @@ void machine_power_off(void)
{
arch_local_irq_disable_all();
smp_send_stop();
+
+ do_kernel_poweroff();
+
hv_power_off();
}
@@ -45,7 +48,3 @@ void machine_restart(char *cmd)
smp_send_stop();
hv_restart((HV_VirtAddr) "vmlinux", (HV_VirtAddr) cmd);
}
-
-/* No interesting distinction to be made here. */
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c
index ced8903..a82ef28 100644
--- a/arch/um/kernel/reboot.c
+++ b/arch/um/kernel/reboot.c
@@ -11,8 +11,6 @@
#include <os.h>
#include <skas.h>
-void (*pm_power_off)(void);
-
static void kill_off_processes(void)
{
if (proc_mm)
diff --git a/arch/unicore32/kernel/process.c b/arch/unicore32/kernel/process.c
index b008e99..2d5d522 100644
--- a/arch/unicore32/kernel/process.c
+++ b/arch/unicore32/kernel/process.c
@@ -56,16 +56,9 @@ void machine_halt(void)
gpio_set_value(GPO_SOFT_OFF, 0);
}
-/*
- * Function pointers to optional machine specific functions
- */
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
-
void machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
machine_halt();
}
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 17962e6..7a5cc87 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -30,12 +30,6 @@
#include <asm/x86_init.h>
#include <asm/efi.h>
-/*
- * Power off function, if any
- */
-void (*pm_power_off)(void);
-EXPORT_SYMBOL(pm_power_off);
-
static const struct desc_ptr no_idt = {};
/*
@@ -647,11 +641,12 @@ static void native_machine_halt(void)
static void native_machine_power_off(void)
{
- if (pm_power_off) {
+ if (have_kernel_poweroff()) {
if (!reboot_force)
machine_shutdown();
- pm_power_off();
+ do_kernel_poweroff();
}
+
/* A fallback in case there is no PM info available */
tboot_shutdown(TB_SHUTDOWN_HALT);
}
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index c0cb11f..ab8e056 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1320,8 +1320,7 @@ static void xen_machine_halt(void)
static void xen_machine_power_off(void)
{
- if (pm_power_off)
- pm_power_off();
+ do_kernel_poweroff();
xen_reboot(SHUTDOWN_poweroff);
}
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index 1c85323..c487296 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -49,10 +49,6 @@ extern void ret_from_kernel_thread(void);
struct task_struct *current_set[NR_CPUS] = {&init_task, };
-void (*pm_power_off)(void) = NULL;
-EXPORT_SYMBOL(pm_power_off);
-
-
#if XTENSA_HAVE_COPROCESSORS
void coprocessor_release_all(struct thread_info *ti)
diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c
index 90cca5e..de5b2ff 100644
--- a/drivers/parisc/power.c
+++ b/drivers/parisc/power.c
@@ -95,8 +95,7 @@ static void process_shutdown(void)
/* send kill signal */
if (kill_cad_pid(SIGINT, 1)) {
/* just in case killing init process failed */
- if (pm_power_off)
- pm_power_off();
+ kernel_power_off();
}
}
}
diff --git a/kernel/power/poweroff_handler.c b/kernel/power/poweroff_handler.c
index ed99e5e..96f59ef 100644
--- a/kernel/power/poweroff_handler.c
+++ b/kernel/power/poweroff_handler.c
@@ -20,6 +20,12 @@
#include <linux/types.h>
/*
+ * If set, calling this function will power off the system immediately.
+ */
+void (*pm_power_off)(void);
+EXPORT_SYMBOL(pm_power_off);
+
+/*
* Notifier list for kernel code which wants to be called
* to power off the system.
*/
@@ -157,6 +163,8 @@ int register_poweroff_handler_simple(void (*handler)(void), int priority)
*/
void do_kernel_poweroff(void)
{
+ if (pm_power_off)
+ pm_power_off();
atomic_notifier_call_chain(&poweroff_handler_list, 0, NULL);
}
diff --git a/kernel/reboot.c b/kernel/reboot.c
index 5925f5a..897e275 100644
--- a/kernel/reboot.c
+++ b/kernel/reboot.c
@@ -306,9 +306,9 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
return ret;
/* Instead of trying to make the power_off code look like
- * halt when pm_power_off is not set do it the easy way.
+ * halt when no poweroff handler exists do it the easy way.
*/
- if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off)
+ if (cmd == LINUX_REBOOT_CMD_POWER_OFF && !have_kernel_poweroff())
cmd = LINUX_REBOOT_CMD_HALT;
mutex_lock(&reboot_mutex);
--
1.9.1
next prev parent reply other threads:[~2014-10-07 5:29 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-07 5:28 [PATCH 00/44] kernel: Add support for poweroff handler call chain Guenter Roeck
2014-10-07 5:28 ` [PATCH 01/44] " Guenter Roeck
2014-10-07 7:46 ` Philippe Rétornaz
2014-10-09 10:31 ` Pavel Machek
2014-10-09 15:38 ` Guenter Roeck
2014-10-09 11:31 ` Geert Uytterhoeven
2014-10-09 13:25 ` Guenter Roeck
2015-06-18 1:04 ` Stephen Boyd
2015-06-18 6:53 ` Frans Klaver
2015-06-18 11:54 ` Guenter Roeck
2015-06-18 12:14 ` Frans Klaver
2015-06-18 15:30 ` Guenter Roeck
2015-06-18 21:40 ` Stephen Boyd
2014-10-07 5:28 ` [PATCH 02/44] memory: emif: Use API function to determine poweroff capability Guenter Roeck
2014-10-07 5:28 ` [PATCH 03/44] hibernate: Call have_kernel_poweroff instead of checking pm_power_off Guenter Roeck
2014-10-07 23:41 ` Rafael J. Wysocki
2014-10-09 10:32 ` Pavel Machek
2014-10-09 13:24 ` Guenter Roeck
2014-10-07 5:28 ` [PATCH 04/44] m68k: Replace mach_power_off with pm_power_off Guenter Roeck
2014-10-07 8:29 ` Geert Uytterhoeven
2014-10-07 5:28 ` [PATCH 05/44] mfd: as3722: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-10-07 10:59 ` Mark Rutland
2014-10-07 16:21 ` Rob Landley
2014-10-07 16:31 ` Guenter Roeck
2014-10-07 16:59 ` David Daney
2014-10-07 17:10 ` Rob Landley
2014-10-07 16:58 ` Mark Rutland
2014-10-07 5:28 ` [PATCH 06/44] gpio-poweroff: " Guenter Roeck
2014-10-07 11:03 ` Mark Rutland
2014-10-07 15:50 ` Andrew Lunn
2014-10-07 5:28 ` [PATCH 07/44] qnap-poweroff: " Guenter Roeck
2014-10-07 11:02 ` Mark Rutland
2014-10-07 15:57 ` Guenter Roeck
2014-10-07 15:51 ` Andrew Lunn
2014-10-07 5:28 ` Guenter Roeck [this message]
2014-10-07 8:32 ` [PATCH 08/44] kernel: Move pm_power_off to common code Geert Uytterhoeven
2014-10-07 13:58 ` Richard Weinberger
2014-10-07 23:42 ` Rafael J. Wysocki
2014-10-08 7:25 ` Jesper Nilsson
2014-10-08 11:06 ` 回复: " Xuetao Guan
2014-10-09 10:28 ` Catalin Marinas
2014-10-09 10:35 ` Vineet Gupta
2014-10-09 10:38 ` Pavel Machek
2014-10-09 13:14 ` Guenter Roeck
2014-10-09 20:24 ` Pavel Machek
2014-10-10 16:53 ` Guenter Roeck
2014-10-14 4:29 ` Hirokazu TAKATA
2014-10-07 5:28 ` [PATCH 09/44] mfd: palmas: Register with kernel poweroff handler Guenter Roeck
2014-10-07 5:28 ` [PATCH 10/44] mfd: axp20x: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 11/44] mfd: retu: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 12/44] mfd: ab8500-sysctrl: " Guenter Roeck
2014-10-07 8:00 ` Lee Jones
2014-10-09 10:36 ` Catalin Marinas
2014-10-09 10:49 ` Lee Jones
2014-10-09 13:26 ` Guenter Roeck
2014-10-09 13:33 ` Lee Jones
2014-10-09 15:45 ` Guenter Roeck
2014-10-09 15:54 ` Guenter Roeck
2014-10-07 5:28 ` [PATCH 13/44] mfd: max8907: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 14/44] mfd: tps80031: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 15/44] mfd: dm355evm_msp: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 16/44] mfd: tps6586x: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 17/44] mfd: tps65910: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 18/44] mfd: twl4030-power: " Guenter Roeck
2014-10-07 7:52 ` Lee Jones
2014-10-07 5:28 ` [PATCH 19/44] ipmi: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 20/44] power/reset: restart-poweroff: " Guenter Roeck
2014-10-07 16:06 ` Andrew Lunn
2014-10-07 5:28 ` [PATCH 21/44] power/reset: gpio-poweroff: " Guenter Roeck
2014-10-07 16:00 ` Andrew Lunn
2014-10-07 5:28 ` [PATCH 22/44] power/reset: as3722-poweroff: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 23/44] power/reset: qnap-poweroff: " Guenter Roeck
2014-10-07 16:02 ` Andrew Lunn
2014-10-07 5:28 ` [PATCH 24/44] power/reset: msm-powroff: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 25/44] power/reset: vexpress-poweroff: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 26/44] x86: iris: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 27/44] x86: apm: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 28/44] x86: olpc: Register xo1 poweroff handler " Guenter Roeck
2014-10-07 5:28 ` [PATCH 29/44] staging: nvec: Register " Guenter Roeck
2014-10-07 16:23 ` Greg Kroah-Hartman
2014-10-07 5:28 ` [PATCH 30/44] acpi: Register poweroff handler " Guenter Roeck
2014-10-07 5:28 ` [PATCH 31/44] arm: Register " Guenter Roeck
2014-10-07 8:04 ` Nicolas Ferre
2014-10-07 5:28 ` [PATCH 32/44] arm64: psci: " Guenter Roeck
2014-10-09 10:41 ` Catalin Marinas
2014-10-07 5:28 ` [PATCH 33/44] avr32: atngw100: " Guenter Roeck
2014-11-01 10:16 ` Hans-Christian Egtvedt
2014-11-01 17:02 ` Guenter Roeck
2014-10-07 5:28 ` [PATCH 34/44] ia64: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 35/44] m68k: " Guenter Roeck
2014-10-07 9:19 ` Geert Uytterhoeven
2014-10-07 5:28 ` [PATCH 36/44] mips: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 37/44] sh: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 38/44] x86: lguest: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 39/44] x86: ce4100: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 40/44] x86: intel-mid: Drop registration of dummy poweroff handlers Guenter Roeck
2014-10-07 5:28 ` [PATCH 41/44] x86: pmc_atom: Register poweroff handler with kernel poweroff handler Guenter Roeck
2014-10-07 5:28 ` [PATCH 42/44] efi: " Guenter Roeck
2014-10-07 5:28 ` [PATCH 43/44] hwmon: (ab8500) Call kernel_power_off instead of pm_power_off Guenter Roeck
2014-10-07 5:28 ` [PATCH 44/44] kernel: Remove pm_power_off Guenter Roeck
2014-10-07 23:43 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1412659726-29957-9-git-send-email-linux@roeck-us.net \
--to=linux@roeck-us.net \
--cc=a-jacquiot@ti.com \
--cc=adi-buildroot-devel@lists.sourceforge.net \
--cc=boris.ostrovsky@oracle.com \
--cc=catalin.marinas@arm.com \
--cc=chris@zankel.net \
--cc=cmetcalf@tilera.com \
--cc=davem@davemloft.net \
--cc=david.vrabel@citrix.com \
--cc=deller@gmx.de \
--cc=devel@driverdev.osuosl.org \
--cc=devicetree@vger.kernel.org \
--cc=dhowells@redhat.com \
--cc=egtvedt@samfundet.no \
--cc=fenghua.yu@intel.com \
--cc=geert@linux-m68k.org \
--cc=gxt@mprc.pku.edu.cn \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=hskinnemoen@gmail.com \
--cc=ink@jurassic.park.msu.ru \
--cc=james.hogan@imgtec.com \
--cc=jcmvbkbc@gmail.com \
--cc=jdike@addtoit.com \
--cc=jejb@parisc-linux.org \
--cc=jesper.nilsson@axis.com \
--cc=jonas@southpole.se \
--cc=konrad.wilk@oracle.com \
--cc=len.brown@intel.com \
--cc=lennox.wu@gmail.com \
--cc=lguest@lists.ozlabs.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-am33-list@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-c6x-dev@linux-c6x.org \
--cc=linux-cris-kernel@axis.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-hexagon@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m32r-ja@ml.linux-m32r.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-metag@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=linux@arm.linux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=liqin.linux@gmail.com \
--cc=mattst88@gmail.com \
--cc=mingo@redhat.com \
--cc=monstr@monstr.eu \
--cc=msalter@redhat.com \
--cc=openipmi-developer@lists.sourceforge.net \
--cc=paulus@samba.org \
--cc=pavel@ucw.cz \
--cc=ralf@linux-mips.org \
--cc=realmz6@gmail.com \
--cc=richard@nod.at \
--cc=rjw@rjwysocki.net \
--cc=rkuo@codeaurora.org \
--cc=rth@twiddle.net \
--cc=schwidefsky@de.ibm.com \
--cc=starvik@axis.com \
--cc=takata@linux-m32r.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=user-mode-linux-devel@lists.sourceforge.net \
--cc=vgupta@synopsys.com \
--cc=will.deacon@arm.com \
--cc=xen-devel@lists.xenproject.org \
--cc=yasutake.koichi@jp.panasonic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).