Loading kernel/power/hibernate.c +12 −3 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ enum { static int hibernation_mode = HIBERNATION_SHUTDOWN; bool freezer_test_done; bool snapshot_test; static const struct platform_hibernation_ops *hibernation_ops; Loading Loading @@ -687,18 +688,22 @@ static int load_image_and_restore(void) { int error; unsigned int flags; fmode_t mode = FMODE_READ; if (snapshot_test) mode |= FMODE_EXCL; pm_pr_dbg("Loading hibernation image.\n"); lock_device_hotplug(); error = create_basic_memory_bitmaps(); if (error) { swsusp_close(FMODE_READ | FMODE_EXCL); swsusp_close(mode); goto Unlock; } error = swsusp_read(&flags); swsusp_close(FMODE_READ | FMODE_EXCL); swsusp_close(mode); if (!error) error = hibernation_restore(flags & SF_PLATFORM_MODE); Loading @@ -716,7 +721,6 @@ static int load_image_and_restore(void) */ int hibernate(void) { bool snapshot_test = false; unsigned int sleep_flags; int error; Loading Loading @@ -744,6 +748,9 @@ int hibernate(void) if (error) goto Exit; /* protected by system_transition_mutex */ snapshot_test = false; lock_device_hotplug(); /* Allocate memory management structures */ error = create_basic_memory_bitmaps(); Loading Loading @@ -940,6 +947,8 @@ static int software_resume(void) */ mutex_lock_nested(&system_transition_mutex, SINGLE_DEPTH_NESTING); snapshot_test = false; if (swsusp_resume_device) goto Check_image; Loading kernel/power/power.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ asmlinkage int swsusp_save(void); /* kernel/power/hibernate.c */ extern bool freezer_test_done; extern bool snapshot_test; extern int hibernation_snapshot(int platform_mode); extern int hibernation_restore(int platform_mode); Loading kernel/power/swap.c +6 −2 Original line number Diff line number Diff line Loading @@ -1518,9 +1518,13 @@ int swsusp_check(void) { int error; void *holder; fmode_t mode = FMODE_READ; if (snapshot_test) mode |= FMODE_EXCL; hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, FMODE_READ | FMODE_EXCL, &holder); mode, &holder); if (!IS_ERR(hib_resume_bdev)) { set_blocksize(hib_resume_bdev, PAGE_SIZE); clear_page(swsusp_header); Loading @@ -1547,7 +1551,7 @@ int swsusp_check(void) put: if (error) blkdev_put(hib_resume_bdev, FMODE_READ | FMODE_EXCL); blkdev_put(hib_resume_bdev, mode); else pr_debug("Image signature found, resuming\n"); } else { Loading Loading
kernel/power/hibernate.c +12 −3 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ enum { static int hibernation_mode = HIBERNATION_SHUTDOWN; bool freezer_test_done; bool snapshot_test; static const struct platform_hibernation_ops *hibernation_ops; Loading Loading @@ -687,18 +688,22 @@ static int load_image_and_restore(void) { int error; unsigned int flags; fmode_t mode = FMODE_READ; if (snapshot_test) mode |= FMODE_EXCL; pm_pr_dbg("Loading hibernation image.\n"); lock_device_hotplug(); error = create_basic_memory_bitmaps(); if (error) { swsusp_close(FMODE_READ | FMODE_EXCL); swsusp_close(mode); goto Unlock; } error = swsusp_read(&flags); swsusp_close(FMODE_READ | FMODE_EXCL); swsusp_close(mode); if (!error) error = hibernation_restore(flags & SF_PLATFORM_MODE); Loading @@ -716,7 +721,6 @@ static int load_image_and_restore(void) */ int hibernate(void) { bool snapshot_test = false; unsigned int sleep_flags; int error; Loading Loading @@ -744,6 +748,9 @@ int hibernate(void) if (error) goto Exit; /* protected by system_transition_mutex */ snapshot_test = false; lock_device_hotplug(); /* Allocate memory management structures */ error = create_basic_memory_bitmaps(); Loading Loading @@ -940,6 +947,8 @@ static int software_resume(void) */ mutex_lock_nested(&system_transition_mutex, SINGLE_DEPTH_NESTING); snapshot_test = false; if (swsusp_resume_device) goto Check_image; Loading
kernel/power/power.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ asmlinkage int swsusp_save(void); /* kernel/power/hibernate.c */ extern bool freezer_test_done; extern bool snapshot_test; extern int hibernation_snapshot(int platform_mode); extern int hibernation_restore(int platform_mode); Loading
kernel/power/swap.c +6 −2 Original line number Diff line number Diff line Loading @@ -1518,9 +1518,13 @@ int swsusp_check(void) { int error; void *holder; fmode_t mode = FMODE_READ; if (snapshot_test) mode |= FMODE_EXCL; hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, FMODE_READ | FMODE_EXCL, &holder); mode, &holder); if (!IS_ERR(hib_resume_bdev)) { set_blocksize(hib_resume_bdev, PAGE_SIZE); clear_page(swsusp_header); Loading @@ -1547,7 +1551,7 @@ int swsusp_check(void) put: if (error) blkdev_put(hib_resume_bdev, FMODE_READ | FMODE_EXCL); blkdev_put(hib_resume_bdev, mode); else pr_debug("Image signature found, resuming\n"); } else { Loading