[PATCH] ACPI / Sleep: Consolidate suspend and hibernation routines
Colin Ian King
colin.king at canonical.com
Mon Jan 17 10:15:43 UTC 2011
On Mon, 2011-01-17 at 10:03 +0100, Stefan Bader wrote:
> Seems to do exactly what is described (plus a bit of cleanup). And given the
> soak testing the potential for regression should be low. Colin, do you happen to
> know when this was introduced?
Well, it seems to me that a lot of re-working on the kernel post May
28th could possible have introduced the bug, see commits
dd4c4f17d722ffeb2515bf781400675a30fcead7 onwards, so I suspect
pre-Maverick to be OK, but it's worth checking manually, when I've got
some free cycles today.
> Do we need to ask Rafael to send it to stable for
> more than .35?
Probably, if it applies correctly to .36, .37
>
> Stefan
>
> Acked-by: Stefan Bader <stefan.bader at canonical.com>
>
> On 01/15/2011 11:43 AM, Colin King wrote:
> > From: Rafael J. Wysocki <rjw at sisk.pl>
> >
> > BugLink: http://bugs.launchpad.net/bugs/703228
> >
> > Some hibernation and suspend routines can be merged, which reduces
> > the complexity of code a bit.
> >
> > Signed-off-by: Rafael J. Wysocki <rjw at sisk.pl>
> > Signed-off-by: Len Brown <len.brown at intel.com>
> > Signed-off-by: Colin Ian King <colin.king at canonical.com>
> > ---
> > drivers/acpi/sleep.c | 42 ++++++++++++++++--------------------------
> > 1 files changed, 16 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> > index 4882bc1..e0c08ab 100644
> > --- a/drivers/acpi/sleep.c
> > +++ b/drivers/acpi/sleep.c
> > @@ -119,6 +119,16 @@ static int acpi_pm_freeze(void)
> > }
> >
> > /**
> > + * acpi_pre_suspend - Enable wakeup devices, "freeze" EC and save NVS.
> > + */
> > +static int acpi_pm_pre_suspend(void)
> > +{
> > + acpi_pm_freeze();
> > + suspend_nvs_save();
> > + return 0;
> > +}
> > +
> > +/**
> > * __acpi_pm_prepare - Prepare the platform to enter the target state.
> > *
> > * If necessary, set the firmware waking vector and do arch-specific
> > @@ -127,11 +137,9 @@ static int acpi_pm_freeze(void)
> > static int __acpi_pm_prepare(void)
> > {
> > int error = acpi_sleep_prepare(acpi_target_sleep_state);
> > -
> > - suspend_nvs_save();
> > -
> > if (error)
> > acpi_target_sleep_state = ACPI_STATE_S0;
> > +
> > return error;
> > }
> >
> > @@ -142,9 +150,8 @@ static int __acpi_pm_prepare(void)
> > static int acpi_pm_prepare(void)
> > {
> > int error = __acpi_pm_prepare();
> > -
> > if (!error)
> > - acpi_pm_freeze();
> > + acpi_pm_pre_suspend();
> >
> > return error;
> > }
> > @@ -336,9 +343,9 @@ static struct platform_suspend_ops acpi_suspend_ops = {
> > static int acpi_suspend_begin_old(suspend_state_t pm_state)
> > {
> > int error = acpi_suspend_begin(pm_state);
> > -
> > if (!error)
> > error = __acpi_pm_prepare();
> > +
> > return error;
> > }
> >
> > @@ -349,7 +356,7 @@ static int acpi_suspend_begin_old(suspend_state_t pm_state)
> > static struct platform_suspend_ops acpi_suspend_ops_old = {
> > .valid = acpi_suspend_state_valid,
> > .begin = acpi_suspend_begin_old,
> > - .prepare_late = acpi_pm_freeze,
> > + .prepare_late = acpi_pm_pre_suspend,
> > .enter = acpi_suspend_enter,
> > .wake = acpi_suspend_finish,
> > .end = acpi_pm_end,
> > @@ -445,16 +452,6 @@ static int acpi_hibernation_begin(void)
> > return error;
> > }
> >
> > -static int acpi_hibernation_pre_snapshot(void)
> > -{
> > - int error = acpi_pm_prepare();
> > -
> > - if (!error)
> > - suspend_nvs_save();
> > -
> > - return error;
> > -}
> > -
> > static int acpi_hibernation_enter(void)
> > {
> > acpi_status status = AE_OK;
> > @@ -503,7 +500,7 @@ static void acpi_pm_thaw(void)
> > static struct platform_hibernation_ops acpi_hibernation_ops = {
> > .begin = acpi_hibernation_begin,
> > .end = acpi_pm_end,
> > - .pre_snapshot = acpi_hibernation_pre_snapshot,
> > + .pre_snapshot = acpi_pm_prepare,
> > .finish = acpi_pm_finish,
> > .prepare = acpi_pm_prepare,
> > .enter = acpi_hibernation_enter,
> > @@ -539,13 +536,6 @@ static int acpi_hibernation_begin_old(void)
> > return error;
> > }
> >
> > -static int acpi_hibernation_pre_snapshot_old(void)
> > -{
> > - acpi_pm_freeze();
> > - suspend_nvs_save();
> > - return 0;
> > -}
> > -
> > /*
> > * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has
> > * been requested.
> > @@ -553,7 +543,7 @@ static int acpi_hibernation_pre_snapshot_old(void)
> > static struct platform_hibernation_ops acpi_hibernation_ops_old = {
> > .begin = acpi_hibernation_begin_old,
> > .end = acpi_pm_end,
> > - .pre_snapshot = acpi_hibernation_pre_snapshot_old,
> > + .pre_snapshot = acpi_pm_pre_suspend,
> > .prepare = acpi_pm_freeze,
> > .finish = acpi_pm_finish,
> > .enter = acpi_hibernation_enter,
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list