|
@@ -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
|
|
|
* 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_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, 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 */
|
|
|
for (current_order = MAX_ORDER-1; current_order >= order;
|
|
|
--current_order) {
|
|
|
- for (i = 0; i < MIGRATE_TYPES - 1; i++) {
|
|
|
+ for (i = 0;; i++) {
|
|
|
migratetype = fallbacks[start_migratetype][i];
|
|
|
|
|
|
/* MIGRATE_RESERVE handled later if necessary */
|
|
|
if (migratetype == MIGRATE_RESERVE)
|
|
|
- continue;
|
|
|
+ break;
|
|
|
|
|
|
area = &(zone->free_area[current_order]);
|
|
|
if (list_empty(&area->free_list[migratetype]))
|