diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2008-01-12 20:40:46 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-01-24 20:40:04 -0800 |
commit | 775b64d2b6ca37697de925f70799c710aab5849a (patch) | |
tree | 09e91c89228c8d3c6928a1b2ef56711190c69836 /drivers/base/power/power.h | |
parent | 7a83d456a86d559a6347115d206d23774bc152d9 (diff) | |
download | linux-stable-775b64d2b6ca37697de925f70799c710aab5849a.tar.gz linux-stable-775b64d2b6ca37697de925f70799c710aab5849a.tar.bz2 linux-stable-775b64d2b6ca37697de925f70799c710aab5849a.zip |
PM: Acquire device locks on suspend
This patch reorganizes the way suspend and resume notifications are
sent to drivers. The major changes are that now the PM core acquires
every device semaphore before calling the methods, and calls to
device_add() during suspends will fail, while calls to device_del()
during suspends will block.
It also provides a way to safely remove a suspended device with the
help of the PM core, by using the device_pm_schedule_removal() callback
introduced specifically for this purpose, and updates two drivers (msr
and cpuid) that need to use it.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/base/power/power.h')
-rw-r--r-- | drivers/base/power/power.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h index 379da4e958e0..10c20840395e 100644 --- a/drivers/base/power/power.h +++ b/drivers/base/power/power.h @@ -20,6 +20,9 @@ static inline struct device *to_device(struct list_head *entry) extern void device_pm_add(struct device *); extern void device_pm_remove(struct device *); +extern void device_pm_schedule_removal(struct device *); +extern int pm_sleep_lock(void); +extern void pm_sleep_unlock(void); #else /* CONFIG_PM_SLEEP */ @@ -32,6 +35,15 @@ static inline void device_pm_remove(struct device *dev) { } +static inline int pm_sleep_lock(void) +{ + return 0; +} + +static inline void pm_sleep_unlock(void) +{ +} + #endif #ifdef CONFIG_PM |