diff options
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/snapshot.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index b4a923e59bc5..72787f925630 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
| @@ -33,7 +33,6 @@ | |||
| 33 | 33 | ||
| 34 | #include "power.h" | 34 | #include "power.h" |
| 35 | 35 | ||
| 36 | |||
| 37 | #ifdef CONFIG_HIGHMEM | 36 | #ifdef CONFIG_HIGHMEM |
| 38 | struct highmem_page { | 37 | struct highmem_page { |
| 39 | char *data; | 38 | char *data; |
| @@ -88,12 +87,10 @@ static int save_highmem_zone(struct zone *zone) | |||
| 88 | } | 87 | } |
| 89 | return 0; | 88 | return 0; |
| 90 | } | 89 | } |
| 91 | #endif /* CONFIG_HIGHMEM */ | ||
| 92 | 90 | ||
| 93 | 91 | ||
| 94 | static int save_highmem(void) | 92 | static int save_highmem(void) |
| 95 | { | 93 | { |
| 96 | #ifdef CONFIG_HIGHMEM | ||
| 97 | struct zone *zone; | 94 | struct zone *zone; |
| 98 | int res = 0; | 95 | int res = 0; |
| 99 | 96 | ||
| @@ -104,13 +101,11 @@ static int save_highmem(void) | |||
| 104 | if (res) | 101 | if (res) |
| 105 | return res; | 102 | return res; |
| 106 | } | 103 | } |
| 107 | #endif | ||
| 108 | return 0; | 104 | return 0; |
| 109 | } | 105 | } |
| 110 | 106 | ||
| 111 | int restore_highmem(void) | 107 | int restore_highmem(void) |
| 112 | { | 108 | { |
| 113 | #ifdef CONFIG_HIGHMEM | ||
| 114 | printk("swsusp: Restoring Highmem\n"); | 109 | printk("swsusp: Restoring Highmem\n"); |
| 115 | while (highmem_copy) { | 110 | while (highmem_copy) { |
| 116 | struct highmem_page *save = highmem_copy; | 111 | struct highmem_page *save = highmem_copy; |
| @@ -123,9 +118,12 @@ int restore_highmem(void) | |||
| 123 | free_page((long) save->data); | 118 | free_page((long) save->data); |
| 124 | kfree(save); | 119 | kfree(save); |
| 125 | } | 120 | } |
| 126 | #endif | ||
| 127 | return 0; | 121 | return 0; |
| 128 | } | 122 | } |
| 123 | #else | ||
| 124 | static int save_highmem(void) { return 0; } | ||
| 125 | int restore_highmem(void) { return 0; } | ||
| 126 | #endif /* CONFIG_HIGHMEM */ | ||
| 129 | 127 | ||
| 130 | 128 | ||
| 131 | static int pfn_is_nosave(unsigned long pfn) | 129 | static int pfn_is_nosave(unsigned long pfn) |
| @@ -144,10 +142,10 @@ static int pfn_is_nosave(unsigned long pfn) | |||
| 144 | * isn't part of a free chunk of pages. | 142 | * isn't part of a free chunk of pages. |
| 145 | */ | 143 | */ |
| 146 | 144 | ||
| 147 | static int saveable(struct zone * zone, unsigned long * zone_pfn) | 145 | static int saveable(struct zone *zone, unsigned long *zone_pfn) |
| 148 | { | 146 | { |
| 149 | unsigned long pfn = *zone_pfn + zone->zone_start_pfn; | 147 | unsigned long pfn = *zone_pfn + zone->zone_start_pfn; |
| 150 | struct page * page; | 148 | struct page *page; |
| 151 | 149 | ||
| 152 | if (!pfn_valid(pfn)) | 150 | if (!pfn_valid(pfn)) |
| 153 | return 0; | 151 | return 0; |
| @@ -201,7 +199,7 @@ static void copy_data_pages(struct pbe *pblist) | |||
| 201 | SetPageNosaveFree(virt_to_page(p->address)); | 199 | SetPageNosaveFree(virt_to_page(p->address)); |
| 202 | for (zone_pfn = 0; zone_pfn < zone->spanned_pages; ++zone_pfn) { | 200 | for (zone_pfn = 0; zone_pfn < zone->spanned_pages; ++zone_pfn) { |
| 203 | if (saveable(zone, &zone_pfn)) { | 201 | if (saveable(zone, &zone_pfn)) { |
| 204 | struct page * page; | 202 | struct page *page; |
| 205 | page = pfn_to_page(zone_pfn + zone->zone_start_pfn); | 203 | page = pfn_to_page(zone_pfn + zone->zone_start_pfn); |
| 206 | BUG_ON(!pbe); | 204 | BUG_ON(!pbe); |
| 207 | pbe->orig_address = (unsigned long)page_address(page); | 205 | pbe->orig_address = (unsigned long)page_address(page); |
| @@ -295,7 +293,7 @@ static void *alloc_image_page(void) | |||
| 295 | * On each page we set up a list of struct_pbe elements. | 293 | * On each page we set up a list of struct_pbe elements. |
| 296 | */ | 294 | */ |
| 297 | 295 | ||
| 298 | struct pbe * alloc_pagedir(unsigned nr_pages) | 296 | struct pbe *alloc_pagedir(unsigned nr_pages) |
| 299 | { | 297 | { |
| 300 | unsigned num; | 298 | unsigned num; |
| 301 | struct pbe *pblist, *pbe; | 299 | struct pbe *pblist, *pbe; |
| @@ -304,12 +302,12 @@ struct pbe * alloc_pagedir(unsigned nr_pages) | |||
| 304 | return NULL; | 302 | return NULL; |
| 305 | 303 | ||
| 306 | pr_debug("alloc_pagedir(): nr_pages = %d\n", nr_pages); | 304 | pr_debug("alloc_pagedir(): nr_pages = %d\n", nr_pages); |
| 307 | pblist = (struct pbe *)alloc_image_page(); | 305 | pblist = alloc_image_page(); |
| 308 | /* FIXME: rewrite this ugly loop */ | 306 | /* FIXME: rewrite this ugly loop */ |
| 309 | for (pbe = pblist, num = PBES_PER_PAGE; pbe && num < nr_pages; | 307 | for (pbe = pblist, num = PBES_PER_PAGE; pbe && num < nr_pages; |
| 310 | pbe = pbe->next, num += PBES_PER_PAGE) { | 308 | pbe = pbe->next, num += PBES_PER_PAGE) { |
| 311 | pbe += PB_PAGE_SKIP; | 309 | pbe += PB_PAGE_SKIP; |
| 312 | pbe->next = (struct pbe *)alloc_image_page(); | 310 | pbe->next = alloc_image_page(); |
| 313 | } | 311 | } |
| 314 | if (!pbe) { /* get_zeroed_page() failed */ | 312 | if (!pbe) { /* get_zeroed_page() failed */ |
| 315 | free_pagedir(pblist); | 313 | free_pagedir(pblist); |
