aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/power/swsusp.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/power/swsusp.c')
-rw-r--r--kernel/power/swsusp.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/kernel/power/swsusp.c b/kernel/power/swsusp.c
index f77f9397a364..6d5ceaf4c364 100644
--- a/kernel/power/swsusp.c
+++ b/kernel/power/swsusp.c
@@ -626,7 +626,7 @@ int swsusp_write(struct pbe *pblist, unsigned int nr_pages)
626 626
627int swsusp_shrink_memory(void) 627int swsusp_shrink_memory(void)
628{ 628{
629 long tmp; 629 long size, tmp;
630 struct zone *zone; 630 struct zone *zone;
631 unsigned long pages = 0; 631 unsigned long pages = 0;
632 unsigned int i = 0; 632 unsigned int i = 0;
@@ -634,11 +634,11 @@ int swsusp_shrink_memory(void)
634 634
635 printk("Shrinking memory... "); 635 printk("Shrinking memory... ");
636 do { 636 do {
637#ifdef FAST_FREE 637 size = 2 * count_highmem_pages();
638 tmp = 2 * count_highmem_pages(); 638 size += size / 50 + count_data_pages();
639 tmp += tmp / 50 + count_data_pages(); 639 size += (size + PBES_PER_PAGE - 1) / PBES_PER_PAGE +
640 tmp += (tmp + PBES_PER_PAGE - 1) / PBES_PER_PAGE +
641 PAGES_FOR_IO; 640 PAGES_FOR_IO;
641 tmp = size;
642 for_each_zone (zone) 642 for_each_zone (zone)
643 if (!is_highmem(zone)) 643 if (!is_highmem(zone))
644 tmp -= zone->free_pages; 644 tmp -= zone->free_pages;
@@ -647,11 +647,10 @@ int swsusp_shrink_memory(void)
647 if (!tmp) 647 if (!tmp)
648 return -ENOMEM; 648 return -ENOMEM;
649 pages += tmp; 649 pages += tmp;
650 } else if (size > (IMAGE_SIZE * 1024 * 1024) / PAGE_SIZE) {
651 tmp = shrink_all_memory(SHRINK_BITE);
652 pages += tmp;
650 } 653 }
651#else
652 tmp = shrink_all_memory(SHRINK_BITE);
653 pages += tmp;
654#endif
655 printk("\b%c", p[i++%4]); 654 printk("\b%c", p[i++%4]);
656 } while (tmp > 0); 655 } while (tmp > 0);
657 printk("\bdone (%lu pages freed)\n", pages); 656 printk("\bdone (%lu pages freed)\n", pages);