git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allow vmsplice to work in 32-bit mode on ppc64
[pandora-kernel.git]
/
mm
/
oom_kill.c
diff --git
a/mm/oom_kill.c
b/mm/oom_kill.c
index
223d9cc
..
2f39169
100644
(file)
--- a/
mm/oom_kill.c
+++ b/
mm/oom_kill.c
@@
-60,12
+60,6
@@
unsigned long badness(struct task_struct *p, unsigned long uptime)
return 0;
}
return 0;
}
- /*
- * swapoff can easily use up all memory, so kill those first.
- */
- if (p->flags & PF_SWAPOFF)
- return ULONG_MAX;
-
/*
* The memory size of the process is the basis for the badness.
*/
/*
* The memory size of the process is the basis for the badness.
*/
@@
-76,6
+70,12
@@
unsigned long badness(struct task_struct *p, unsigned long uptime)
*/
task_unlock(p);
*/
task_unlock(p);
+ /*
+ * swapoff can easily use up all memory, so kill those first.
+ */
+ if (p->flags & PF_SWAPOFF)
+ return ULONG_MAX;
+
/*
* Processes which fork a lot of child processes are likely
* a good choice. We add half the vmsize of the children if they
/*
* Processes which fork a lot of child processes are likely
* a good choice. We add half the vmsize of the children if they
@@
-174,10
+174,15
@@
static inline int constrained_alloc(struct zonelist *zonelist, gfp_t gfp_mask)
{
#ifdef CONFIG_NUMA
struct zone **z;
{
#ifdef CONFIG_NUMA
struct zone **z;
- nodemask_t nodes = node_online_map;
+ nodemask_t nodes;
+ int node;
+ /* node has memory ? */
+ for_each_online_node(node)
+ if (NODE_DATA(node)->node_present_pages)
+ node_set(node, nodes);
for (z = zonelist->zones; *z; z++)
for (z = zonelist->zones; *z; z++)
- if (cpuset_zone_allowed(*z, gfp_mask))
+ if (cpuset_zone_allowed
_softwall
(*z, gfp_mask))
node_clear(zone_to_nid(*z), nodes);
else
return CONSTRAINT_CPUSET;
node_clear(zone_to_nid(*z), nodes);
else
return CONSTRAINT_CPUSET;
@@
-315,7
+320,7
@@
static int oom_kill_task(struct task_struct *p)
* Don't kill the process if any threads are set to OOM_DISABLE
*/
do_each_thread(g, q) {
* Don't kill the process if any threads are set to OOM_DISABLE
*/
do_each_thread(g, q) {
- if (q->mm == mm &&
p
->oomkilladj == OOM_DISABLE)
+ if (q->mm == mm &&
q
->oomkilladj == OOM_DISABLE)
return 1;
} while_each_thread(g, q);
return 1;
} while_each_thread(g, q);