]> Pileus Git - ~andy/linux/blobdiff - kernel/power/snapshot.c
Merge branch 'slab/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg...
[~andy/linux] / kernel / power / snapshot.c
index 349587bb03e1edb64dc5609eee61fdf90a517af0..98c3b34a4cffcedeae812de0ddc947f874cef839 100644 (file)
@@ -352,7 +352,7 @@ static int create_mem_extents(struct list_head *list, gfp_t gfp_mask)
                struct mem_extent *ext, *cur, *aux;
 
                zone_start = zone->zone_start_pfn;
-               zone_end = zone->zone_start_pfn + zone->spanned_pages;
+               zone_end = zone_end_pfn(zone);
 
                list_for_each_entry(ext, list, hook)
                        if (zone_start <= ext->end)
@@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
        struct memory_bitmap *bm1, *bm2;
        int error = 0;
 
-       BUG_ON(forbidden_pages_map || free_pages_map);
+       if (forbidden_pages_map && free_pages_map)
+               return 0;
+       else
+               BUG_ON(forbidden_pages_map || free_pages_map);
 
        bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
        if (!bm1)
@@ -884,7 +887,7 @@ static unsigned int count_highmem_pages(void)
                        continue;
 
                mark_free_pages(zone);
-               max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
+               max_zone_pfn = zone_end_pfn(zone);
                for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
                        if (saveable_highmem_page(zone, pfn))
                                n++;
@@ -948,7 +951,7 @@ static unsigned int count_data_pages(void)
                        continue;
 
                mark_free_pages(zone);
-               max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
+               max_zone_pfn = zone_end_pfn(zone);
                for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
                        if (saveable_page(zone, pfn))
                                n++;
@@ -1041,7 +1044,7 @@ copy_data_pages(struct memory_bitmap *copy_bm, struct memory_bitmap *orig_bm)
                unsigned long max_zone_pfn;
 
                mark_free_pages(zone);
-               max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
+               max_zone_pfn = zone_end_pfn(zone);
                for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
                        if (page_is_saveable(zone, pfn))
                                memory_bm_set_bit(orig_bm, pfn);
@@ -1093,7 +1096,7 @@ void swsusp_free(void)
        unsigned long pfn, max_zone_pfn;
 
        for_each_populated_zone(zone) {
-               max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
+               max_zone_pfn = zone_end_pfn(zone);
                for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
                        if (pfn_valid(pfn)) {
                                struct page *page = pfn_to_page(pfn);
@@ -1755,7 +1758,7 @@ static int mark_unsafe_pages(struct memory_bitmap *bm)
 
        /* Clear page flags */
        for_each_populated_zone(zone) {
-               max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
+               max_zone_pfn = zone_end_pfn(zone);
                for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
                        if (pfn_valid(pfn))
                                swsusp_unset_page_free(pfn_to_page(pfn));