Re: ACPI power off regression in 2.6.23-rc8 (NOT in rc7)

From: Alexey Starikovskiy
Date: Tue Sep 25 2007 - 08:54:20 EST


Rafael J. Wysocki wrote:
> On Tuesday, 25 September 2007 14:05, Alexey Starikovskiy wrote:
>> Rafael J. Wysocki wrote:
>>> On Tuesday, 25 September 2007 13:45, Rafael J. Wysocki wrote:
>>>> On Tuesday, 25 September 2007 11:58, Damien Wyart wrote:
>>>>>>> No, I do not have CONFIG_ACPI_SLEEP set,
>>>>>>> because I do not have CONFIG_PM_SLEEP set,
>>>>>>> because I do not want SUSPEND and/or HIBERNATION.
>>>>>> Same answer from my side: I do not have CONFIG_ACPI_SLEEP for the same
>>>>>> reason (and this worked fine without them in rc7). I do not think
>>>>>> these settings should have changed between rc7 and rc8.
>>>> Well, we haven't changed much.
>>>>
>>>>> Also, another test I just did: on another computer, rc8 is fine
>>>>> regarding ACPI power off, even if CONFIG_ACPI_SLEEP is not set. I can
>>>>> provide config if needed.
>>>> On the box that fails to power off, can you please test -rc8 with these two
>>>> commits reverted:
>>>>
>>>> commit 5a50fe709d527f31169263e36601dd83446d5744
>>>> ACPI: suspend: consolidate handling of Sx states addendum
>>>>
>>>> commit f216cc3748a3a22c2b99390fddcdafa0583791a2
>>>> ACPI: suspend: consolidate handling of Sx states.
>>>>
>>>> and see if it works?
>>> If it does, please test the patch from this message
>>>
>>> http://marc.info/?l=linux-kernel&m=119052978117735&w=4
>>>
>>> on top of vanilla 2.6.23-rc8.
>> You will need one more patch on top of just mentioned one.
>
> Hm, why did you put acpi_target_sleep_state under CONFIG_SUSPEND?
>
> CONFIG_HIBERNATION needs acpi_target_sleep_state too.
Agree, attaching updated patch.

Thanks,
Alex.
ACPI: suspend: fix ACPI_SLEEP states

From: Alexey Starikovskiy <astarikovskiy@xxxxxxx>

Signed-off-by: Alexey Starikovskiy <astarikovskiy@xxxxxxx>
---

drivers/acpi/sleep/Makefile | 2 +-
drivers/acpi/sleep/main.c | 5 +++++
include/acpi/acpi_drivers.h | 4 ----
3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/acpi/sleep/Makefile b/drivers/acpi/sleep/Makefile
index ba9bd40..f1fb888 100644
--- a/drivers/acpi/sleep/Makefile
+++ b/drivers/acpi/sleep/Makefile
@@ -1,5 +1,5 @@
obj-y := wakeup.o
-obj-$(CONFIG_ACPI_SLEEP) += main.o
+obj-y += main.o
obj-$(CONFIG_ACPI_SLEEP) += proc.o

EXTRA_CFLAGS += $(ACPI_CFLAGS)
diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
index c79edcb..6ea0628 100644
--- a/drivers/acpi/sleep/main.c
+++ b/drivers/acpi/sleep/main.c
@@ -24,7 +24,9 @@

u8 sleep_states[ACPI_S_STATE_COUNT];

+#if defined(CONFIG_SUSPEND)||defined(CONFIG_HIBERNATION)
static u32 acpi_target_sleep_state = ACPI_STATE_S0;
+#endif

int acpi_sleep_prepare(u32 acpi_state)
{
@@ -48,6 +50,7 @@ int acpi_sleep_prepare(u32 acpi_state)
}

#ifdef CONFIG_SUSPEND
+
static struct pm_ops acpi_pm_ops;

extern void do_suspend_lowlevel(void);
@@ -299,6 +302,7 @@ int acpi_suspend(u32 acpi_state)
return -EINVAL;
}

+#ifdef CONFIG_PM_SLEEP
/**
* acpi_pm_device_sleep_state - return preferred power state of ACPI device
* in the system sleep state given by %acpi_target_sleep_state
@@ -373,6 +377,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
*d_min_p = d_min;
return d_max;
}
+#endif

static void acpi_power_off_prepare(void)
{
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index 202acb9..f85f77a 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -147,10 +147,6 @@ static inline void unregister_hotplug_dock_device(acpi_handle handle)
/*--------------------------------------------------------------------------
Suspend/Resume
-------------------------------------------------------------------------- */
-#ifdef CONFIG_ACPI_SLEEP
extern int acpi_sleep_init(void);
-#else
-static inline int acpi_sleep_init(void) { return 0; }
-#endif

#endif /*__ACPI_DRIVERS_H__*/