diff options
Diffstat (limited to 'drivers/base/memory.c')
| -rw-r--r-- | drivers/base/memory.c | 12 | 
1 files changed, 6 insertions, 6 deletions
| diff --git a/drivers/base/memory.c b/drivers/base/memory.c index dacb6a8418aa..fa26ffd25fa6 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -389,33 +389,33 @@ 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, valid_pages;  	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; -	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)); +	valid_pages = valid_end - valid_start;  	/* MMOP_ONLINE_KEEP */  	sprintf(buf, "%s", zone->name);  	/* MMOP_ONLINE_KERNEL */ -	zone_can_shift(start_pfn, nr_pages, ZONE_NORMAL, &zone_shift); +	zone_can_shift(valid_start, valid_pages, ZONE_NORMAL, &zone_shift);  	if (zone_shift) {  		strcat(buf, " ");  		strcat(buf, (zone + zone_shift)->name);  	}  	/* MMOP_ONLINE_MOVABLE */ -	zone_can_shift(start_pfn, nr_pages, ZONE_MOVABLE, &zone_shift); +	zone_can_shift(valid_start, valid_pages, ZONE_MOVABLE, &zone_shift);  	if (zone_shift) {  		strcat(buf, " ");  		strcat(buf, (zone + zone_shift)->name); | 
