diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-07-08 23:14:17 +0200 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-07-08 23:14:17 +0200 |
| commit | 63f9ccb89552f25fa8cac57a6796479ca7eb527d (patch) | |
| tree | 6b8286f4d70ccf4f2a5b65764af7887836d02bf1 /kernel/power/user.c | |
| parent | 65c0554b73c920023cc8998802e508b798113b46 (diff) | |
| parent | 307c5971c972ef2bfd541d2850b36a692c6354c9 (diff) | |
| download | linux-63f9ccb89552f25fa8cac57a6796479ca7eb527d.tar.gz linux-63f9ccb89552f25fa8cac57a6796479ca7eb527d.tar.bz2 linux-63f9ccb89552f25fa8cac57a6796479ca7eb527d.zip | |
Merge back earlier suspend/hibernation changes for v4.8.
Diffstat (limited to 'kernel/power/user.c')
| -rw-r--r-- | kernel/power/user.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/power/user.c b/kernel/power/user.c index 526e8911460a..35310b627388 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -47,7 +47,7 @@ atomic_t snapshot_device_available = ATOMIC_INIT(1); static int snapshot_open(struct inode *inode, struct file *filp) { struct snapshot_data *data; - int error; + int error, nr_calls = 0; if (!hibernation_available()) return -EPERM; @@ -74,9 +74,9 @@ static int snapshot_open(struct inode *inode, struct file *filp) swap_type_of(swsusp_resume_device, 0, NULL) : -1; data->mode = O_RDONLY; data->free_bitmaps = false; - error = pm_notifier_call_chain(PM_HIBERNATION_PREPARE); + error = __pm_notifier_call_chain(PM_HIBERNATION_PREPARE, -1, &nr_calls); if (error) - pm_notifier_call_chain(PM_POST_HIBERNATION); + __pm_notifier_call_chain(PM_POST_HIBERNATION, --nr_calls, NULL); } else { /* * Resuming. We may need to wait for the image device to @@ -86,13 +86,15 @@ static int snapshot_open(struct inode *inode, struct file *filp) data->swap = -1; data->mode = O_WRONLY; - error = pm_notifier_call_chain(PM_RESTORE_PREPARE); + error = __pm_notifier_call_chain(PM_RESTORE_PREPARE, -1, &nr_calls); if (!error) { error = create_basic_memory_bitmaps(); data->free_bitmaps = !error; - } + } else + nr_calls--; + if (error) - pm_notifier_call_chain(PM_POST_RESTORE); + __pm_notifier_call_chain(PM_POST_RESTORE, nr_calls, NULL); } if (error) atomic_inc(&snapshot_device_available); |
