| From dhobsong@igel.co.jp Mon Oct 29 00:52:02 2012 |
| From: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Date: Mon, 29 Oct 2012 16:50:24 +0900 |
| Subject: [PATCH v2 07/58] mm: page_alloc: change fallbacks array handling |
| To: greg@kroah.com, laurent.pinchart@ideasonboard.com, horms@verge.net.au |
| Cc: ltsi-dev@lists.linuxfoundation.org, dhobsong@igel.co.jp |
| Message-ID: <1351497075-32717-8-git-send-email-dhobsong@igel.co.jp> |
| |
| |
| From: Michal Nazarewicz <mina86@mina86.com> |
| |
| 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> |
| (cherry picked from commit 6d4a49160de2c684fb59fa627bce80e200224331) |
| |
| Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| --- |
| mm/page_alloc.c | 9 +++++---- |
| 1 files changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/mm/page_alloc.c b/mm/page_alloc.c |
| index 2c38a30..d6b580c 100644 |
| --- a/mm/page_alloc.c |
| +++ b/mm/page_alloc.c |
| @@ -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])) |
| -- |
| 1.7.5.4 |
| |