2010-07-07 11:12:45 +00:00
|
|
|
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
|
|
|
Subject: [PATCH 09/31] mm: system wide ALLOC_NO_WATERMARK
|
|
|
|
Patch-mainline: not yet
|
|
|
|
|
|
|
|
The reserve is proportionally distributed over all (!highmem) zones in the
|
|
|
|
system. So we need to allow an emergency allocation access to all zones. In
|
|
|
|
order to do that we need to break out of any mempolicy boundaries we might
|
|
|
|
have.
|
|
|
|
|
|
|
|
In my opinion that does not break mempolicies as those are user oriented
|
|
|
|
and not system oriented. That is, system allocations are not guaranteed to be
|
|
|
|
within mempolicy boundaries. For instance IRQs don't even have a mempolicy.
|
|
|
|
|
|
|
|
So breaking out of mempolicy boundaries for 'rare' emergency allocations,
|
|
|
|
which are always system allocations (as opposed to user) is ok.
|
|
|
|
|
|
|
|
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
|
|
|
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
|
|
|
|
---
|
|
|
|
mm/page_alloc.c | 5 +++++
|
|
|
|
1 file changed, 5 insertions(+)
|
|
|
|
|
|
|
|
--- a/mm/page_alloc.c
|
|
|
|
+++ b/mm/page_alloc.c
|
2011-04-19 20:09:59 +00:00
|
|
|
@@ -1995,6 +1995,11 @@ restart:
|
2010-07-07 11:12:45 +00:00
|
|
|
rebalance:
|
|
|
|
/* Allocate without watermarks if the context allows */
|
|
|
|
if (alloc_flags & ALLOC_NO_WATERMARKS) {
|
|
|
|
+ /*
|
|
|
|
+ * break out mempolicy boundaries
|
|
|
|
+ */
|
|
|
|
+ zonelist = node_zonelist(numa_node_id(), gfp_mask);
|
|
|
|
+
|
|
|
|
page = __alloc_pages_high_priority(gfp_mask, order,
|
|
|
|
zonelist, high_zoneidx, nodemask,
|
|
|
|
preferred_zone, migratetype);
|