2008-07-25 20:27:05

by David Brownell

[permalink] [raw]
Subject: [patch 2.6.26-git] pm selftest: rtc paranoia

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)


2008-07-25 21:50:28

by Andrew Morton

[permalink] [raw]
Subject: Re: [patch 2.6.26-git] pm selftest: rtc paranoia

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?

2008-07-25 21:50:47

by Andrew Morton

[permalink] [raw]
Subject: Re: [patch 2.6.26-git] pm selftest: rtc paranoia

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.

2008-07-25 22:22:17

by David Brownell

[permalink] [raw]
Subject: Re: [patch 2.6.26-git] pm selftest: rtc paranoia

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