|
@@ -490,6 +490,7 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
|
|
|
|
|
|
if (!down_read_trylock(&mm->mmap_sem)) {
|
|
if (!down_read_trylock(&mm->mmap_sem)) {
|
|
ret = false;
|
|
ret = false;
|
|
|
|
+ trace_skip_task_reaping(tsk->pid);
|
|
goto unlock_oom;
|
|
goto unlock_oom;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -500,9 +501,12 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
|
|
*/
|
|
*/
|
|
if (!mmget_not_zero(mm)) {
|
|
if (!mmget_not_zero(mm)) {
|
|
up_read(&mm->mmap_sem);
|
|
up_read(&mm->mmap_sem);
|
|
|
|
+ trace_skip_task_reaping(tsk->pid);
|
|
goto unlock_oom;
|
|
goto unlock_oom;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ trace_start_task_reaping(tsk->pid);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Tell all users of get_user/copy_from_user etc... that the content
|
|
* Tell all users of get_user/copy_from_user etc... that the content
|
|
* is no longer stable. No barriers really needed because unmapping
|
|
* is no longer stable. No barriers really needed because unmapping
|
|
@@ -544,6 +548,7 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
|
|
* put the oom_reaper out of the way.
|
|
* put the oom_reaper out of the way.
|
|
*/
|
|
*/
|
|
mmput_async(mm);
|
|
mmput_async(mm);
|
|
|
|
+ trace_finish_task_reaping(tsk->pid);
|
|
unlock_oom:
|
|
unlock_oom:
|
|
mutex_unlock(&oom_lock);
|
|
mutex_unlock(&oom_lock);
|
|
return ret;
|
|
return ret;
|
|
@@ -615,6 +620,7 @@ static void wake_oom_reaper(struct task_struct *tsk)
|
|
tsk->oom_reaper_list = oom_reaper_list;
|
|
tsk->oom_reaper_list = oom_reaper_list;
|
|
oom_reaper_list = tsk;
|
|
oom_reaper_list = tsk;
|
|
spin_unlock(&oom_reaper_lock);
|
|
spin_unlock(&oom_reaper_lock);
|
|
|
|
+ trace_wake_reaper(tsk->pid);
|
|
wake_up(&oom_reaper_wait);
|
|
wake_up(&oom_reaper_wait);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -666,6 +672,7 @@ static void mark_oom_victim(struct task_struct *tsk)
|
|
*/
|
|
*/
|
|
__thaw_task(tsk);
|
|
__thaw_task(tsk);
|
|
atomic_inc(&oom_victims);
|
|
atomic_inc(&oom_victims);
|
|
|
|
+ trace_mark_victim(tsk->pid);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|