Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
[sfrench/cifs-2.6.git] / mm / sparse.c
index d1b48b691ac8c20040a262337cc7e0cbf566420f..3717ceed4177c9183626673134116b6e0f87adda 100644 (file)
@@ -748,7 +748,7 @@ static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages)
        if (!memmap)
                return;
 
-       for (i = 0; i < PAGES_PER_SECTION; i++) {
+       for (i = 0; i < nr_pages; i++) {
                if (PageHWPoison(&memmap[i])) {
                        atomic_long_sub(1, &num_poisoned_pages);
                        ClearPageHWPoison(&memmap[i]);
@@ -788,7 +788,8 @@ static void free_section_usemap(struct page *memmap, unsigned long *usemap)
                free_map_bootmem(memmap);
 }
 
-void sparse_remove_one_section(struct zone *zone, struct mem_section *ms)
+void sparse_remove_one_section(struct zone *zone, struct mem_section *ms,
+               unsigned long map_offset)
 {
        struct page *memmap = NULL;
        unsigned long *usemap = NULL, flags;
@@ -804,7 +805,8 @@ void sparse_remove_one_section(struct zone *zone, struct mem_section *ms)
        }
        pgdat_resize_unlock(pgdat, &flags);
 
-       clear_hwpoisoned_pages(memmap, PAGES_PER_SECTION);
+       clear_hwpoisoned_pages(memmap + map_offset,
+                       PAGES_PER_SECTION - map_offset);
        free_section_usemap(memmap, usemap);
 }
 #endif /* CONFIG_MEMORY_HOTREMOVE */