diff options
-rw-r--r-- | kernel/power/power.h | 7 | ||||
-rw-r--r-- | kernel/power/user.c | 28 |
2 files changed, 34 insertions, 1 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h index bfe999f7b272..87ecb1856ee8 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
@@ -117,7 +117,12 @@ extern void snapshot_free_unused_memory(struct snapshot_handle *handle); | |||
117 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) | 117 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) |
118 | #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) | 118 | #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) |
119 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) | 119 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) |
120 | #define SNAPSHOT_IOC_MAXNR 11 | 120 | #define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int) |
121 | #define SNAPSHOT_IOC_MAXNR 12 | ||
122 | |||
123 | #define PMOPS_PREPARE 1 | ||
124 | #define PMOPS_ENTER 2 | ||
125 | #define PMOPS_FINISH 3 | ||
121 | 126 | ||
122 | /** | 127 | /** |
123 | * The bitmap is used for tracing allocated swap pages | 128 | * The bitmap is used for tracing allocated swap pages |
diff --git a/kernel/power/user.c b/kernel/power/user.c index d991d3b0e5a4..4c24ca5d62e3 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/suspend.h> | 12 | #include <linux/suspend.h> |
13 | #include <linux/syscalls.h> | 13 | #include <linux/syscalls.h> |
14 | #include <linux/reboot.h> | ||
14 | #include <linux/string.h> | 15 | #include <linux/string.h> |
15 | #include <linux/device.h> | 16 | #include <linux/device.h> |
16 | #include <linux/miscdevice.h> | 17 | #include <linux/miscdevice.h> |
@@ -313,6 +314,33 @@ OutS3: | |||
313 | up(&pm_sem); | 314 | up(&pm_sem); |
314 | break; | 315 | break; |
315 | 316 | ||
317 | case SNAPSHOT_PMOPS: | ||
318 | switch (arg) { | ||
319 | |||
320 | case PMOPS_PREPARE: | ||
321 | if (pm_ops->prepare) { | ||
322 | error = pm_ops->prepare(PM_SUSPEND_DISK); | ||
323 | } | ||
324 | break; | ||
325 | |||
326 | case PMOPS_ENTER: | ||
327 | kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); | ||
328 | error = pm_ops->enter(PM_SUSPEND_DISK); | ||
329 | break; | ||
330 | |||
331 | case PMOPS_FINISH: | ||
332 | if (pm_ops && pm_ops->finish) { | ||
333 | pm_ops->finish(PM_SUSPEND_DISK); | ||
334 | } | ||
335 | break; | ||
336 | |||
337 | default: | ||
338 | printk(KERN_ERR "SNAPSHOT_PMOPS: invalid argument %ld\n", arg); | ||
339 | error = -EINVAL; | ||
340 | |||
341 | } | ||
342 | break; | ||
343 | |||
316 | default: | 344 | default: |
317 | error = -ENOTTY; | 345 | error = -ENOTTY; |
318 | 346 | ||