diff options
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r-- | mm/oom_kill.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 2b97e8f04607..e916168b6e0a 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -39,6 +39,25 @@ int sysctl_oom_kill_allocating_task; | |||
39 | int sysctl_oom_dump_tasks = 1; | 39 | int sysctl_oom_dump_tasks = 1; |
40 | static DEFINE_SPINLOCK(zone_scan_lock); | 40 | static DEFINE_SPINLOCK(zone_scan_lock); |
41 | 41 | ||
42 | /* | ||
43 | * compare_swap_oom_score_adj() - compare and swap current's oom_score_adj | ||
44 | * @old_val: old oom_score_adj for compare | ||
45 | * @new_val: new oom_score_adj for swap | ||
46 | * | ||
47 | * Sets the oom_score_adj value for current to @new_val iff its present value is | ||
48 | * @old_val. Usually used to reinstate a previous value to prevent racing with | ||
49 | * userspacing tuning the value in the interim. | ||
50 | */ | ||
51 | void compare_swap_oom_score_adj(int old_val, int new_val) | ||
52 | { | ||
53 | struct sighand_struct *sighand = current->sighand; | ||
54 | |||
55 | spin_lock_irq(&sighand->siglock); | ||
56 | if (current->signal->oom_score_adj == old_val) | ||
57 | current->signal->oom_score_adj = new_val; | ||
58 | spin_unlock_irq(&sighand->siglock); | ||
59 | } | ||
60 | |||
42 | /** | 61 | /** |
43 | * test_set_oom_score_adj() - set current's oom_score_adj and return old value | 62 | * test_set_oom_score_adj() - set current's oom_score_adj and return old value |
44 | * @new_val: new oom_score_adj value | 63 | * @new_val: new oom_score_adj value |