From 0df822714971614711d89b5eed50ec2303966922 Mon Sep 17 00:00:00 2001 From: cwx1272435 Date: Thu, 7 Mar 2024 11:08:33 +0000 Subject: [PATCH] 0307_kernel Signed-off-by: cwx1272435 --- include/linux/oom.h | 1 + kernel/fork.c | 3 +++ mm/oom_kill.c | 2 +- mm/rss_threshold.c | 17 +++++++++++++---- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/linux/oom.h b/include/linux/oom.h index 2db9a1432511..426f1a284284 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h @@ -112,6 +112,7 @@ long oom_badness(struct task_struct *p, unsigned long totalpages); extern bool out_of_memory(struct oom_control *oc); +int oom_kill_memcg_member(struct task_struct *task, void *message); extern void exit_oom_victim(void); diff --git a/kernel/fork.c b/kernel/fork.c index dfeadf1c07fe..b82bac1e02bb 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1388,6 +1388,9 @@ static struct mm_struct *dup_mm(struct task_struct *tsk, mm->hiwater_rss = get_mm_rss(mm); mm->hiwater_vm = mm->total_vm; + #ifdef CONFIG_RSS_THRESHOLD + mm->rss_threshold = oldmm->rss_threshold; + #endif if (mm->binfmt && !try_module_get(mm->binfmt->module)) goto free_pt; diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 3d7c557fb70c..d1e2e273a7dd 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -968,7 +968,7 @@ static void __oom_kill_process(struct task_struct *victim, const char *message) * Kill provided task unless it's secured by setting * oom_score_adj to OOM_SCORE_ADJ_MIN. */ -static int oom_kill_memcg_member(struct task_struct *task, void *message) +int oom_kill_memcg_member(struct task_struct *task, void *message) { if (task->signal->oom_score_adj != OOM_SCORE_ADJ_MIN && !is_global_init(task)) { diff --git a/mm/rss_threshold.c b/mm/rss_threshold.c index c9d915998dbd..c07d55fed4dc 100644 --- a/mm/rss_threshold.c +++ b/mm/rss_threshold.c @@ -5,6 +5,7 @@ * Copyright (c) 2022 Huawei Technologies Co., Ltd. */ #include +#include #include #include #include "../fs/proc/internal.h" @@ -23,6 +24,13 @@ int proc_pid_rss(struct seq_file *m, struct pid_namespace *ns, return 0; } +static int rss_theashold_oom_kill(struct task_struct *task) +{ + if (task) + return oom_kill_memcg_member(task, "rss out of range\n"); + return 0; +} + void listen_rss_threshold(struct mm_struct *mm) { unsigned long total_rss; @@ -38,15 +46,16 @@ void listen_rss_threshold(struct mm_struct *mm) return; if (mm->owner->comm) - pr_err("rss_threshold monitor:Pid:%d [%s] rss size:%lu KB is out of range:%lu KB\n", - mm->owner->pid, mm->owner->comm, + pr_err("rss_threshold monitor: Killing Pid:%d [%s] (tgid:%d) rss size:%lu KB is out of range:%lu KB\n", + mm->owner->pid, mm->owner->comm, mm->owner->tgid, total_rss, mm->rss_threshold); else - pr_err("rss_threshold monitor:Pid:%d [NULL] rss size:%lu KB is out of range:%lu KB\n", - mm->owner->pid, + pr_err("rss_threshold monitor: Killing Pid:%d [NULL] tgid:%d rss size:%lu KB is out of range:%lu KB\n", + mm->owner->pid, mm->owner->tgid, total_rss, mm->rss_threshold); + rss_theashold_oom_kill(mm->owner); } static ssize_t rss_threshold_write(struct file *file, const char __user *buf, -- Gitee