Skip to content

Commit

Permalink
[ACPI] Suspend to RAM fix
Browse files Browse the repository at this point in the history
Free some RAM before entering S3 so that upon
resume we can be sure early allocations will succeed.

http://bugzilla.kernel.org/show_bug.cgi?id=3469

Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
David Shaohua Li authored and Len Brown committed Jul 12, 2005
1 parent e2a5b42 commit 5ae947e
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions kernel/power/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@

#include "power.h"

/*This is just an arbitrary number */
#define FREE_PAGE_NUMBER (100)

DECLARE_MUTEX(pm_sem);

struct pm_ops * pm_ops = NULL;
Expand Down Expand Up @@ -49,6 +52,7 @@ void pm_set_ops(struct pm_ops * ops)
static int suspend_prepare(suspend_state_t state)
{
int error = 0;
unsigned int free_pages;

if (!pm_ops || !pm_ops->enter)
return -EPERM;
Expand All @@ -60,6 +64,16 @@ static int suspend_prepare(suspend_state_t state)
goto Thaw;
}

if ((free_pages = nr_free_pages()) < FREE_PAGE_NUMBER) {
pr_debug("PM: free some memory\n");
shrink_all_memory(FREE_PAGE_NUMBER - free_pages);
if (nr_free_pages() < FREE_PAGE_NUMBER) {
error = -ENOMEM;
printk(KERN_ERR "PM: No enough memory\n");
goto Thaw;
}
}

if (pm_ops->prepare) {
if ((error = pm_ops->prepare(state)))
goto Thaw;
Expand Down

0 comments on commit 5ae947e

Please sign in to comment.