Skip to content

Commit

Permalink
oom: make oom_reaper_list single linked
Browse files Browse the repository at this point in the history
Entries are only added/removed from oom_reaper_list at head so we can
use a single linked list and hence save a word in task_struct.

Signed-off-by: Vladimir Davydov <[email protected]>
Signed-off-by: Michal Hocko <[email protected]>
Cc: Tetsuo Handa <[email protected]>
Cc: David Rientjes <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Vladimir Davydov authored and torvalds committed Mar 25, 2016
1 parent 855b018 commit 29c696e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
2 changes: 1 addition & 1 deletion include/linux/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -1852,7 +1852,7 @@ struct task_struct {
#endif
int pagefault_disabled;
#ifdef CONFIG_MMU
struct list_head oom_reaper_list;
struct task_struct *oom_reaper_list;
#endif
/* CPU-specific state of this task */
struct thread_struct thread;
Expand Down
15 changes: 7 additions & 8 deletions mm/oom_kill.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ bool oom_killer_disabled __read_mostly;
*/
static struct task_struct *oom_reaper_th;
static DECLARE_WAIT_QUEUE_HEAD(oom_reaper_wait);
static LIST_HEAD(oom_reaper_list);
static struct task_struct *oom_reaper_list;
static DEFINE_SPINLOCK(oom_reaper_lock);


Expand Down Expand Up @@ -528,13 +528,11 @@ static int oom_reaper(void *unused)
while (true) {
struct task_struct *tsk = NULL;

wait_event_freezable(oom_reaper_wait,
(!list_empty(&oom_reaper_list)));
wait_event_freezable(oom_reaper_wait, oom_reaper_list != NULL);
spin_lock(&oom_reaper_lock);
if (!list_empty(&oom_reaper_list)) {
tsk = list_first_entry(&oom_reaper_list,
struct task_struct, oom_reaper_list);
list_del(&tsk->oom_reaper_list);
if (oom_reaper_list != NULL) {
tsk = oom_reaper_list;
oom_reaper_list = tsk->oom_reaper_list;
}
spin_unlock(&oom_reaper_lock);

Expand All @@ -553,7 +551,8 @@ static void wake_oom_reaper(struct task_struct *tsk)
get_task_struct(tsk);

spin_lock(&oom_reaper_lock);
list_add(&tsk->oom_reaper_list, &oom_reaper_list);
tsk->oom_reaper_list = oom_reaper_list;
oom_reaper_list = tsk;
spin_unlock(&oom_reaper_lock);
wake_up(&oom_reaper_wait);
}
Expand Down

0 comments on commit 29c696e

Please sign in to comment.