On 2019/11/27 18:47, David Hildenbrand wrote: > [...] > >> static int move_freepages(struct zone *zone, >> - struct page *start_page, struct page *end_page, >> + unsigned long start_pfn, unsigned long end_pfn, >> int migratetype, int *num_movable) >> { >> struct page *page; >> + unsigned long pfn; >> unsigned int order; >> int pages_moved = 0; >> >> - for (page = start_page; page <= end_page;) { >> - if (!pfn_valid_within(page_to_pfn(page))) { >> - page++; >> + for (pfn = start_pfn; pfn <= end_pfn;) { >> + if (!pfn_valid_within(pfn)) { >> + pfn++; >> continue; >> } >> >> + page = pfn_to_page(pfn); >> if (!PageBuddy(page)) { >> /* >> * We assume that pages that could be isolated for >> @@ -2268,8 +2270,7 @@ static int move_freepages(struct zone *zone, >> if (num_movable && >> (PageLRU(page) || __PageMovable(page))) >> (*num_movable)++; >> - >> - page++; >> + pfn++; >> continue; >> } >> >> @@ -2280,6 +2281,7 @@ static int move_freepages(struct zone *zone, >> order = page_order(page); >> move_to_free_area(page, &zone->free_area[order], migratetype); >> page += 1 << order; > > You can drop this now as well, no? should do it > >> + pfn += 1 << order; >> pages_moved += 1 << order; >> } >> >> @@ -2289,25 +2291,22 @@ static int move_freepages(struct zone *zone, >> int move_freepages_block(struct zone *zone, struct page *page, >> int migratetype, int *num_movable) >> { >> - unsigned long start_pfn, end_pfn; >> - struct page *start_page, *end_page; >> + unsigned long start_pfn, end_pfn, pfn; >> >> if (num_movable) >> *num_movable = 0; >> >> - start_pfn = page_to_pfn(page); >> + pfn = start_pfn = page_to_pfn(page); > > pfn = page_to_pfn(page); > > and ... > >> start_pfn = start_pfn & ~(pageblock_nr_pages-1); > > ... > > start_pfn = pfn & ~(pageblock_nr_pages - 1); > > instead? will change, thanks for your comments. > >> - start_page = pfn_to_page(start_pfn); >> - end_page = start_page + pageblock_nr_pages - 1; >> end_pfn = start_pfn + pageblock_nr_pages - 1; >> >> /* Do not cross zone boundaries */ >> if (!zone_spans_pfn(zone, start_pfn)) >> - start_page = page; >> + start_pfn = pfn; >> if (!zone_spans_pfn(zone, end_pfn)) >> return 0; >> >> - return move_freepages(zone, start_page, end_page, migratetype, >> + return move_freepages(zone, start_pfn, end_pfn, migratetype, >> num_movable); >> } >> >> > >