[rtc-linux] [PATCH v3 1/5] rtc: OMAP: Add system pm_power_off to rtc driver
Russell King - ARM Linux
linux at arm.linux.org.uk
Wed Nov 28 06:12:26 EST 2012
On Tue, Nov 27, 2012 at 03:42:39PM -0800, Andrew Morton wrote:
> > + /* Do not allow to execute any other task */
> > + spin_lock_irqsave(&lock, flags);
> > + while (1);
>
> I suspect this doesn't do what you want it to do.
>
> Firstly, please provide adequate code comments here so that code
> readers do not also need to be mind readers.
>
> If you want to stop this CPU dead in its tracks (why?) then
>
> local_irq_disable();
> while (1)
> ; /* Note correct code layout */
>
> will do it. But it means that the NMI watchdog (if present) will come
> along and whack the machine in the head a few seconds later. And this
> does nothing to stop other CPUs.
>
> But not being a mind reader, I'm really at a loss to suggest what
> should be done here.
It's hooking into the pm_power_off hook, which is called from kernel/sys.c
via arch code. We will have already stopped all other CPUs at this point.
Why there's that while (1) there I don't know; when pm_power_off is not
hooked, we don't do anything like that - and what will happen in that
case is we'll return all the way back to sys_reboot(), which will call
do_exit(0) on us.
I don't see a problem with that, and I don't see why we need to spin
(without any power saving too) waiting for some event. If we've called
sys_reboot with LINUX_REBOOT_CMD_POWER_OFF, we'd better have already
killed most of userspace off by that time anyway.
More information about the linux-arm-kernel
mailing list