Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13aeef14 authored by Charan Teja Reddy's avatar Charan Teja Reddy Committed by Swathi Sridhar
Browse files

mm: oom_kill: dump info of ulmk killed process after reaping



Dump the memory information of tasks that receives a SIGKILL from
userspace and oom reaped.

Change-Id: I3183f8893442d2597f2fc1cd6d092d9807226b2f
Signed-off-by: default avatarCharan Teja Reddy <charante@codeaurora.org>
parent 1701d5eb
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -1171,8 +1171,35 @@ void pagefault_out_of_memory(void)
	mutex_unlock(&oom_lock);
}

/* Call this function with task_lock being held as we're accessing ->mm */
void dump_killed_info(struct task_struct *selected)
{
	int selected_tasksize = get_mm_rss(selected->mm);

	pr_info("Killing '%s' (%d), adj %hd,\n"
		"   to free %ldkB on behalf of '%s' (%d)\n"
		"   Free CMA is %ldkB\n"
		"   Total reserve is %ldkB\n"
		"   Total free pages is %ldkB\n"
		"   Total file cache is %ldkB\n",
		selected->comm, selected->pid,
		selected->signal->oom_score_adj,
		selected_tasksize * (long)(PAGE_SIZE / 1024),
		current->comm, current->pid,
		global_zone_page_state(NR_FREE_CMA_PAGES) *
		(long)(PAGE_SIZE / 1024),
		totalreserve_pages * (long)(PAGE_SIZE / 1024),
		global_zone_page_state(NR_FREE_PAGES) *
		(long)(PAGE_SIZE / 1024),
		global_node_page_state(NR_FILE_PAGES) *
		(long)(PAGE_SIZE / 1024));
}

void add_to_oom_reaper(struct task_struct *p)
{
	static DEFINE_RATELIMIT_STATE(reaper_rs, DEFAULT_RATELIMIT_INTERVAL,
						 DEFAULT_RATELIMIT_BURST);

	if (!sysctl_reap_mem_on_sigkill)
		return;

@@ -1185,6 +1212,16 @@ void add_to_oom_reaper(struct task_struct *p)
		__mark_oom_victim(p);
		wake_oom_reaper(p);
	}

	dump_killed_info(p);
	task_unlock(p);

	if (__ratelimit(&reaper_rs) && p->signal->oom_score_adj == 0) {
		show_mem(SHOW_MEM_FILTER_NODES, NULL);
		show_mem_call_notifiers();
		if (sysctl_oom_dump_tasks)
			dump_tasks(NULL, NULL);
	}

	put_task_struct(p);
}