37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
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
|
|
@@ -1852,6 +1852,11 @@ restart:
|
|
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);
|