mm: page_alloc: change fallbacks array handling
This commit adds a row for MIGRATE_ISOLATE type to the fallbacks array which was missing from it. It also, changes the array traversal logic a little making MIGRATE_RESERVE an end marker. The letter change, removes the implicit MIGRATE_UNMOVABLE from the end of each row which was read by __rmqueue_fallback() function. Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Mel Gorman <mel@csn.ul.ie> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Tested-by: Rob Clark <rob.clark@linaro.org> Tested-by: Ohad Ben-Cohen <ohad@wizery.com> Tested-by: Benjamin Gaignard <benjamin.gaignard@linaro.org> Tested-by: Robert Nelson <robertcnelson@gmail.com> Tested-by: Barry Song <Baohua.Song@csr.com>
This commit is contained in:
committed by
Marek Szyprowski
parent
041d3a8cdc
commit
6d4a49160d
@@ -875,11 +875,12 @@ struct page *__rmqueue_smallest(struct zone *zone, unsigned int order,
|
|||||||
* This array describes the order lists are fallen back to when
|
* This array describes the order lists are fallen back to when
|
||||||
* the free lists for the desirable migrate type are depleted
|
* the free lists for the desirable migrate type are depleted
|
||||||
*/
|
*/
|
||||||
static int fallbacks[MIGRATE_TYPES][MIGRATE_TYPES-1] = {
|
static int fallbacks[MIGRATE_TYPES][3] = {
|
||||||
[MIGRATE_UNMOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
|
[MIGRATE_UNMOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
|
||||||
[MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
|
[MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
|
||||||
[MIGRATE_MOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE },
|
[MIGRATE_MOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE },
|
||||||
[MIGRATE_RESERVE] = { MIGRATE_RESERVE, MIGRATE_RESERVE, MIGRATE_RESERVE }, /* Never used */
|
[MIGRATE_RESERVE] = { MIGRATE_RESERVE }, /* Never used */
|
||||||
|
[MIGRATE_ISOLATE] = { MIGRATE_RESERVE }, /* Never used */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -974,12 +975,12 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype)
|
|||||||
/* Find the largest possible block of pages in the other list */
|
/* Find the largest possible block of pages in the other list */
|
||||||
for (current_order = MAX_ORDER-1; current_order >= order;
|
for (current_order = MAX_ORDER-1; current_order >= order;
|
||||||
--current_order) {
|
--current_order) {
|
||||||
for (i = 0; i < MIGRATE_TYPES - 1; i++) {
|
for (i = 0;; i++) {
|
||||||
migratetype = fallbacks[start_migratetype][i];
|
migratetype = fallbacks[start_migratetype][i];
|
||||||
|
|
||||||
/* MIGRATE_RESERVE handled later if necessary */
|
/* MIGRATE_RESERVE handled later if necessary */
|
||||||
if (migratetype == MIGRATE_RESERVE)
|
if (migratetype == MIGRATE_RESERVE)
|
||||||
continue;
|
break;
|
||||||
|
|
||||||
area = &(zone->free_area[current_order]);
|
area = &(zone->free_area[current_order]);
|
||||||
if (list_empty(&area->free_list[migratetype]))
|
if (list_empty(&area->free_list[migratetype]))
|
||||||
|
Reference in New Issue
Block a user