summaryrefslogtreecommitdiff
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2013-11-12 14:57:58 +0200
committerLaxman Dewangan <ldewangan@nvidia.com>2013-11-17 22:47:00 -0800
commit9619b55ca8439fb3c0333057a211796d175198ba (patch)
tree900a2b0e409c236c429b238da373caff05ed777e /arch/arm/kernel
parent9f87723265a3d26b96fd6cc4ef93139eb7558113 (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.c2
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)