aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2012-03-28 17:30:14 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2012-03-28 17:30:14 -0400
commit7b5179ac14dbad945647ac9e76bbbf14ed9e0dbe (patch)
tree39213e51f3a19f3198929456f8ab4210a906674d /kernel
parent9b78c1da60b3c62ccdd1509f0902ad19ceaf776b (diff)
PM / Hibernate: Disable usermode helpers right before freezing tasks
There is no reason to call usermodehelper_disable() before creating memory bitmaps in hibernate() and software_resume(), so call it right before freeze_processes(), in accordance with the other suspend and hibernation code. Consequently, call usermodehelper_enable() right after the thawing of tasks rather than after freeing the memory bitmaps. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: stable@vger.kernel.org
Diffstat (limited to 'kernel')
-rw-r--r--kernel/power/hibernate.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
index 0a186cfde788..639ff6e4ae9e 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
@@ -611,19 +611,19 @@ int hibernate(void)
611 if (error) 611 if (error)
612 goto Exit; 612 goto Exit;
613 613
614 error = usermodehelper_disable();
615 if (error)
616 goto Exit;
617
618 /* Allocate memory management structures */ 614 /* Allocate memory management structures */
619 error = create_basic_memory_bitmaps(); 615 error = create_basic_memory_bitmaps();
620 if (error) 616 if (error)
621 goto Enable_umh; 617 goto Exit;
622 618
623 printk(KERN_INFO "PM: Syncing filesystems ... "); 619 printk(KERN_INFO "PM: Syncing filesystems ... ");
624 sys_sync(); 620 sys_sync();
625 printk("done.\n"); 621 printk("done.\n");
626 622
623 error = usermodehelper_disable();
624 if (error)
625 goto Exit;
626
627 error = freeze_processes(); 627 error = freeze_processes();
628 if (error) 628 if (error)
629 goto Free_bitmaps; 629 goto Free_bitmaps;
@@ -660,9 +660,8 @@ int hibernate(void)
660 freezer_test_done = false; 660 freezer_test_done = false;
661 661
662 Free_bitmaps: 662 Free_bitmaps:
663 free_basic_memory_bitmaps();
664 Enable_umh:
665 usermodehelper_enable(); 663 usermodehelper_enable();
664 free_basic_memory_bitmaps();
666 Exit: 665 Exit:
667 pm_notifier_call_chain(PM_POST_HIBERNATION); 666 pm_notifier_call_chain(PM_POST_HIBERNATION);
668 pm_restore_console(); 667 pm_restore_console();
@@ -777,15 +776,13 @@ static int software_resume(void)
777 if (error) 776 if (error)
778 goto close_finish; 777 goto close_finish;
779 778
780 error = usermodehelper_disable(); 779 error = create_basic_memory_bitmaps();
781 if (error) 780 if (error)
782 goto close_finish; 781 goto close_finish;
783 782
784 error = create_basic_memory_bitmaps(); 783 error = usermodehelper_disable();
785 if (error) { 784 if (error)
786 usermodehelper_enable();
787 goto close_finish; 785 goto close_finish;
788 }
789 786
790 pr_debug("PM: Preparing processes for restore.\n"); 787 pr_debug("PM: Preparing processes for restore.\n");
791 error = freeze_processes(); 788 error = freeze_processes();
@@ -805,8 +802,8 @@ static int software_resume(void)
805 swsusp_free(); 802 swsusp_free();
806 thaw_processes(); 803 thaw_processes();
807 Done: 804 Done:
808 free_basic_memory_bitmaps();
809 usermodehelper_enable(); 805 usermodehelper_enable();
806 free_basic_memory_bitmaps();
810 Finish: 807 Finish:
811 pm_notifier_call_chain(PM_POST_RESTORE); 808 pm_notifier_call_chain(PM_POST_RESTORE);
812 pm_restore_console(); 809 pm_restore_console();