Merge tag 'spi-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
[sfrench/cifs-2.6.git] / drivers / base / memory.c
index f46dba8b7092e305ca6e7b404bbf7a2ef8ce2a12..dc75de9059cd1983401b35bffb5c697d2e55b813 100644 (file)
@@ -391,6 +391,7 @@ static ssize_t show_valid_zones(struct device *dev,
        unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
        struct page *first_page;
        struct zone *zone;
+       int zone_shift = 0;
 
        start_pfn = section_nr_to_pfn(mem->start_section_nr);
        end_pfn = start_pfn + nr_pages;
@@ -402,21 +403,26 @@ static ssize_t show_valid_zones(struct device *dev,
 
        zone = page_zone(first_page);
 
-       if (zone_idx(zone) == ZONE_MOVABLE - 1) {
-               /*The mem block is the last memoryblock of this zone.*/
-               if (end_pfn == zone_end_pfn(zone))
-                       return sprintf(buf, "%s %s\n",
-                                       zone->name, (zone + 1)->name);
+       /* MMOP_ONLINE_KEEP */
+       sprintf(buf, "%s", zone->name);
+
+       /* MMOP_ONLINE_KERNEL */
+       zone_shift = zone_can_shift(start_pfn, nr_pages, ZONE_NORMAL);
+       if (zone_shift) {
+               strcat(buf, " ");
+               strcat(buf, (zone + zone_shift)->name);
        }
 
-       if (zone_idx(zone) == ZONE_MOVABLE) {
-               /*The mem block is the first memoryblock of ZONE_MOVABLE.*/
-               if (start_pfn == zone->zone_start_pfn)
-                       return sprintf(buf, "%s %s\n",
-                                       zone->name, (zone - 1)->name);
+       /* MMOP_ONLINE_MOVABLE */
+       zone_shift = zone_can_shift(start_pfn, nr_pages, ZONE_MOVABLE);
+       if (zone_shift) {
+               strcat(buf, " ");
+               strcat(buf, (zone + zone_shift)->name);
        }
 
-       return sprintf(buf, "%s\n", zone->name);
+       strcat(buf, "\n");
+
+       return strlen(buf);
 }
 static DEVICE_ATTR(valid_zones, 0444, show_valid_zones, NULL);
 #endif