diff options
| author | Anton Altaparmakov <aia21@cantab.net> | 2005-10-30 16:00:04 -0500 |
|---|---|---|
| committer | Anton Altaparmakov <aia21@cantab.net> | 2005-10-30 16:00:04 -0500 |
| commit | 07b188ab773e183871e57b33ae37bf635c9f12ba (patch) | |
| tree | 311df8a0dd12fb7bd3e9b5b1a5ca500f0428d679 /kernel/power | |
| parent | 47c564e10f219f867bdb49225972749a43485a47 (diff) | |
| parent | 9f75e1eff3edb2bb07349b94c28f4f2a6c66ca43 (diff) | |
Merge branch 'master' of /usr/src/ntfs-2.6/
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/swsusp.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/kernel/power/swsusp.c b/kernel/power/swsusp.c index 2d5c45676442..016504ccfccf 100644 --- a/kernel/power/swsusp.c +++ b/kernel/power/swsusp.c | |||
| @@ -578,15 +578,23 @@ static int save_highmem_zone(struct zone *zone) | |||
| 578 | continue; | 578 | continue; |
| 579 | page = pfn_to_page(pfn); | 579 | page = pfn_to_page(pfn); |
| 580 | /* | 580 | /* |
| 581 | * This condition results from rvmalloc() sans vmalloc_32() | 581 | * PageReserved results from rvmalloc() sans vmalloc_32() |
| 582 | * and architectural memory reservations. This should be | 582 | * and architectural memory reservations. |
| 583 | * corrected eventually when the cases giving rise to this | 583 | * |
| 584 | * are better understood. | 584 | * rvmalloc should not cause this, because all implementations |
| 585 | * appear to always be using vmalloc_32 on architectures with | ||
| 586 | * highmem. This is a good thing, because we would like to save | ||
| 587 | * rvmalloc pages. | ||
| 588 | * | ||
| 589 | * It appears to be triggered by pages which do not point to | ||
| 590 | * valid memory (see arch/i386/mm/init.c:one_highpage_init(), | ||
| 591 | * which sets PageReserved if the page does not point to valid | ||
| 592 | * RAM. | ||
| 593 | * | ||
| 594 | * XXX: must remove usage of PageReserved! | ||
| 585 | */ | 595 | */ |
| 586 | if (PageReserved(page)) { | 596 | if (PageReserved(page)) |
| 587 | printk("highmem reserved page?!\n"); | ||
| 588 | continue; | 597 | continue; |
| 589 | } | ||
| 590 | BUG_ON(PageNosave(page)); | 598 | BUG_ON(PageNosave(page)); |
| 591 | if (PageNosaveFree(page)) | 599 | if (PageNosaveFree(page)) |
| 592 | continue; | 600 | continue; |
| @@ -672,10 +680,9 @@ static int saveable(struct zone * zone, unsigned long * zone_pfn) | |||
| 672 | return 0; | 680 | return 0; |
| 673 | 681 | ||
| 674 | page = pfn_to_page(pfn); | 682 | page = pfn_to_page(pfn); |
| 675 | BUG_ON(PageReserved(page) && PageNosave(page)); | ||
| 676 | if (PageNosave(page)) | 683 | if (PageNosave(page)) |
| 677 | return 0; | 684 | return 0; |
| 678 | if (PageReserved(page) && pfn_is_nosave(pfn)) { | 685 | if (pfn_is_nosave(pfn)) { |
| 679 | pr_debug("[nosave pfn 0x%lx]", pfn); | 686 | pr_debug("[nosave pfn 0x%lx]", pfn); |
| 680 | return 0; | 687 | return 0; |
| 681 | } | 688 | } |
| @@ -1095,7 +1102,7 @@ static inline void eat_page(void *page) | |||
| 1095 | *eaten_memory = c; | 1102 | *eaten_memory = c; |
| 1096 | } | 1103 | } |
| 1097 | 1104 | ||
| 1098 | unsigned long get_usable_page(unsigned gfp_mask) | 1105 | unsigned long get_usable_page(gfp_t gfp_mask) |
| 1099 | { | 1106 | { |
| 1100 | unsigned long m; | 1107 | unsigned long m; |
| 1101 | 1108 | ||
