* [RFC][PATCH 0/2] PM: Update system power off code @ 2007-07-01 18:51 Rafael J. Wysocki 2007-07-01 18:53 ` [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown Rafael J. Wysocki 2007-07-01 18:54 ` [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare Rafael J. Wysocki 0 siblings, 2 replies; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-01 18:51 UTC (permalink / raw) To: pm list; +Cc: ACPI Devel Maling List, Pavel Machek Hi, The following two patches update the system power off code. They: * remove the (unnecessary) call to acpi_sleep_prepare(ACPI_STATE_S4) from acpi_shutdown() * remove acpi_sysclass and device_acpi that are only defined to register the ACPI power off preparation callback in acpi_shutdown() and introduce more general mechanism instead The details are in the changelogs. Comments welcome. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown 2007-07-01 18:51 [RFC][PATCH 0/2] PM: Update system power off code Rafael J. Wysocki @ 2007-07-01 18:53 ` Rafael J. Wysocki 2007-07-04 19:49 ` Pavel Machek 2007-07-01 18:54 ` [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare Rafael J. Wysocki 1 sibling, 1 reply; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-01 18:53 UTC (permalink / raw) To: pm list; +Cc: ACPI Devel Maling List, Pavel Machek From: Rafael J. Wysocki <rjw@sisk.pl> Since we are now explicitly calling hibernation_ops->prepare() before hibernation_ops->enter() in hibernation_platform_enter() (defined in kernel/power/disk.c), ACPI should not call acpi_sleep_prepare(ACPI_STATE_S4) from acpi_shutdown(). Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> --- drivers/acpi/sleep/poweroff.c | 3 --- 1 file changed, 3 deletions(-) Index: linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c =================================================================== --- linux-2.6.22-rc6.orig/drivers/acpi/sleep/poweroff.c 2007-07-01 15:08:54.000000000 +0200 +++ linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c 2007-07-01 15:10:07.000000000 +0200 @@ -54,9 +54,6 @@ static int acpi_shutdown(struct sys_devi case SYSTEM_POWER_OFF: /* Prepare to power off the system */ return acpi_sleep_prepare(ACPI_STATE_S5); - case SYSTEM_SUSPEND_DISK: - /* Prepare to suspend the system to disk */ - return acpi_sleep_prepare(ACPI_STATE_S4); default: return 0; } ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown 2007-07-01 18:53 ` [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown Rafael J. Wysocki @ 2007-07-04 19:49 ` Pavel Machek 2007-07-04 21:40 ` Rafael J. Wysocki 0 siblings, 1 reply; 9+ messages in thread From: Pavel Machek @ 2007-07-04 19:49 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: pm list, ACPI Devel Maling List Hi! > Since we are now explicitly calling hibernation_ops->prepare() before > hibernation_ops->enter() in hibernation_platform_enter() (defined in > kernel/power/disk.c), ACPI should not call acpi_sleep_prepare(ACPI_STATE_S4) > from acpi_shutdown(). > > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> > --- > drivers/acpi/sleep/poweroff.c | 3 --- > 1 file changed, 3 deletions(-) > > Index: linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c > =================================================================== > --- linux-2.6.22-rc6.orig/drivers/acpi/sleep/poweroff.c 2007-07-01 15:08:54.000000000 +0200 > +++ linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c 2007-07-01 15:10:07.000000000 +0200 > @@ -54,9 +54,6 @@ static int acpi_shutdown(struct sys_devi > case SYSTEM_POWER_OFF: > /* Prepare to power off the system */ > return acpi_sleep_prepare(ACPI_STATE_S5); > - case SYSTEM_SUSPEND_DISK: > - /* Prepare to suspend the system to disk */ > - return acpi_sleep_prepare(ACPI_STATE_S4); > default: > return 0; Hmm, I do not see why this is unneccessary... acpi wants to be notified of poweroff, and hooks in a pretty reasonable way. kernel/power does not seem to call acpi_sleep_prepare(). Hmm? Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown 2007-07-04 19:49 ` Pavel Machek @ 2007-07-04 21:40 ` Rafael J. Wysocki 0 siblings, 0 replies; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 21:40 UTC (permalink / raw) To: Pavel Machek; +Cc: pm list, ACPI Devel Maling List On Wednesday, 4 July 2007 21:49, Pavel Machek wrote: > Hi! > > > Since we are now explicitly calling hibernation_ops->prepare() before > > hibernation_ops->enter() in hibernation_platform_enter() (defined in > > kernel/power/disk.c), ACPI should not call acpi_sleep_prepare(ACPI_STATE_S4) > > from acpi_shutdown(). > > > > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> > > --- > > drivers/acpi/sleep/poweroff.c | 3 --- > > 1 file changed, 3 deletions(-) > > > > Index: linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c > > =================================================================== > > --- linux-2.6.22-rc6.orig/drivers/acpi/sleep/poweroff.c 2007-07-01 15:08:54.000000000 +0200 > > +++ linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c 2007-07-01 15:10:07.000000000 +0200 > > @@ -54,9 +54,6 @@ static int acpi_shutdown(struct sys_devi > > case SYSTEM_POWER_OFF: > > /* Prepare to power off the system */ > > return acpi_sleep_prepare(ACPI_STATE_S5); > > - case SYSTEM_SUSPEND_DISK: > > - /* Prepare to suspend the system to disk */ > > - return acpi_sleep_prepare(ACPI_STATE_S4); > > default: > > return 0; > > Hmm, I do not see why this is unneccessary... acpi wants to be > notified of poweroff, and hooks in a pretty reasonable > way. kernel/power does not seem to call acpi_sleep_prepare(). Hmm? Please look at -mm. We have int hibernation_platform_enter(void) { int error; if (hibernation_ops) { kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); /* * We have cancelled the power transition by running * hibernation_ops->finish() before saving the image, so we * should let the firmware know that we're going to enter the * sleep state after all */ error = hibernation_ops->prepare(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ if (!error) error = hibernation_ops->enter(); } else { error = -ENOSYS; } return error; } in there, which is exactly that. The patch is necessary. :-) Otherwise ->prepare() will be called twice in a row. Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare 2007-07-01 18:51 [RFC][PATCH 0/2] PM: Update system power off code Rafael J. Wysocki 2007-07-01 18:53 ` [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown Rafael J. Wysocki @ 2007-07-01 18:54 ` Rafael J. Wysocki 2007-07-04 19:52 ` Pavel Machek 1 sibling, 1 reply; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-01 18:54 UTC (permalink / raw) To: pm list; +Cc: ACPI Devel Maling List, Pavel Machek From: Rafael J. Wysocki <rjw@sisk.pl> Introduce the pm_power_off_prepare() callback that can be registered by the interested platforms in analogy with pm_idle() and pm_power_off(), used for preparing the system to power off (needed by ACPI). This allows us to drop acpi_sysclass and device_acpi that are only defined in order to register the ACPI power off preparation callback, which is needed by pm_power_off() registered in a much different way. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> --- drivers/acpi/sleep/poweroff.c | 38 +++++++++----------------------------- include/linux/pm.h | 1 + kernel/sys.c | 9 +++++++++ 3 files changed, 19 insertions(+), 29 deletions(-) Index: linux-2.6.22-rc6/include/linux/pm.h =================================================================== --- linux-2.6.22-rc6.orig/include/linux/pm.h 2007-07-01 13:46:49.000000000 +0200 +++ linux-2.6.22-rc6/include/linux/pm.h 2007-07-01 18:37:28.000000000 +0200 @@ -101,6 +101,7 @@ struct pm_dev */ extern void (*pm_idle)(void); extern void (*pm_power_off)(void); +extern void (*pm_power_off_prepare)(void); /* * Device power management Index: linux-2.6.22-rc6/kernel/sys.c =================================================================== --- linux-2.6.22-rc6.orig/kernel/sys.c 2007-06-25 21:07:40.000000000 +0200 +++ linux-2.6.22-rc6/kernel/sys.c 2007-07-01 18:40:59.000000000 +0200 @@ -98,6 +98,13 @@ struct pid *cad_pid; EXPORT_SYMBOL(cad_pid); /* + * If set, this is used for preparing the system to power off. + */ + +void (*pm_power_off_prepare)(void); +EXPORT_SYMBOL(pm_power_off_prepare); + +/* * Notifier list for kernel code which wants to be called * at shutdown. This is used to stop any idling DMA operations * and the like. @@ -865,6 +872,8 @@ EXPORT_SYMBOL_GPL(kernel_halt); void kernel_power_off(void) { kernel_shutdown_prepare(SYSTEM_POWER_OFF); + if (pm_power_off_prepare) + pm_power_off_prepare(); printk(KERN_EMERG "Power down.\n"); machine_power_off(); } Index: linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c =================================================================== --- linux-2.6.22-rc6.orig/drivers/acpi/sleep/poweroff.c 2007-07-01 15:10:07.000000000 +0200 +++ linux-2.6.22-rc6/drivers/acpi/sleep/poweroff.c 2007-07-01 18:40:09.000000000 +0200 @@ -39,7 +39,13 @@ int acpi_sleep_prepare(u32 acpi_state) #ifdef CONFIG_PM -void acpi_power_off(void) +static void acpi_power_off_prepare(void) +{ + /* Prepare to power off the system */ + acpi_sleep_prepare(ACPI_STATE_S5); +} + +static void acpi_power_off(void) { /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ printk("%s called\n", __FUNCTION__); @@ -48,27 +54,6 @@ void acpi_power_off(void) acpi_enter_sleep_state(ACPI_STATE_S5); } -static int acpi_shutdown(struct sys_device *x) -{ - switch (system_state) { - case SYSTEM_POWER_OFF: - /* Prepare to power off the system */ - return acpi_sleep_prepare(ACPI_STATE_S5); - default: - return 0; - } -} - -static struct sysdev_class acpi_sysclass = { - set_kset_name("acpi"), - .shutdown = acpi_shutdown -}; - -static struct sys_device device_acpi = { - .id = 0, - .cls = &acpi_sysclass, -}; - static int acpi_poweroff_init(void) { if (!acpi_disabled) { @@ -78,13 +63,8 @@ static int acpi_poweroff_init(void) status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b); if (ACPI_SUCCESS(status)) { - int error; - error = sysdev_class_register(&acpi_sysclass); - if (!error) - error = sysdev_register(&device_acpi); - if (!error) - pm_power_off = acpi_power_off; - return error; + pm_power_off_prepare = acpi_power_off_prepare; + pm_power_off = acpi_power_off; } } return 0; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare 2007-07-01 18:54 ` [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare Rafael J. Wysocki @ 2007-07-04 19:52 ` Pavel Machek 2007-07-04 21:42 ` Rafael J. Wysocki 0 siblings, 1 reply; 9+ messages in thread From: Pavel Machek @ 2007-07-04 19:52 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: pm list, ACPI Devel Maling List On Sun 2007-07-01 20:54:31, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rjw@sisk.pl> > > Introduce the pm_power_off_prepare() callback that can be registered by the > interested platforms in analogy with pm_idle() and pm_power_off(), used for > preparing the system to power off (needed by ACPI). > > This allows us to drop acpi_sysclass and device_acpi that are only defined in > order to register the ACPI power off preparation callback, which is needed by > pm_power_off() registered in a much different way. Well, the acpi way works with more than one piece of code "listening" for powerdowns... and does not seem that ugly to me. Okay, so accessing system_state is not _that_ nice... aha, and perhaps I understand why 1/2 of this series is right... it called prepare for S4 even when we had shutdown in /sys/power/disk, right? Hmm. Okay, I think I can ACK both of these patches, but ACPI people should have chance to comment, and it probably needs to stay in -mm for a while. -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare 2007-07-04 19:52 ` Pavel Machek @ 2007-07-04 21:42 ` Rafael J. Wysocki 2007-07-04 21:39 ` Pavel Machek 0 siblings, 1 reply; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 21:42 UTC (permalink / raw) To: Pavel Machek; +Cc: pm list, ACPI Devel Maling List On Wednesday, 4 July 2007 21:52, Pavel Machek wrote: > On Sun 2007-07-01 20:54:31, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rjw@sisk.pl> > > > > Introduce the pm_power_off_prepare() callback that can be registered by the > > interested platforms in analogy with pm_idle() and pm_power_off(), used for > > preparing the system to power off (needed by ACPI). > > > > This allows us to drop acpi_sysclass and device_acpi that are only defined in > > order to register the ACPI power off preparation callback, which is needed by > > pm_power_off() registered in a much different way. > > Well, the acpi way works with more than one piece of code "listening" > for powerdowns... and does not seem that ugly to me. > > Okay, so accessing system_state is not _that_ nice... aha, and perhaps > I understand why 1/2 of this series is right... it called prepare for > S4 even when we had shutdown in /sys/power/disk, right? > > Hmm. Okay, I think I can ACK both of these patches, but ACPI people > should have chance to comment, and it probably needs to stay in -mm > for a while. Well, linux-acpi in on the CC list and I see no comments from them. :-) Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare 2007-07-04 21:42 ` Rafael J. Wysocki @ 2007-07-04 21:39 ` Pavel Machek 2007-07-04 21:52 ` Rafael J. Wysocki 0 siblings, 1 reply; 9+ messages in thread From: Pavel Machek @ 2007-07-04 21:39 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: pm list, ACPI Devel Maling List Hi! > > > Introduce the pm_power_off_prepare() callback that can be registered by the > > > interested platforms in analogy with pm_idle() and pm_power_off(), used for > > > preparing the system to power off (needed by ACPI). > > > > > > This allows us to drop acpi_sysclass and device_acpi that are only defined in > > > order to register the ACPI power off preparation callback, which is needed by > > > pm_power_off() registered in a much different way. > > > > Well, the acpi way works with more than one piece of code "listening" > > for powerdowns... and does not seem that ugly to me. > > > > Okay, so accessing system_state is not _that_ nice... aha, and perhaps > > I understand why 1/2 of this series is right... it called prepare for > > S4 even when we had shutdown in /sys/power/disk, right? > > > > Hmm. Okay, I think I can ACK both of these patches, but ACPI people > > should have chance to comment, and it probably needs to stay in -mm > > for a while. > > Well, linux-acpi in on the CC list and I see no comments from them. :-) Hmm, that's bad. We can try adding "APM rocks" into subject line to get their attetion or something... Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare 2007-07-04 21:39 ` Pavel Machek @ 2007-07-04 21:52 ` Rafael J. Wysocki 0 siblings, 0 replies; 9+ messages in thread From: Rafael J. Wysocki @ 2007-07-04 21:52 UTC (permalink / raw) To: Pavel Machek; +Cc: pm list, ACPI Devel Maling List On Wednesday, 4 July 2007 23:39, Pavel Machek wrote: > Hi! > > > > > Introduce the pm_power_off_prepare() callback that can be registered by the > > > > interested platforms in analogy with pm_idle() and pm_power_off(), used for > > > > preparing the system to power off (needed by ACPI). > > > > > > > > This allows us to drop acpi_sysclass and device_acpi that are only defined in > > > > order to register the ACPI power off preparation callback, which is needed by > > > > pm_power_off() registered in a much different way. > > > > > > Well, the acpi way works with more than one piece of code "listening" > > > for powerdowns... and does not seem that ugly to me. > > > > > > Okay, so accessing system_state is not _that_ nice... aha, and perhaps > > > I understand why 1/2 of this series is right... it called prepare for > > > S4 even when we had shutdown in /sys/power/disk, right? > > > > > > Hmm. Okay, I think I can ACK both of these patches, but ACPI people > > > should have chance to comment, and it probably needs to stay in -mm > > > for a while. > > > > Well, linux-acpi in on the CC list and I see no comments from them. :-) > > Hmm, that's bad. We can try adding "APM rocks" into subject line to > get their attetion or something... Well, I take the lack of comments as the lack of objections. ;-) Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-07-04 21:44 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-07-01 18:51 [RFC][PATCH 0/2] PM: Update system power off code Rafael J. Wysocki 2007-07-01 18:53 ` [RFC][PATCH 1/2] ACPI: Do not prepare for hibernation in acpi_shutdown Rafael J. Wysocki 2007-07-04 19:49 ` Pavel Machek 2007-07-04 21:40 ` Rafael J. Wysocki 2007-07-01 18:54 ` [RFC][PATCH 2/2] PM: Introduce pm_power_off_prepare Rafael J. Wysocki 2007-07-04 19:52 ` Pavel Machek 2007-07-04 21:42 ` Rafael J. Wysocki 2007-07-04 21:39 ` Pavel Machek 2007-07-04 21:52 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox