Re: [PATCH RFC v2] PM / sleep: Fix racing timers
From: John Stultz
Date: Mon Jul 28 2014 - 15:26:17 EST
On 07/27/2014 04:18 PM, Rafael J. Wysocki wrote:
> On Friday, July 25, 2014 02:06:48 PM Soren Brinkmann wrote:
>> On platforms that do not power off during suspend, successfully entering
>> suspend races with timers.
>> The race happening in a couple of location is:
>> 1. disable IRQs (e.g. arch_suspend_disable_irqs())
>> 2. syscore_suspend()
>> -> timekeeping_suspend()
>> -> clockevents_notify(SUSPEND)
>> -> tick_suspend() (timers are turned off here)
>> 3. wfi (wait for wake-IRQ here)
>> Between steps 1 and 2 the timers can still generate interrupts that are
>> not handled and stay pending until step 3. That pending IRQ causes an
>> immediate - spurious - wake.
>> The solution is to move the clockevents suspend/resume notification
>> out of the syscore_suspend step and explictly call them at the appropriate
>> time in the suspend/hibernation paths. I.e. timers are suspend _before_
>> IRQs get disabled. And accordingly in the resume path.
>> Signed-off-by: Soren Brinkmann <soren.brinkmann@xxxxxxxxxx>
>> This is my second shot at this. I followed John's suggestion to keep the
>> timekeeping suspend where it is and just move the shutdown of the clockevent
>> devices around.
> John, what do you think?
I've not had the chance to take a closer look and do any testing. I
suspect we'll need tgxl's input here as well.
The change makes sense, but ordering modifications in this area tend to
be fragile, as there are lots of implicit dependencies.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/