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

Commit 58b3b71d authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Linus Torvalds
Browse files

Fix ThinkPad T42 poweroff failure introduced by by "PM: Introduce pm_power_off_prepare"



Commit bd804eba ("PM: Introduce
pm_power_off_prepare") caused problems in the poweroff path, as reported by
YOSHIFUJI Hideaki / 吉藤英明.

Generally, sysdev_shutdown() should be called after the ACPI preparation for
powering the system off.  To make it happen, we can separate sysdev_shutdown()
from device_shutdown() and call it directly wherever necessary.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Tested-by: default avatarYOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 602033ed
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -44,7 +44,5 @@ void device_shutdown(void)
			dev->driver->shutdown(dev);
		}
	}

	sysdev_shutdown();
}
+3 −0
Original line number Diff line number Diff line
@@ -551,6 +551,9 @@ extern void put_device(struct device * dev);
/* drivers/base/power/shutdown.c */
extern void device_shutdown(void);

/* drivers/base/sys.c */
extern void sysdev_shutdown(void);


/* drivers/base/firmware.c */
extern int __must_check firmware_register(struct kset *);
+1 −0
Original line number Diff line number Diff line
@@ -216,6 +216,7 @@ int hibernation_platform_enter(void)
		 * sleep state after all
		 */
		error = hibernation_ops->prepare();
		sysdev_shutdown();
		if (!error)
			error = hibernation_ops->enter();
	} else {
+3 −0
Original line number Diff line number Diff line
@@ -804,6 +804,7 @@ static void kernel_restart_prepare(char *cmd)
	blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
	system_state = SYSTEM_RESTART;
	device_shutdown();
	sysdev_shutdown();
}

/**
@@ -860,6 +861,7 @@ void kernel_shutdown_prepare(enum system_states state)
void kernel_halt(void)
{
	kernel_shutdown_prepare(SYSTEM_HALT);
	sysdev_shutdown();
	printk(KERN_EMERG "System halted.\n");
	machine_halt();
}
@@ -876,6 +878,7 @@ void kernel_power_off(void)
	kernel_shutdown_prepare(SYSTEM_POWER_OFF);
	if (pm_power_off_prepare)
		pm_power_off_prepare();
	sysdev_shutdown();
	printk(KERN_EMERG "Power down.\n");
	machine_power_off();
}