Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Michal Nazarewicz and committed by
Marek Szyprowski
6d4a4916 041d3a8c

+5 -4
+5 -4
mm/page_alloc.c
··· 875 875 * This array describes the order lists are fallen back to when 876 876 * the free lists for the desirable migrate type are depleted 877 877 */ 878 - static int fallbacks[MIGRATE_TYPES][MIGRATE_TYPES-1] = { 878 + static int fallbacks[MIGRATE_TYPES][3] = { 879 879 [MIGRATE_UNMOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE }, 880 880 [MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE }, 881 881 [MIGRATE_MOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE }, 882 - [MIGRATE_RESERVE] = { MIGRATE_RESERVE, MIGRATE_RESERVE, MIGRATE_RESERVE }, /* Never used */ 882 + [MIGRATE_RESERVE] = { MIGRATE_RESERVE }, /* Never used */ 883 + [MIGRATE_ISOLATE] = { MIGRATE_RESERVE }, /* Never used */ 883 884 }; 884 885 885 886 /* ··· 975 974 /* Find the largest possible block of pages in the other list */ 976 975 for (current_order = MAX_ORDER-1; current_order >= order; 977 976 --current_order) { 978 - for (i = 0; i < MIGRATE_TYPES - 1; i++) { 977 + for (i = 0;; i++) { 979 978 migratetype = fallbacks[start_migratetype][i]; 980 979 981 980 /* MIGRATE_RESERVE handled later if necessary */ 982 981 if (migratetype == MIGRATE_RESERVE) 983 - continue; 982 + break; 984 983 985 984 area = &(zone->free_area[current_order]); 986 985 if (list_empty(&area->free_list[migratetype]))