PM / hibernate: Create memory bitmaps after freezing user space
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 30 Aug 2013 12:19:38 +0000 (14:19 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 31 Aug 2013 00:49:33 +0000 (02:49 +0200)
commit8fd37a4c9822d58c93f764864582aa13112b1513
tree6354cde58772d623391270c1a33e11ab66f66dad
parente0ae8fee0e11c1a8e9b45ab14ab5fe58d87f031d
PM / hibernate: Create memory bitmaps after freezing user space

The hibernation core uses special memory bitmaps during image
creation and restoration and traditionally those bitmaps are
allocated before freezing tasks, because in the past GFP_KERNEL
allocations might not work after all tasks had been frozen.

However, this is an anachronism, because hibernation_snapshot()
now calls hibernate_preallocate_memory() which allocates memory
for the image upfront anyway, so the memory bitmaps may be
allocated after freezing user space safely.

For this reason, move all of the create_basic_memory_bitmaps()
calls after freeze_processes() and all of the corresponding
free_basic_memory_bitmaps() calls before thaw_processes().

This will allow us to hold device_hotplug_lock around hibernation
without the need to worry about freezing issues with user space
processes attempting to acquire it via sysfs attributes after the
creation of memory bitmaps and before the freezing of tasks.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Toshi Kani <toshi.kani@hp.com>
kernel/power/hibernate.c
kernel/power/user.c