Upgrade to 4.4.50-rt62
[kvmfornfv.git] / kernel / drivers / base / memory.c
index 25425d3..48c0a1d 100644 (file)
@@ -388,30 +388,29 @@ static ssize_t show_valid_zones(struct device *dev,
 {
        struct memory_block *mem = to_memory_block(dev);
        unsigned long start_pfn, end_pfn;
+       unsigned long valid_start, valid_end;
        unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
-       struct page *first_page;
        struct zone *zone;
 
        start_pfn = section_nr_to_pfn(mem->start_section_nr);
        end_pfn = start_pfn + nr_pages;
-       first_page = pfn_to_page(start_pfn);
 
        /* The block contains more than one zone can not be offlined. */
-       if (!test_pages_in_a_zone(start_pfn, end_pfn))
+       if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start, &valid_end))
                return sprintf(buf, "none\n");
 
-       zone = page_zone(first_page);
+       zone = page_zone(pfn_to_page(valid_start));
 
        if (zone_idx(zone) == ZONE_MOVABLE - 1) {
                /*The mem block is the last memoryblock of this zone.*/
-               if (end_pfn == zone_end_pfn(zone))
+               if (valid_end == zone_end_pfn(zone))
                        return sprintf(buf, "%s %s\n",
                                        zone->name, (zone + 1)->name);
        }
 
        if (zone_idx(zone) == ZONE_MOVABLE) {
                /*The mem block is the first memoryblock of ZONE_MOVABLE.*/
-               if (start_pfn == zone->zone_start_pfn)
+               if (valid_start == zone->zone_start_pfn)
                        return sprintf(buf, "%s %s\n",
                                        zone->name, (zone - 1)->name);
        }