Skip to content

Commit

Permalink
[PATCH] Driver Core: pm diagnostics update, check for errors
Browse files Browse the repository at this point in the history
This patch includes various tweaks in the messaging that appears during
system pm state transitions:

  * Warn about certain illegal calls in the device tree, like resuming
    child before parent or suspending parent before child.  This could
    happen easily enough through sysfs, or in some cases when drivers
    use device_pm_set_parent().

  * Be more consistent about dev_dbg() tracing ... do it for resume() and
    shutdown() too, and never if the driver doesn't have that method.

  * Say which type of system sleep state is being entered.

Except for the warnings, these only affect debug messaging.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
David Brownell authored and Greg KH committed May 17, 2005
1 parent ff0d2f9 commit 82428b6
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
11 changes: 10 additions & 1 deletion drivers/base/power/resume.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,17 @@ extern int sysdev_resume(void);

int resume_device(struct device * dev)
{
if (dev->bus && dev->bus->resume)
if (dev->power.pm_parent
&& dev->power.pm_parent->power.power_state) {
dev_err(dev, "PM: resume from %d, parent %s still %d\n",
dev->power.power_state,
dev->power.pm_parent->bus_id,
dev->power.pm_parent->power.power_state);
}
if (dev->bus && dev->bus->resume) {
dev_dbg(dev,"resuming\n");
return dev->bus->resume(dev);
}
return 0;
}

Expand Down
13 changes: 7 additions & 6 deletions drivers/base/power/shutdown.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ int device_detach_shutdown(struct device * dev)
return 0;

if (dev->detach_state == DEVICE_PM_OFF) {
if (dev->driver && dev->driver->shutdown)
if (dev->driver && dev->driver->shutdown) {
dev_dbg(dev, "shutdown\n");
dev->driver->shutdown(dev);
}
return 0;
}
return dpm_runtime_suspend(dev, dev->detach_state);
Expand All @@ -52,13 +54,12 @@ void device_shutdown(void)
struct device * dev;

down_write(&devices_subsys.rwsem);
list_for_each_entry_reverse(dev, &devices_subsys.kset.list, kobj.entry) {
pr_debug("shutting down %s: ", dev->bus_id);
list_for_each_entry_reverse(dev, &devices_subsys.kset.list,
kobj.entry) {
if (dev->driver && dev->driver->shutdown) {
pr_debug("Ok\n");
dev_dbg(dev, "shutdown\n");
dev->driver->shutdown(dev);
} else
pr_debug("Ignored.\n");
}
}
up_write(&devices_subsys.rwsem);

Expand Down
17 changes: 15 additions & 2 deletions drivers/base/power/suspend.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,25 @@ int suspend_device(struct device * dev, pm_message_t state)
{
int error = 0;

dev_dbg(dev, "suspending\n");
if (dev->power.power_state) {
dev_dbg(dev, "PM: suspend %d-->%d\n",
dev->power.power_state, state);
}
if (dev->power.pm_parent
&& dev->power.pm_parent->power.power_state) {
dev_err(dev,
"PM: suspend %d->%d, parent %s already %d\n",
dev->power.power_state, state,
dev->power.pm_parent->bus_id,
dev->power.pm_parent->power.power_state);
}

dev->power.prev_state = dev->power.power_state;

if (dev->bus && dev->bus->suspend && !dev->power.power_state)
if (dev->bus && dev->bus->suspend && !dev->power.power_state) {
dev_dbg(dev, "suspending\n");
error = dev->bus->suspend(dev, state);
}

return error;
}
Expand Down
6 changes: 3 additions & 3 deletions kernel/power/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,14 @@ static int enter_state(suspend_state_t state)
goto Unlock;
}

pr_debug("PM: Preparing system for suspend\n");
pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);
if ((error = suspend_prepare(state)))
goto Unlock;

pr_debug("PM: Entering state.\n");
pr_debug("PM: Entering %s sleep\n", pm_states[state]);
error = suspend_enter(state);

pr_debug("PM: Finishing up.\n");
pr_debug("PM: Finishing wakeup.\n");
suspend_finish(state);
Unlock:
up(&pm_sem);
Expand Down

0 comments on commit 82428b6

Please sign in to comment.