PM/Hibernate: Do not try to allocate too much memory too hard (rev. 2)
authorRafael J. Wysocki <rjw@sisk.pl>
Wed, 8 Jul 2009 11:24:12 +0000 (13:24 +0200)
committerRafael J. Wysocki <rjw@sisk.pl>
Mon, 14 Sep 2009 18:26:59 +0000 (20:26 +0200)
commitef4aede3f10d82adef1fb044b565ba5f08f851e0
tree58566c694aa036e75df401979bd8a85ffa718f18
parent64a473cb74a88cb4991edf985d55a266e65292e1
PM/Hibernate: Do not try to allocate too much memory too hard (rev. 2)

We want to avoid attempting to free too much memory too hard during
hibernation, so estimate the minimum size of the image to use as the
lower limit for preallocating memory.

The approach here is based on the (experimental) observation that we
can't free more page frames than the sum of:

* global_page_state(NR_SLAB_RECLAIMABLE)
* global_page_state(NR_ACTIVE_ANON)
* global_page_state(NR_INACTIVE_ANON)
* global_page_state(NR_ACTIVE_FILE)
* global_page_state(NR_INACTIVE_FILE)

minus

* global_page_state(NR_FILE_MAPPED)

Namely, if this number is subtracted from the number of saveable
pages in the system, we get a good estimate of the minimum reasonable
size of a hibernation image.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Wu Fengguang <fengguang.wu@intel.com>
kernel/power/snapshot.c