]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/sparse.c
UBUNTU: Ubuntu-4.15.0-96.97
[mirror_ubuntu-bionic-kernel.git] / mm / sparse.c
index 2609aba121e89cc5c8b656f4ef3539545c434091..02d03325767da1d58f7d09b35b67c47cffdc6f80 100644 (file)
@@ -197,7 +197,7 @@ static inline int next_present_section_nr(int section_nr)
 }
 #define for_each_present_section_nr(start, section_nr)         \
        for (section_nr = next_present_section_nr(start-1);     \
-            ((section_nr >= 0) &&                              \
+            ((section_nr != -1) &&                             \
              (section_nr < NR_MEM_SECTIONS) &&                 \
              (section_nr <= __highest_present_section_nr));    \
             section_nr = next_present_section_nr(section_nr))
@@ -661,7 +661,7 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
        unsigned long pfn;
 
        for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
-               unsigned long section_nr = pfn_to_section_nr(start_pfn);
+               unsigned long section_nr = pfn_to_section_nr(pfn);
                struct mem_section *ms;
 
                /*
@@ -779,7 +779,6 @@ int __meminit sparse_add_one_section(struct pglist_data *pgdat, unsigned long st
        struct mem_section *ms;
        struct page *memmap;
        unsigned long *usemap;
-       unsigned long flags;
        int ret;
 
        /*
@@ -798,8 +797,6 @@ int __meminit sparse_add_one_section(struct pglist_data *pgdat, unsigned long st
                return -ENOMEM;
        }
 
-       pgdat_resize_lock(pgdat, &flags);
-
        ms = __pfn_to_section(start_pfn);
        if (ms->section_mem_map & SECTION_MARKED_PRESENT) {
                ret = -EEXIST;
@@ -813,7 +810,6 @@ int __meminit sparse_add_one_section(struct pglist_data *pgdat, unsigned long st
        ret = sparse_init_one_section(ms, section_nr, memmap, usemap);
 
 out:
-       pgdat_resize_unlock(pgdat, &flags);
        if (ret <= 0) {
                kfree(usemap);
                __kfree_section_memmap(memmap);
@@ -874,10 +870,8 @@ 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;
-       struct pglist_data *pgdat = zone->zone_pgdat;
+       unsigned long *usemap = NULL;
 
-       pgdat_resize_lock(pgdat, &flags);
        if (ms->section_mem_map) {
                usemap = ms->pageblock_flags;
                memmap = sparse_decode_mem_map(ms->section_mem_map,
@@ -885,7 +879,6 @@ void sparse_remove_one_section(struct zone *zone, struct mem_section *ms,
                ms->section_mem_map = 0;
                ms->pageblock_flags = NULL;
        }
-       pgdat_resize_unlock(pgdat, &flags);
 
        clear_hwpoisoned_pages(memmap + map_offset,
                        PAGES_PER_SECTION - map_offset);