diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2008-01-12 14:40:46 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-01-24 23:40:04 -0500 |
commit | 775b64d2b6ca37697de925f70799c710aab5849a (patch) | |
tree | 09e91c89228c8d3c6928a1b2ef56711190c69836 /include | |
parent | 7a83d456a86d559a6347115d206d23774bc152d9 (diff) |
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 'include')
-rw-r--r-- | include/linux/device.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 2e15822fe409..cf4ae5c5d193 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -521,6 +521,14 @@ extern struct device *device_create(struct class *cls, struct device *parent, | |||
521 | dev_t devt, const char *fmt, ...) | 521 | dev_t devt, const char *fmt, ...) |
522 | __attribute__((format(printf,4,5))); | 522 | __attribute__((format(printf,4,5))); |
523 | extern void device_destroy(struct class *cls, dev_t devt); | 523 | extern void device_destroy(struct class *cls, dev_t devt); |
524 | #ifdef CONFIG_PM_SLEEP | ||
525 | extern void destroy_suspended_device(struct class *cls, dev_t devt); | ||
526 | #else /* !CONFIG_PM_SLEEP */ | ||
527 | static inline void destroy_suspended_device(struct class *cls, dev_t devt) | ||
528 | { | ||
529 | device_destroy(cls, devt); | ||
530 | } | ||
531 | #endif /* !CONFIG_PM_SLEEP */ | ||
524 | 532 | ||
525 | /* | 533 | /* |
526 | * Platform "fixup" functions - allow the platform to have their say | 534 | * Platform "fixup" functions - allow the platform to have their say |