diff options
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r-- | mm/oom_kill.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index f52e85c80e8d..e4b0991ca351 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -38,6 +38,33 @@ int sysctl_oom_kill_allocating_task; | |||
38 | int sysctl_oom_dump_tasks = 1; | 38 | int sysctl_oom_dump_tasks = 1; |
39 | static DEFINE_SPINLOCK(zone_scan_lock); | 39 | static DEFINE_SPINLOCK(zone_scan_lock); |
40 | 40 | ||
41 | /** | ||
42 | * test_set_oom_score_adj() - set current's oom_score_adj and return old value | ||
43 | * @new_val: new oom_score_adj value | ||
44 | * | ||
45 | * Sets the oom_score_adj value for current to @new_val with proper | ||
46 | * synchronization and returns the old value. Usually used to temporarily | ||
47 | * set a value, save the old value in the caller, and then reinstate it later. | ||
48 | */ | ||
49 | int test_set_oom_score_adj(int new_val) | ||
50 | { | ||
51 | struct sighand_struct *sighand = current->sighand; | ||
52 | int old_val; | ||
53 | |||
54 | spin_lock_irq(&sighand->siglock); | ||
55 | old_val = current->signal->oom_score_adj; | ||
56 | if (new_val != old_val) { | ||
57 | if (new_val == OOM_SCORE_ADJ_MIN) | ||
58 | atomic_inc(¤t->mm->oom_disable_count); | ||
59 | else if (old_val == OOM_SCORE_ADJ_MIN) | ||
60 | atomic_dec(¤t->mm->oom_disable_count); | ||
61 | current->signal->oom_score_adj = new_val; | ||
62 | } | ||
63 | spin_unlock_irq(&sighand->siglock); | ||
64 | |||
65 | return old_val; | ||
66 | } | ||
67 | |||
41 | #ifdef CONFIG_NUMA | 68 | #ifdef CONFIG_NUMA |
42 | /** | 69 | /** |
43 | * has_intersects_mems_allowed() - check task eligiblity for kill | 70 | * has_intersects_mems_allowed() - check task eligiblity for kill |
@@ -155,15 +182,6 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, | |||
155 | } | 182 | } |
156 | 183 | ||
157 | /* | 184 | /* |
158 | * When the PF_OOM_ORIGIN bit is set, it indicates the task should have | ||
159 | * priority for oom killing. | ||
160 | */ | ||
161 | if (p->flags & PF_OOM_ORIGIN) { | ||
162 | task_unlock(p); | ||
163 | return 1000; | ||
164 | } | ||
165 | |||
166 | /* | ||
167 | * The memory controller may have a limit of 0 bytes, so avoid a divide | 185 | * The memory controller may have a limit of 0 bytes, so avoid a divide |
168 | * by zero, if necessary. | 186 | * by zero, if necessary. |
169 | */ | 187 | */ |