summaryrefslogtreecommitdiff
path: root/kernel/power/user.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-07-08 23:14:17 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-07-08 23:14:17 +0200
commit63f9ccb89552f25fa8cac57a6796479ca7eb527d (patch)
tree6b8286f4d70ccf4f2a5b65764af7887836d02bf1 /kernel/power/user.c
parent65c0554b73c920023cc8998802e508b798113b46 (diff)
parent307c5971c972ef2bfd541d2850b36a692c6354c9 (diff)
downloadlinux-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.c14
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);