From patchwork Thu Apr 3 05:30:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: xu.xin16@zte.com.cn X-Patchwork-Id: 14036750 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70428C3600C for ; Thu, 3 Apr 2025 05:30:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B9B41280005; Thu, 3 Apr 2025 01:30:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B24D7280001; Thu, 3 Apr 2025 01:30:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A10F0280005; Thu, 3 Apr 2025 01:30:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 7E074280001 for ; Thu, 3 Apr 2025 01:30:23 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 08832C166A for ; Thu, 3 Apr 2025 05:30:24 +0000 (UTC) X-FDA: 83291607168.19.3244C29 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) by imf10.hostedemail.com (Postfix) with ESMTP id 4531DC0003 for ; Thu, 3 Apr 2025 05:30:20 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of xu.xin16@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=xu.xin16@zte.com.cn; dmarc=pass (policy=none) header.from=zte.com.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743658222; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3985QROw99M3tJ4jBcCId807RVPzfoTh2FhFBxtO+LQ=; b=I8xmj/4DDT2Fu+EXvl5COCOYFTG017O5eTchcLVMgbe3MpFp4Rm/SwcE0baCbpgqRVCRHI cC7Dk6zyz0/OlWWk3j/618MOXvLK89SPlurKii3Q39anYpbYABTle8WH0F+c7xXAWodpNh os9z/hvXkIDgRLyqq2zfMocmbt+atrA= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of xu.xin16@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=xu.xin16@zte.com.cn; dmarc=pass (policy=none) header.from=zte.com.cn ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743658222; a=rsa-sha256; cv=none; b=QbV+SXcP3P19063ppcpLnxd9ConMDiM0T9/S9Yf23f7okBhw6rzzFTGT/GTs/dhTwxnBsF +M7c79lWGD1aw2ajAUAJqL2BbZpfwqA5/hbaYWyV2JFw2W3x+kxo3w3bUXeped75zIOb8C w5Lj2v8M0pW2GGbSvVwVl8IWdgTcmL8= Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxhk.zte.com.cn (FangMail) with ESMTPS id 4ZSr0f6xBDz8R042; Thu, 3 Apr 2025 13:30:10 +0800 (CST) Received: from xaxapp01.zte.com.cn ([10.88.99.176]) by mse-fl1.zte.com.cn with SMTP id 5335U7at043271; Thu, 3 Apr 2025 13:30:07 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp02[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:30:09 +0800 (CST) Date: Thu, 3 Apr 2025 13:30:09 +0800 (CST) X-Zmail-TransId: 2afa67ee1ce1ffffffffd79-6c227 X-Mailer: Zmail v1.0 Message-ID: <20250403133009359JE5AjQxfNH7B3DWUgFHXi@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Mime-Version: 1.0 From: To: Cc: , , , , , , , , , , , Subject: =?utf-8?q?=5BPATCH_linux-next_2/6=5D_memcontrol=3A_introduce_the_ne?= =?utf-8?q?w?= =?utf-8?q?_?= =?utf-8?b?IG1lbV9jZ3JvdXBfc2Nhbl90YXNrcygp?= X-MAIL: mse-fl1.zte.com.cn 5335U7at043271 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1CE2.00B/4ZSr0f6xBDz8R042 X-Rspamd-Queue-Id: 4531DC0003 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: pk84drqke7xj88oq1848jsykink9nfc6 X-HE-Tag: 1743658220-698528 X-HE-Meta: U2FsdGVkX18GqNC7W59cm9QvVMHxxjb8oUC6cNahj2411fYka+DvsW2820rW+5FiUMCHzJeS5wOhWE96G47ODNbbj1iOf3rWzm30PjOq0T+RfOUta5wUB+0/13hwY9Fcn/bkzdSoADQn6ftBoqd0IqocI9uSijhViv+5K0dcHV67tXi2gk/LmSKEUd6eHw00DusV49UADJt0cXWb7hSrm9Km56CG5WVrLorKiFtBY0rFW9597SCspscEKl4BURpihDzQBpOstvRvRFVo2O3EuMvhYBqK2rh1gjbop8t+ivWaYAiwBa/wUlkR3mrrMrf87uh0EoDU/R+3x1HMFNrWhNwV3SGMWXjJIetgVqmBEhOPYyQyLom4mLxReZCWEIPyY+gzxE2PLvHJfrbr2K4Cbo2De6kEs6RUK1UuqugUjkSAJp3HzxaVjK5NtJJ4p8ERYUwb9L97Kh4uC7mkMarHA9We5SsF+Gn+G3QbmpwY6MKjzcYL/fvutLQZk+1OxgboPGvqdVQcEGjwwXrsuE2MGB6e06lOzT3t5BfFaH+E8Z25jhoSLBHgNaCs0NJpF+XIsIIUXlqHAaGOXMu8ZizekCwGFOkdCP+WONYfsyzk+0C94UNRMUqccLCDjWUUDvSUiSClg0Xu8dEcyxzHTpD6XJ0totlZ4uw6Su9DJUyPrdn/8OroNIvlI2DHGJyfhGs5YsE31Reg6i/urbNPQyWgkXQfpMFSmVvYWPHWx3OBuruLAAzACR/87NtTK5Y7PvquRFhZJByq3CowSlnltzzrAhu+Sob0tqgpcB/2aR8If7TTYOPpTIjZ/bnm1Md1UQbfff6uXXCDnydDSOLuXDtJwfvXp6zWygnReWd0qsYtSpa8SQw5zaYjZ4aQpUzFTUFZfOda4a7vHOjs9va6VB25zebGNXELeOFTUFWJeQbpmxVAvIklpZ+7SOvUOwyag/jV71YrRMscstrFSj5tpPg laVWPdRx 9QFPvXudlSKPdLUYqCEQDqLNacF7u7MUWKGg3vYf1WpDYB3aTWN9XUzEUACyBYzUaKEgE5/+pB+wV4hfC0PSy8Fp7ImRMWZPWC1FNxRXiFjWqOXjvUzZvSrfkUSTearp3KxcON+IIGNQnhJCq4jPBSwsyEi5wYCBPljL0Zwk9wSWsaQZioEfWUah1lTnj7zfNXMqqRMcfUGw+JNKeCTtx8qo31H1Uobo0UOF85NUCuulz3TatkmKmBCXDy1mynDwPmALKG1a9HK/D/u8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: xu xin Introduce a new mem_cgroup_scan_tasks function that strictly iterates processes only within the current memcgroup, aligning its behavior with its name. Signed-off-by: xu xin --- include/linux/memcontrol.h | 7 +++++++ mm/memcontrol.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 232cea80e71f..3af34e124ce6 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -795,6 +795,8 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, struct mem_cgroup *, struct mem_cgroup_reclaim_cookie *); void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); +void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*)(struct task_struct *, void *), void *arg); void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*)(struct task_struct *, void *), void *arg); @@ -1289,6 +1291,11 @@ static inline void mem_cgroup_iter_break(struct mem_cgroup *root, { } +static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*fn)(struct task_struct *, void *), void *arg) +{ +} + static inline void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9af30fbfe819..aff5a095b9e4 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1150,6 +1150,30 @@ static void invalidate_reclaim_iterators(struct mem_cgroup *dead_memcg) dead_memcg); } +/* * + * mem_cgroup_scan_tasks - iterate over tasks of only this memory cgroup. + * @memcg: the specified memory cgroup. + * @fn: function to call for each task + * @arg: argument passed to @fn + * + * Unlike mem_cgroup_tree_scan_tasks(), this function only iterate over + * these tasks attached to @memcg, not including any of its descendants + * memcg. And this could be called for the root memory cgroup. + */ +void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*fn)(struct task_struct *, void *), void *arg) +{ + int ret = 0; + struct css_task_iter it; + struct task_struct *task; + + css_task_iter_start(&memcg->css, CSS_TASK_ITER_PROCS, &it); + while (!ret && (task = css_task_iter_next(&it))) + ret = fn(task, arg); + + css_task_iter_end(&it); +} + /** * mem_cgroup_tree_scan_tasks - iterate over tasks of a memory cgroup hierarchy * @memcg: hierarchy root