diff mbox

[RFC,3/6] arm: Support restart through restart notifier call chain

Message ID 1404155499-21177-4-git-send-email-linux@roeck-us.net (mailing list archive)
State New, archived
Headers show

Commit Message

Guenter Roeck June 30, 2014, 7:11 p.m. UTC
The kernel core now supports a notifier call chain for system
restart functions.

With this change, the arm_pm_restart callback is now optional,
so check if it is set before calling it.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 arch/arm/kernel/process.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Russell King - ARM Linux June 30, 2014, 7:55 p.m. UTC | #1
On Mon, Jun 30, 2014 at 12:11:36PM -0700, Guenter Roeck wrote:
> The kernel core now supports a notifier call chain for system
> restart functions.
> 
> With this change, the arm_pm_restart callback is now optional,
> so check if it is set before calling it.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
>  arch/arm/kernel/process.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
> index 81ef686..93765f2 100644
> --- a/arch/arm/kernel/process.c
> +++ b/arch/arm/kernel/process.c
> @@ -32,6 +32,7 @@
>  #include <linux/hw_breakpoint.h>
>  #include <linux/leds.h>
>  #include <linux/reboot.h>
> +#include <linux/watchdog.h>
>  
>  #include <asm/cacheflush.h>
>  #include <asm/idmap.h>
> @@ -230,7 +231,10 @@ void machine_restart(char *cmd)
>  	local_irq_disable();
>  	smp_send_stop();
>  
> -	arm_pm_restart(reboot_mode, cmd);
> +	if (arm_pm_restart)
> +		arm_pm_restart(reboot_mode, cmd);
> +
> +	blocking_notifier_call_chain(&restart_notifier_list, reboot_mode, cmd);

One or the other please, because there could (and I think there are)
some implementations which tell stuff to power down, and then continue
into the mdelay() below.  In such situations, we don't want to call
the notifier.
diff mbox

Patch

diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 81ef686..93765f2 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -32,6 +32,7 @@ 
 #include <linux/hw_breakpoint.h>
 #include <linux/leds.h>
 #include <linux/reboot.h>
+#include <linux/watchdog.h>
 
 #include <asm/cacheflush.h>
 #include <asm/idmap.h>
@@ -230,7 +231,10 @@  void machine_restart(char *cmd)
 	local_irq_disable();
 	smp_send_stop();
 
-	arm_pm_restart(reboot_mode, cmd);
+	if (arm_pm_restart)
+		arm_pm_restart(reboot_mode, cmd);
+
+	blocking_notifier_call_chain(&restart_notifier_list, reboot_mode, cmd);
 
 	/* Give a grace period for failure to restart of 1s */
 	mdelay(1000);