Loading mm/oom_kill.c +38 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #include <linux/init.h> #include <linux/mmu_notifier.h> #include <linux/memory_hotplug.h> #include <linux/show_mem_notifier.h> #include <asm/tlb.h> #include "internal.h" Loading Loading @@ -1128,8 +1129,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; Loading @@ -1142,6 +1170,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); } Loading
mm/oom_kill.c +38 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #include <linux/init.h> #include <linux/mmu_notifier.h> #include <linux/memory_hotplug.h> #include <linux/show_mem_notifier.h> #include <asm/tlb.h> #include "internal.h" Loading Loading @@ -1128,8 +1129,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; Loading @@ -1142,6 +1170,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); }