|
@@ -2453,7 +2453,7 @@ static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * cpuset_node_allowed_softwall - Can we allocate on a memory node?
|
|
|
+ * cpuset_node_allowed - Can we allocate on a memory node?
|
|
|
* @node: is this an allowed node?
|
|
|
* @gfp_mask: memory allocation flags
|
|
|
*
|
|
@@ -2465,13 +2465,6 @@ static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs)
|
|
|
* flag, yes.
|
|
|
* Otherwise, no.
|
|
|
*
|
|
|
- * If __GFP_HARDWALL is set, cpuset_node_allowed_softwall() reduces to
|
|
|
- * cpuset_node_allowed_hardwall(). Otherwise, cpuset_node_allowed_softwall()
|
|
|
- * might sleep, and might allow a node from an enclosing cpuset.
|
|
|
- *
|
|
|
- * cpuset_node_allowed_hardwall() only handles the simpler case of hardwall
|
|
|
- * cpusets, and never sleeps.
|
|
|
- *
|
|
|
* The __GFP_THISNODE placement logic is really handled elsewhere,
|
|
|
* by forcibly using a zonelist starting at a specified node, and by
|
|
|
* (in get_page_from_freelist()) refusing to consider the zones for
|
|
@@ -2506,13 +2499,8 @@ static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs)
|
|
|
* TIF_MEMDIE - any node ok
|
|
|
* GFP_KERNEL - any node in enclosing hardwalled cpuset ok
|
|
|
* GFP_USER - only nodes in current tasks mems allowed ok.
|
|
|
- *
|
|
|
- * Rule:
|
|
|
- * Don't call cpuset_node_allowed_softwall if you can't sleep, unless you
|
|
|
- * pass in the __GFP_HARDWALL flag set in gfp_flag, which disables
|
|
|
- * the code that might scan up ancestor cpusets and sleep.
|
|
|
*/
|
|
|
-int __cpuset_node_allowed_softwall(int node, gfp_t gfp_mask)
|
|
|
+int __cpuset_node_allowed(int node, gfp_t gfp_mask)
|
|
|
{
|
|
|
struct cpuset *cs; /* current cpuset ancestors */
|
|
|
int allowed; /* is allocation in zone z allowed? */
|
|
@@ -2520,7 +2508,6 @@ int __cpuset_node_allowed_softwall(int node, gfp_t gfp_mask)
|
|
|
|
|
|
if (in_interrupt() || (gfp_mask & __GFP_THISNODE))
|
|
|
return 1;
|
|
|
- might_sleep_if(!(gfp_mask & __GFP_HARDWALL));
|
|
|
if (node_isset(node, current->mems_allowed))
|
|
|
return 1;
|
|
|
/*
|
|
@@ -2547,44 +2534,6 @@ int __cpuset_node_allowed_softwall(int node, gfp_t gfp_mask)
|
|
|
return allowed;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * cpuset_node_allowed_hardwall - Can we allocate on a memory node?
|
|
|
- * @node: is this an allowed node?
|
|
|
- * @gfp_mask: memory allocation flags
|
|
|
- *
|
|
|
- * If we're in interrupt, yes, we can always allocate. If __GFP_THISNODE is
|
|
|
- * set, yes, we can always allocate. If node is in our task's mems_allowed,
|
|
|
- * yes. If the task has been OOM killed and has access to memory reserves as
|
|
|
- * specified by the TIF_MEMDIE flag, yes.
|
|
|
- * Otherwise, no.
|
|
|
- *
|
|
|
- * The __GFP_THISNODE placement logic is really handled elsewhere,
|
|
|
- * by forcibly using a zonelist starting at a specified node, and by
|
|
|
- * (in get_page_from_freelist()) refusing to consider the zones for
|
|
|
- * any node on the zonelist except the first. By the time any such
|
|
|
- * calls get to this routine, we should just shut up and say 'yes'.
|
|
|
- *
|
|
|
- * Unlike the cpuset_node_allowed_softwall() variant, above,
|
|
|
- * this variant requires that the node be in the current task's
|
|
|
- * mems_allowed or that we're in interrupt. It does not scan up the
|
|
|
- * cpuset hierarchy for the nearest enclosing mem_exclusive cpuset.
|
|
|
- * It never sleeps.
|
|
|
- */
|
|
|
-int __cpuset_node_allowed_hardwall(int node, gfp_t gfp_mask)
|
|
|
-{
|
|
|
- if (in_interrupt() || (gfp_mask & __GFP_THISNODE))
|
|
|
- return 1;
|
|
|
- if (node_isset(node, current->mems_allowed))
|
|
|
- return 1;
|
|
|
- /*
|
|
|
- * Allow tasks that have access to memory reserves because they have
|
|
|
- * been OOM killed to get memory anywhere.
|
|
|
- */
|
|
|
- if (unlikely(test_thread_flag(TIF_MEMDIE)))
|
|
|
- return 1;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* cpuset_mem_spread_node() - On which node to begin search for a file page
|
|
|
* cpuset_slab_spread_node() - On which node to begin search for a slab page
|