diff options
Diffstat (limited to 'drivers/base/memory.c')
| -rw-r--r-- | drivers/base/memory.c | 28 | 
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/base/memory.c b/drivers/base/memory.c index f46dba8b7092..dc75de9059cd 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -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  |