diff options
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 03120229db28..b194febf5799 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <linux/perf_event.h> | 50 | #include <linux/perf_event.h> |
51 | #include <trace/events/sched.h> | 51 | #include <trace/events/sched.h> |
52 | #include <linux/hw_breakpoint.h> | 52 | #include <linux/hw_breakpoint.h> |
53 | #include <linux/oom.h> | ||
53 | 54 | ||
54 | #include <asm/uaccess.h> | 55 | #include <asm/uaccess.h> |
55 | #include <asm/unistd.h> | 56 | #include <asm/unistd.h> |
@@ -149,9 +150,7 @@ static void delayed_put_task_struct(struct rcu_head *rhp) | |||
149 | { | 150 | { |
150 | struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); | 151 | struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); |
151 | 152 | ||
152 | #ifdef CONFIG_PERF_EVENTS | 153 | perf_event_delayed_put(tsk); |
153 | WARN_ON_ONCE(tsk->perf_event_ctxp); | ||
154 | #endif | ||
155 | trace_sched_process_free(tsk); | 154 | trace_sched_process_free(tsk); |
156 | put_task_struct(tsk); | 155 | put_task_struct(tsk); |
157 | } | 156 | } |
@@ -689,6 +688,8 @@ static void exit_mm(struct task_struct * tsk) | |||
689 | enter_lazy_tlb(mm, current); | 688 | enter_lazy_tlb(mm, current); |
690 | /* We don't want this task to be frozen prematurely */ | 689 | /* We don't want this task to be frozen prematurely */ |
691 | clear_freeze_flag(tsk); | 690 | clear_freeze_flag(tsk); |
691 | if (tsk->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) | ||
692 | atomic_dec(&mm->oom_disable_count); | ||
692 | task_unlock(tsk); | 693 | task_unlock(tsk); |
693 | mm_update_next_owner(mm); | 694 | mm_update_next_owner(mm); |
694 | mmput(mm); | 695 | mmput(mm); |
@@ -702,6 +703,8 @@ static void exit_mm(struct task_struct * tsk) | |||
702 | * space. | 703 | * space. |
703 | */ | 704 | */ |
704 | static struct task_struct *find_new_reaper(struct task_struct *father) | 705 | static struct task_struct *find_new_reaper(struct task_struct *father) |
706 | __releases(&tasklist_lock) | ||
707 | __acquires(&tasklist_lock) | ||
705 | { | 708 | { |
706 | struct pid_namespace *pid_ns = task_active_pid_ns(father); | 709 | struct pid_namespace *pid_ns = task_active_pid_ns(father); |
707 | struct task_struct *thread; | 710 | struct task_struct *thread; |