Hi,
I've just notice that we "forgot" to implement the "platform" mode in resume.
The appended patch fixes this problem.
Greetings,
Rafael
---
resume.c | 18 +++++++++++++++++-
suspend.c | 19 ++++++++++++-------
swsusp.h | 1 +
3 files changed, 30 insertions(+), 8 deletions(-)
Index: suspend/suspend.c
===================================================================
--- suspend.orig/suspend.c 2007-02-25 20:57:12.000000000 +0100
+++ suspend/suspend.c 2007-02-25 21:20:18.000000000 +0100
@@ -587,10 +587,14 @@ int write_image(int snapshot_fd, int res
max_block_size = page_size;
if (compute_checksum)
header->image_flags |= IMAGE_CHECKSUM;
+
if (compress) {
header->image_flags |= IMAGE_COMPRESSED;
max_block_size += sizeof(short);
}
+ if (use_platform_suspend)
+ header->image_flags |= PLATFORM_SUSPEND;
+
#ifdef CONFIG_ENCRYPT
if (encrypt) {
if (use_RSA) {
@@ -719,9 +723,9 @@ static int reset_signature(int fd)
static void suspend_shutdown(int snapshot_fd)
{
- if (!strcmp(shutdown_method, "reboot"))
+ if (!strcmp(shutdown_method, "reboot")) {
reboot();
- else if (use_platform_suspend) {
+ } else if (use_platform_suspend) {
int ret = platform_enter(snapshot_fd);
if (ret < 0)
fprintf(stderr, "suspend: pm_ops->enter returned"
@@ -763,9 +767,11 @@ int suspend_system(int snapshot_fd, int
if (use_platform_suspend) {
int ret = platform_prepare(snapshot_fd);
- if (ret < 0)
+ if (ret < 0) {
fprintf(stderr, "suspend: pm_ops->prepare returned "
"error %d\n", ret);
+ use_platform_suspend = 0;
+ }
}
printf("suspend: Snapshotting system\n");
@@ -781,8 +787,6 @@ int suspend_system(int snapshot_fd, int
printf("\e[13]");
printf("suspend: returned to userspace\n");
free_snapshot(snapshot_fd);
- if (use_platform_suspend)
- platform_finish(snapshot_fd);
break;
}
error = write_image(snapshot_fd, resume_fd);
@@ -821,8 +825,9 @@ int suspend_system(int snapshot_fd, int
}
} while (--attempts);
- /* we only get here when we failed to suspend.
- Remember, suspend_shutdown() never returns! */
+ /* We get here during the resume or when we failed to suspend.
+ * Remember, suspend_shutdown() never returns!
+ */
if (use_platform_suspend)
platform_finish(snapshot_fd);
Index: suspend/swsusp.h
===================================================================
--- suspend.orig/swsusp.h 2007-02-25 20:57:11.000000000 +0100
+++ suspend/swsusp.h 2007-02-25 21:11:01.000000000 +0100
@@ -82,6 +82,7 @@ struct swsusp_info {
#define IMAGE_COMPRESSED 0x0002
#define IMAGE_ENCRYPTED 0x0004
#define IMAGE_USE_RSA 0x0008
+#define PLATFORM_SUSPEND 0x0010
#define SWSUSP_SIG "ULSUSPEND"
Index: suspend/resume.c
===================================================================
--- suspend.orig/resume.c 2007-02-25 20:57:11.000000000 +0100
+++ suspend/resume.c 2007-02-25 21:29:15.000000000 +0100
@@ -55,6 +55,7 @@ static char decrypt;
#define decrypt 0
#endif
static char splash_param;
+static int use_platform_suspend;
static struct splash splash;
@@ -575,7 +576,10 @@ static int read_image(int dev, int fd, s
error = read_area(fd, header, swsusp_header->image, page_size);
if (!error) {
- if(header->image_flags & IMAGE_CHECKSUM) {
+ if (header->image_flags & PLATFORM_SUSPEND)
+ use_platform_suspend = 1;
+
+ if (header->image_flags & IMAGE_CHECKSUM) {
memcpy(orig_checksum, header->checksum, 16);
printf("resume: MD5 checksum %s\n",
print_checksum(buffer, orig_checksum));
@@ -866,7 +870,19 @@ int main(int argc, char *argv[])
fprintf(stderr, "resume: Could not freeze processes\n");
goto Close_splash;
}
+ if (use_platform_suspend) {
+ int ret = platform_prepare(dev);
+ if (ret < 0) {
+ fprintf(stderr, "resume: pm_ops->prepare returned "
+ "error %d\n", ret);
+ use_platform_suspend = 0;
+ }
+ }
atomic_restore(dev);
+ /* We only get here if the atomic restore fails. Clean up. */
+ if (use_platform_suspend)
+ platform_finish(dev);
+
unfreeze(dev);
Close_splash:
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Suspend-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/suspend-devel