From: David Brownell <[email protected]>
Cope with a quirk of some RTCs (notably ACPI ones) which
aren't guaranteed to implement oneshot behavior when they
woke the system from sleeep: forcibly disable the alarm,
just in case.
Signed-off-by: David Brownell <[email protected]>
---
kernel/power/main.c | 7 +++++++
1 file changed, 7 insertions(+)
--- a/kernel/power/main.c 2008-07-22 16:38:32.000000000 -0700
+++ b/kernel/power/main.c 2008-07-22 16:39:15.000000000 -0700
@@ -635,6 +635,13 @@ static void __init test_wakealarm(struct
}
if (status < 0)
printk(err_suspend, status);
+
+ /* Some platforms can't detect that the alarm triggered the
+ * wakeup, or (accordingly) disable it after it afterwards.
+ * It's supposed to give oneshot behavior; cope.
+ */
+ alm.enabled = false;
+ rtc_set_alarm(rtc, &alm);
}
static int __init has_wakealarm(struct device *dev, void *name_ptr)
On Fri, 25 Jul 2008 13:26:51 -0700
David Brownell <[email protected]> wrote:
> From: David Brownell <[email protected]>
>
> Cope with a quirk of some RTCs (notably ACPI ones) which
> aren't guaranteed to implement oneshot behavior when they
> woke the system from sleeep: forcibly disable the alarm,
> just in case.
>
> Signed-off-by: David Brownell <[email protected]>
> ---
> kernel/power/main.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> --- a/kernel/power/main.c 2008-07-22 16:38:32.000000000 -0700
> +++ b/kernel/power/main.c 2008-07-22 16:39:15.000000000 -0700
> @@ -635,6 +635,13 @@ static void __init test_wakealarm(struct
> }
> if (status < 0)
> printk(err_suspend, status);
> +
> + /* Some platforms can't detect that the alarm triggered the
> + * wakeup, or (accordingly) disable it after it afterwards.
> + * It's supposed to give oneshot behavior; cope.
> + */
> + alm.enabled = false;
> + rtc_set_alarm(rtc, &alm);
> }
>
> static int __init has_wakealarm(struct device *dev, void *name_ptr)
I assume this fixes some reported bug? Any references?
Is this needed in 2.6.26.x? 2.6.25.x?
On Fri, 25 Jul 2008 14:49:46 -0700
Andrew Morton <[email protected]> wrote:
> > }
> > if (status < 0)
> > printk(err_suspend, status);
> > +
> > + /* Some platforms can't detect that the alarm triggered the
> > + * wakeup, or (accordingly) disable it after it afterwards.
> > + * It's supposed to give oneshot behavior; cope.
> > + */
> > + alm.enabled = false;
> > + rtc_set_alarm(rtc, &alm);
> > }
> >
> > static int __init has_wakealarm(struct device *dev, void *name_ptr)
>
> I assume this fixes some reported bug? Any references?
>
> Is this needed in 2.6.26.x? 2.6.25.x?
oh. pm-selftest is new. Ignore me.
On Friday 25 July 2008, Andrew Morton wrote:
> On Fri, 25 Jul 2008 13:26:51 -0700
> David Brownell <[email protected]> wrote:
>
> > From: David Brownell <[email protected]>
> >
> > Cope with a quirk of some RTCs (notably ACPI ones) which
> > aren't guaranteed to implement oneshot behavior when they
> > woke the system from sleeep: forcibly disable the alarm,
> > just in case.
> >
> > ...
>
> I assume this fixes some reported bug? Any references?
It's more paranoia than anything else ... I saw a version
of this with on x86, but that was because of problems in
the HPET glue (fixed by a previous patch).
> Is this needed in 2.6.26.x? 2.6.25.x?
The selftest only merged this week, so not 2.6.25;
and since it's just paranoia, it shouldn't be critical
for 2.6.26 either.
- Dave