Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1435594 > unrolled thread

[PATCH 21/31] mm, page_alloc: Wake kswapd based on the highest eligible zone

Started byMel Gorman <mgorman@techsingularity.net>
First post2016-07-01 22:10 +0200
Last post2016-07-01 22:10 +0200
Articles 1 — 1 participant

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 21/31] mm, page_alloc: Wake kswapd based on the highest eligible zone Mel Gorman <mgorman@techsingularity.net> - 2016-07-01 22:10 +0200

#1435594 — [PATCH 21/31] mm, page_alloc: Wake kswapd based on the highest eligible zone

FromMel Gorman <mgorman@techsingularity.net>
Date2016-07-01 22:10 +0200
Subject[PATCH 21/31] mm, page_alloc: Wake kswapd based on the highest eligible zone
Message-ID<rQcVd-2Ax-75@gated-at.bofh.it>
The ac_classzone_idx is used as the basis for waking kswapd and that is based
on the preferred zoneref. If the preferred zoneref's highest zone is lower
than what is available on other nodes, it's possible that kswapd is woken
on a zone with only higher, but still eligible, zones. As classzone_idx
is strictly adhered to now, it causes a problem because eligible pages
are skipped.

For example, node 0 has only DMA32 and node 1 has only NORMAL. An allocating
context running on node 0 may wake kswapd on node 1 telling it to skip
all NORMAL pages.

Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
---
 mm/page_alloc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 2fe2fbb4f2ad..b10bee2e5968 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3415,7 +3415,7 @@ static void wake_all_kswapds(unsigned int order, const struct alloc_context *ac)
 	for_each_zone_zonelist_nodemask(zone, z, ac->zonelist,
 					ac->high_zoneidx, ac->nodemask) {
 		if (last_pgdat != zone->zone_pgdat)
-			wakeup_kswapd(zone, order, ac_classzone_idx(ac));
+			wakeup_kswapd(zone, order, ac->high_zoneidx);
 		last_pgdat = zone->zone_pgdat;
 	}
 }
-- 
2.6.4

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web