Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1cc0a89 authored by David Brownell's avatar David Brownell Committed by Greg Kroah-Hartman
Browse files

PM: issue PM_EVENT_PRETHAW



This patch is the first of this series that should actually change any
behavior ...  by issuing the new event, now tha the rest of the kernel is
prepared to receive it.

This converts the PM core to issue the new PRETHAW message, which the rest of
the kernel is now ready to receive.

Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 18584999
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ static inline char *suspend_verb(u32 event)
	switch (event) {
	case PM_EVENT_SUSPEND:	return "suspend";
	case PM_EVENT_FREEZE:	return "freeze";
	case PM_EVENT_PRETHAW:	return "prethaw";
	default:		return "(unknown suspend event)";
	}
}
+2 −2
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ static void unprepare_processes(void)
}

/**
 *	pm_suspend_disk - The granpappy of power management.
 *	pm_suspend_disk - The granpappy of hibernation power management.
 *
 *	If we're going through the firmware, then get it over with quickly.
 *
@@ -207,7 +207,7 @@ static int software_resume(void)

	pr_debug("PM: Preparing devices for restore.\n");

	if ((error = device_suspend(PMSG_FREEZE))) {
	if ((error = device_suspend(PMSG_PRETHAW))) {
		printk("Some devices failed to suspend\n");
		swsusp_free();
		goto Thaw;
+8 −1
Original line number Diff line number Diff line
@@ -248,6 +248,9 @@ int swsusp_suspend(void)
	restore_processor_state();
Restore_highmem:
	restore_highmem();
	/* NOTE:  device_power_up() is just a resume() for devices
	 * that suspended with irqs off ... no overall powerup.
	 */
	device_power_up();
Enable_irqs:
	local_irq_enable();
@@ -257,8 +260,12 @@ Enable_irqs:
int swsusp_resume(void)
{
	int error;

	local_irq_disable();
	if (device_power_down(PMSG_FREEZE))
	/* NOTE:  device_power_down() is just a suspend() with irqs off;
	 * it has no special "power things down" semantics
	 */
	if (device_power_down(PMSG_PRETHAW))
		printk(KERN_ERR "Some devices failed to power down, very bad\n");
	/* We'll ignore saved state, but this gets preempt count (etc) right */
	save_processor_state();
+1 −1
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
		}
		down(&pm_sem);
		pm_prepare_console();
		error = device_suspend(PMSG_FREEZE);
		error = device_suspend(PMSG_PRETHAW);
		if (!error) {
			error = swsusp_resume();
			device_resume();