Start the storage manager at the beginning of a suspend/resume, and clean
it up at the end of a resume or cancelled suspend.
Signed-off-by: Nigel Cunningham <[email protected]>
kernel/power/storage.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/kernel/power/storage.c b/kernel/power/storage.c
index e31623a..fea9276 100644
--- a/kernel/power/storage.c
+++ b/kernel/power/storage.c
@@ -176,3 +176,50 @@ static unsigned long usm_memory_needed(v
return (32 * PAGE_SIZE);
}
+/* suspend_prepare_usm
+ */
+int suspend_prepare_usm(void)
+{
+ usm_prepare_count++;
+
+ if (usm_prepare_count > 1 || usm_ops.disabled)
+ return 0;
+
+ usm_helper_data.pid = -1;
+
+ if (!*usm_helper_data.program)
+ return 0;
+
+ suspend_netlink_setup(&usm_helper_data);
+
+ if (usm_helper_data.pid == -1)
+ printk("Suspend2 Storage Manager wanted, but couldn't start it.\n");
+
+ suspend_activate_storage(0);
+
+ return (usm_helper_data.pid != -1);
+}
+
+void suspend_cleanup_usm(void)
+{
+ usm_prepare_count--;
+
+ if (usm_helper_data.pid > -1 && !usm_prepare_count) {
+ struct task_struct *t;
+
+ suspend_deactivate_storage(0);
+
+ suspend_send_netlink_message(&usm_helper_data,
+ NETLINK_MSG_CLEANUP, NULL, 0);
+
+ read_lock(&tasklist_lock);
+ if ((t = find_task_by_pid(usm_helper_data.pid)))
+ t->flags &= ~PF_NOFREEZE;
+ read_unlock(&tasklist_lock);
+
+ suspend_netlink_close(&usm_helper_data);
+
+ usm_helper_data.pid = -1;
+ }
+}
+
--
Nigel Cunningham nigel at suspend2 dot net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]