diff options
author | Arto Merilainen <amerilainen@nvidia.com> | 2013-11-12 14:57:58 +0200 |
---|---|---|
committer | Laxman Dewangan <ldewangan@nvidia.com> | 2013-11-17 22:47:00 -0800 |
commit | 9619b55ca8439fb3c0333057a211796d175198ba (patch) | |
tree | 900a2b0e409c236c429b238da373caff05ed777e /arch/arm/kernel | |
parent | 9f87723265a3d26b96fd6cc4ef93139eb7558113 (diff) |
ARM: kernel: Power off in atomic context
This far the device has been powered off in non-atomic context.
This caused unexpected results when the kernel pre-empted the
power off sequence and started running some completely unrelated
task at the very same time. In addition, IRQs were enabled all
time allowing spontaneous interruption of the power off sequence.
This patch modifies the power off to happen in atomic context.
Bug 1399353
Change-Id: If2bea252c6ed774b63e20e8576f42d77dfcd80f1
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/329636
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-by: Seema Khowala <seemaj@nvidia.com>
Tested-by: Seema Khowala <seemaj@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/process.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index c9749506b8e7..bd53e5a63e21 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -272,6 +272,8 @@ void machine_halt(void) */ void machine_power_off(void) { + local_irq_disable(); + preempt_disable(); smp_send_stop(); if (pm_power_off) |