Messages in this thread Patch in this message |  | | | From | "Rafael J. Wysocki" <> | | Subject | [PATCH -mm 3/3] swsusp: add s2ram ioctl to userland interface | | Date | Sun, 19 Mar 2006 12:16:22 +0100 |
From: Luca Tettamanti <kronos.it@gmail.com>
Add the SNAPSHOT_S2RAM ioctl to the snapshot device.
This ioctl allows a userland application to make the system (previously frozen with the SNAPSHOT_FREE ioctl) enter the S3 state without freezing processes and disabling nonboot CPUs for the second time.
This will allow us to implement the suspend-to-disk-and-RAM (STDR) functionality in the userland suspend tools.
Signed-off-by: Luca Tettamanti <kronos.it@gmail.com> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> --- kernel/power/main.c | 2 +- kernel/power/power.h | 4 +++- kernel/power/user.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) Index: linux-2.6.16-rc6-mm2/kernel/power/main.c =================================================================== --- linux-2.6.16-rc6-mm2.orig/kernel/power/main.c +++ linux-2.6.16-rc6-mm2/kernel/power/main.c @@ -103,7 +103,7 @@ static int suspend_prepare(suspend_state } -static int suspend_enter(suspend_state_t state) +int suspend_enter(suspend_state_t state) { int error = 0; unsigned long flags; Index: linux-2.6.16-rc6-mm2/kernel/power/power.h =================================================================== --- linux-2.6.16-rc6-mm2.orig/kernel/power/power.h +++ linux-2.6.16-rc6-mm2/kernel/power/power.h @@ -77,7 +77,8 @@ int snapshot_image_loaded(struct snapsho #define SNAPSHOT_GET_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 8, void *) #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) -#define SNAPSHOT_IOC_MAXNR 10 +#define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) +#define SNAPSHOT_IOC_MAXNR 11 /** * The bitmap is used for tracing allocated swap pages @@ -112,3 +113,4 @@ extern int swsusp_resume(void); extern int swsusp_read(void); extern int swsusp_write(void); extern void swsusp_close(void); +extern int suspend_enter(suspend_state_t state); Index: linux-2.6.16-rc6-mm2/kernel/power/user.c =================================================================== --- linux-2.6.16-rc6-mm2.orig/kernel/power/user.c +++ linux-2.6.16-rc6-mm2/kernel/power/user.c @@ -265,6 +265,42 @@ static int snapshot_ioctl(struct inode * } break; + case SNAPSHOT_S2RAM: + if (!data->frozen) { + error = -EPERM; + break; + } + + if (down_trylock(&pm_sem)) { + error = -EBUSY; + break; + } + + if (pm_ops->prepare) { + error = pm_ops->prepare(PM_SUSPEND_MEM); + if (error) + goto OutS3; + } + + /* Put devices to sleep */ + error = device_suspend(PMSG_SUSPEND); + if (error) { + printk(KERN_ERR "Failed to suspend some devices.\n"); + } else { + /* Enter S3, system is already frozen */ + suspend_enter(PM_SUSPEND_MEM); + + /* Wake up devices */ + device_resume(); + } + + if (pm_ops->finish) + pm_ops->finish(PM_SUSPEND_MEM); + +OutS3: + up(&pm_sem); + break; + default: error = -ENOTTY; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |