Re: [REGRESSION] rtc/interface.c: kills suspend-to-ram

From: Mark Lord
Date: Mon Apr 16 2012 - 22:30:43 EST


On 12-04-16 05:43 PM, John Stultz wrote:
> On 04/16/2012 12:45 PM, John Stultz wrote:
>> On 04/16/2012 08:57 AM, Mark Lord wrote:
>>> On 12-04-16 11:49 AM, richard -rw- weinberger wrote:
>>>> On Mon, Apr 16, 2012 at 5:42 PM, Mark Lord<kernel@xxxxxxxxxxxx> wrote:
>>>>> On 12-04-16 10:23 AM, richard -rw- weinberger wrote:
>>>>>> On Mon, Apr 16, 2012 at 3:55 PM, Mark Lord<kernel@xxxxxxxxxxxx> wrote:
>>>>>>> On 12-04-16 12:36 AM, Mark Lord wrote:
>>>>>>>> Something recent has killed suspend-to-ram on a number of machines here.
>>>>>>>> The symptom is that they suspend, but immediately wake up and panic,
>>>>>>>> with just a black screen so no visible messages to go by.
>>>>>>>>
>>>>>>>> The patch below works around the issue -- making things work as they used to work.
>>>>>>>>
>>>>>>>> +++ linux/drivers/rtc/interface.c 2012-04-16 00:09:14.105387382 -0400
>>>>>>>> @@ -773,7 +773,7 @@
>>>>>>>> if (!rtc->ops || !rtc->ops->alarm_irq_enable)
>>>>>>>> return;
>>>>>>>>
>>>>>>>> - rtc->ops->alarm_irq_enable(rtc->dev.parent, false);
>>>>>>>> + //rtc->ops->alarm_irq_enable(rtc->dev.parent, false); // Kills suspend on ZBOX HD-ID41U
>>>>>>>> }
>>>>>
>>>>> How about the line above -- that's the commit that breaks things here.
>>>> Download Linus' GIT tree and use git blame. :-)
>>> Too steep a learning curve for a casual user.
>>> But google works:
>>>
>>> http://www.mail-archive.com/stable@xxxxxxxxxxxxxxx/msg04391.html
>>
>> Thanks for the report and sorry for the trouble. I'm trying to reproduce this locally. Can you
>> send me your .config?
>
> Ok, so far I've not been able to reproduce anything like this with my atom x86_64 system (done a
> number of suspends both with and without RTC alarms queued to wake the system up). Can you provide
> any more details about how you're triggering suspend when you see the problem?
> Do you have an RTC alarm set for some future time to wake up the system?
> I'm just trying to understand when rtc_alarm_disable is being called and causing the trouble in your
> case.
>
> The original related issue with the earlier version of this patch was some hardware would wake up
> immediately after suspend if the rtc was set in the past (which is what was done to "disable" the
> alarm). I suspect there is a similar hardware quirk we're dealing with that may require extra logic
> in the rtc-cmos.c alarm_irq_enable() function.


Thanks for looking into it, John.

I also spent many more hours digging away at it here today,
and I now understand (mostly) what is happening and why.

The code above introduces a new access to the RTC that never existed before.
For the case where the Alarm has never been enabled by software,
I believe the code above will still try to "disable" it.
That's the new behaviour we didn't have prior to this patch.

And.. on some of the systems I'm testing on, the BIOS setup has
the RTC Alarm "enabled", which means "under BIOS control",
as opposed to "disabled" which means "under software control".

It's the "under BIOS control" systems that the above patch breaks.

So I think the code may just need to be slightly more clever,
and not disable an Alarm that was never enabled by software in the first place.

Cheers
Mark
--
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/