|
@@ -416,26 +416,24 @@ static ssize_t show_valid_zones(struct device *dev,
|
|
|
struct zone *default_zone;
|
|
|
int nid;
|
|
|
|
|
|
- /*
|
|
|
- * The block contains more than one zone can not be offlined.
|
|
|
- * This can happen e.g. for ZONE_DMA and ZONE_DMA32
|
|
|
- */
|
|
|
- if (!test_pages_in_a_zone(start_pfn, start_pfn + nr_pages, &valid_start_pfn, &valid_end_pfn))
|
|
|
- return sprintf(buf, "none\n");
|
|
|
-
|
|
|
- start_pfn = valid_start_pfn;
|
|
|
- nr_pages = valid_end_pfn - start_pfn;
|
|
|
-
|
|
|
/*
|
|
|
* Check the existing zone. Make sure that we do that only on the
|
|
|
* online nodes otherwise the page_zone is not reliable
|
|
|
*/
|
|
|
if (mem->state == MEM_ONLINE) {
|
|
|
+ /*
|
|
|
+ * The block contains more than one zone can not be offlined.
|
|
|
+ * This can happen e.g. for ZONE_DMA and ZONE_DMA32
|
|
|
+ */
|
|
|
+ if (!test_pages_in_a_zone(start_pfn, start_pfn + nr_pages,
|
|
|
+ &valid_start_pfn, &valid_end_pfn))
|
|
|
+ return sprintf(buf, "none\n");
|
|
|
+ start_pfn = valid_start_pfn;
|
|
|
strcat(buf, page_zone(pfn_to_page(start_pfn))->name);
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- nid = pfn_to_nid(start_pfn);
|
|
|
+ nid = mem->nid;
|
|
|
default_zone = zone_for_pfn_range(MMOP_ONLINE_KEEP, nid, start_pfn, nr_pages);
|
|
|
strcat(buf, default_zone->name);
|
|
|
|