Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbc0e4ce authored by KAMEZAWA Hiroyuki's avatar KAMEZAWA Hiroyuki Committed by Linus Torvalds
Browse files

memory hotremove: unset migrate type "ISOLATE" after removal



We should unset migrate type "ISOLATE" when we successfully removed memory.
 But current code has BUG and cannot works well.

This patch also includes bugfix?  to change get_pageblock_flags to
get_pageblock_migratetype().

Thanks to Badari Pulavarty for finding this.

Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: default avatarBadari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3ad33b24
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -574,8 +574,8 @@ repeat:
	/* Ok, all of our target is islaoted.
	/* Ok, all of our target is islaoted.
	   We cannot do rollback at this point. */
	   We cannot do rollback at this point. */
	offline_isolated_pages(start_pfn, end_pfn);
	offline_isolated_pages(start_pfn, end_pfn);
	/* reset pagetype flags */
	/* reset pagetype flags and makes migrate type to be MOVABLE */
	start_isolate_page_range(start_pfn, end_pfn);
	undo_isolate_page_range(start_pfn, end_pfn);
	/* removal success */
	/* removal success */
	zone->present_pages -= offlined_pages;
	zone->present_pages -= offlined_pages;
	zone->zone_pgdat->node_present_pages -= offlined_pages;
	zone->zone_pgdat->node_present_pages -= offlined_pages;
+3 −3
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn)
	return 0;
	return 0;
undo:
undo:
	for (pfn = start_pfn;
	for (pfn = start_pfn;
	     pfn <= undo_pfn;
	     pfn < undo_pfn;
	     pfn += pageblock_nr_pages)
	     pfn += pageblock_nr_pages)
		unset_migratetype_isolate(pfn_to_page(pfn));
		unset_migratetype_isolate(pfn_to_page(pfn));


@@ -76,7 +76,7 @@ undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn)
	     pfn < end_pfn;
	     pfn < end_pfn;
	     pfn += pageblock_nr_pages) {
	     pfn += pageblock_nr_pages) {
		page = __first_valid_page(pfn, pageblock_nr_pages);
		page = __first_valid_page(pfn, pageblock_nr_pages);
		if (!page || get_pageblock_flags(page) != MIGRATE_ISOLATE)
		if (!page || get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
			continue;
			continue;
		unset_migratetype_isolate(page);
		unset_migratetype_isolate(page);
	}
	}
@@ -126,7 +126,7 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn)
	 */
	 */
	for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) {
	for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) {
		page = __first_valid_page(pfn, pageblock_nr_pages);
		page = __first_valid_page(pfn, pageblock_nr_pages);
		if (page && get_pageblock_flags(page) != MIGRATE_ISOLATE)
		if (page && get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
			break;
			break;
	}
	}
	if (pfn < end_pfn)
	if (pfn < end_pfn)