[POWERPC] powermac: disallow pmu sleep notifiers from aborting sleep

Tracing through the code, no current PMU sleep notifier can abort sleep.
Since no new PMU sleep notifiers should be added, this patch simplifies the
code and removes the ability to abort sleep.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
このコミットが含まれているのは:
Johannes Berg
2007-03-19 11:53:55 +01:00
committed by Paul Mackerras
コミット 70b52b3869
6個のファイルの変更24行の追加88行の削除

ファイルの表示

@@ -1769,35 +1769,21 @@ EXPORT_SYMBOL(pmu_unregister_sleep_notifier);
#if defined(CONFIG_PM) && defined(CONFIG_PPC32)
/* Sleep is broadcast last-to-first */
static int
broadcast_sleep(int when, int fallback)
static void broadcast_sleep(int when)
{
int ret = PBOOK_SLEEP_OK;
struct list_head *list;
struct pmu_sleep_notifier *notifier;
for (list = sleep_notifiers.prev; list != &sleep_notifiers;
list = list->prev) {
notifier = list_entry(list, struct pmu_sleep_notifier, list);
ret = notifier->notifier_call(notifier, when);
if (ret != PBOOK_SLEEP_OK) {
printk(KERN_DEBUG "sleep %d rejected by %p (%p)\n",
when, notifier, notifier->notifier_call);
for (; list != &sleep_notifiers; list = list->next) {
notifier = list_entry(list, struct pmu_sleep_notifier, list);
notifier->notifier_call(notifier, fallback);
}
return ret;
}
notifier->notifier_call(notifier, when);
}
return ret;
}
/* Wake is broadcast first-to-last */
static int
broadcast_wake(void)
static void broadcast_wake(void)
{
int ret = PBOOK_SLEEP_OK;
struct list_head *list;
struct pmu_sleep_notifier *notifier;
@@ -1806,7 +1792,6 @@ broadcast_wake(void)
notifier = list_entry(list, struct pmu_sleep_notifier, list);
notifier->notifier_call(notifier, PBOOK_WAKE);
}
return ret;
}
/*
@@ -2013,12 +1998,8 @@ pmac_suspend_devices(void)
pm_prepare_console();
/* Notify old-style device drivers & userland */
ret = broadcast_sleep(PBOOK_SLEEP_REQUEST, PBOOK_SLEEP_REJECT);
if (ret != PBOOK_SLEEP_OK) {
printk(KERN_ERR "Sleep rejected by drivers\n");
return -EBUSY;
}
/* Notify old-style device drivers */
broadcast_sleep(PBOOK_SLEEP_REQUEST);
/* Sync the disks. */
/* XXX It would be nice to have some way to ensure that
@@ -2028,12 +2009,7 @@ pmac_suspend_devices(void)
*/
sys_sync();
/* Sleep can fail now. May not be very robust but useful for debugging */
ret = broadcast_sleep(PBOOK_SLEEP_NOW, PBOOK_WAKE);
if (ret != PBOOK_SLEEP_OK) {
printk(KERN_ERR "Driver sleep failed\n");
return -EBUSY;
}
broadcast_sleep(PBOOK_SLEEP_NOW);
/* Send suspend call to devices, hold the device core's dpm_sem */
ret = device_suspend(PMSG_SUSPEND);