On Wed 2018-03-21 19:30:16, Baolin Wang wrote: > We can register one notifier through register_reboot_notifier() function to > prepare to power off the system, then we can remove the 'pm_power_off_prepare' > hook in following patch. > > Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxx> > --- > Note: Please help to review carefully, since I have no platform to test > this conversion. > > I saw there is another reboot notifier in this driver, I am not sure the > orders between them. I can change the priority of notifier to keep their > orders if it is necessary. I don't understand why this is good idea... and you should really test it. I'm sure you can find PC or notebook somewhere... Pavel > drivers/acpi/sleep.c | 22 ++++++++++++++++------ > 1 file changed, 16 insertions(+), 6 deletions(-) > > diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c > index 46cde091..b3de894 100644 > --- a/drivers/acpi/sleep.c > +++ b/drivers/acpi/sleep.c > @@ -1229,14 +1229,24 @@ static void acpi_sleep_hibernate_setup(void) > static inline void acpi_sleep_hibernate_setup(void) {} > #endif /* !CONFIG_HIBERNATION */ > > -static void acpi_power_off_prepare(void) > +static int acpi_reboot_notify(struct notifier_block *this, unsigned long code, > + void *x) > { > - /* Prepare to power off the system */ > - acpi_sleep_prepare(ACPI_STATE_S5); > - acpi_disable_all_gpes(); > - acpi_os_wait_events_complete(); > + if (code == SYSTEM_POWER_OFF) { > + /* Prepare to power off the system */ > + acpi_sleep_prepare(ACPI_STATE_S5); > + acpi_disable_all_gpes(); > + acpi_os_wait_events_complete(); > + } > + > + return NOTIFY_DONE; > } > > +static struct notifier_block acpi_reboot_notifier = { > + .notifier_call = acpi_reboot_notify, > + .priority = 0, > +}; > + > static void acpi_power_off(void) > { > /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ > @@ -1261,7 +1271,7 @@ int __init acpi_sleep_init(void) > > if (acpi_sleep_state_supported(ACPI_STATE_S5)) { > sleep_states[ACPI_STATE_S5] = 1; > - pm_power_off_prepare = acpi_power_off_prepare; > + register_reboot_notifier(&acpi_reboot_notifier); > pm_power_off = acpi_power_off; > } else { > acpi_no_s5 = true; -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Attachment:
signature.asc
Description: Digital signature