projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
USB: cxacru: export detailed device info through sysfs
[firefly-linux-kernel-4.4.55.git]
/
mm
/
oom_kill.c
diff --git
a/mm/oom_kill.c
b/mm/oom_kill.c
index 64cf3c2146348b0e1cba3fd98d64354bcb466c4a..3791edfffeebe9595f54ce7d04fe424832aa6af5 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,7
+174,14
@@
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;
+
+ nodes_clear(nodes);
+ /* 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++)
if (cpuset_zone_allowed_softwall(*z, gfp_mask))
for (z = zonelist->zones; *z; z++)
if (cpuset_zone_allowed_softwall(*z, gfp_mask))
@@
-315,7
+322,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);
@@
-328,7
+335,7
@@
static int oom_kill_task(struct task_struct *p)
*/
do_each_thread(g, q) {
if (q->mm == mm && q->tgid != p->tgid)
*/
do_each_thread(g, q) {
if (q->mm == mm && q->tgid != p->tgid)
- force_sig(SIGKILL,
p
);
+ force_sig(SIGKILL,
q
);
} while_each_thread(g, q);
return 0;
} while_each_thread(g, q);
return 0;