From mboxrd@z Thu Jan 1 00:00:00 1970 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 81400C282DE for ; Fri, 14 Mar 2025 01:47:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 37FB3280002; Thu, 13 Mar 2025 21:47:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 32F53280001; Thu, 13 Mar 2025 21:47:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 21F26280002; Thu, 13 Mar 2025 21:47:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 02D2F280001 for ; Thu, 13 Mar 2025 21:47:00 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 44B32A8C4F for ; Fri, 14 Mar 2025 01:47:01 +0000 (UTC) X-FDA: 83218468242.28.CACEA3A Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) by imf29.hostedemail.com (Postfix) with ESMTP id 6D03912000A for ; Fri, 14 Mar 2025 01:46:59 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=OA7A1QTX; spf=pass (imf29.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.185 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741916819; 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:dkim-signature; bh=tlZMShS1dCwOXo+JPyn0TOpgGVH5gpaQ5xYm5RvD4Ds=; b=AAeWajMaZhm0mAnNdHs+0qGV7BVJWiKhKA2bvPxUOSbNXRf7Jg3Gt4KTCgq2LsRO3jy9om OhE1UREJ4m8N93p2ulC0+IFPeZ0y16oNxdIoy1vTOKzmQ3Ej/yDjQEaDXc4+s63NfRuZa6 FTLPlsBxkJ/MWrDc9pCeMuBobvrcrwo= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=OA7A1QTX; spf=pass (imf29.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.185 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741916819; a=rsa-sha256; cv=none; b=4iXHRcFiz3y0hjJq7WR76gSGggm+/zrMRF/8VhghrNw9Yda7+SxmnnF5F/gr6UFgydvZDK 73Hz+OS8z/CsVvpLiKeZMasnVVUiAYkoc+/oZivoZ4K+xx8Hv5aQznPKkjA0IXdatwPDHE Cf75lwYoKl46XsRxXx9G8W71zbMaIPo= Date: Thu, 13 Mar 2025 18:46:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1741916817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=tlZMShS1dCwOXo+JPyn0TOpgGVH5gpaQ5xYm5RvD4Ds=; b=OA7A1QTXQjMd0Q3YOIOKGW4z/wtCT4yJAWJAPyPwI/vFpRKvY1jyvhfp/nsjRebY4756JS 26muwJcfyJoxBJl7r3GBSRq0uHEwo6tpmrdfCp7POU/0xoDoO3fYIxbZPCFX9iOs4w+XLx /GFsnOg8HsmZXP0tfLT6ScT8BKaWD3E= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Shakeel Butt To: Sebastian Andrzej Siewior Cc: linux-mm@kvack.org Subject: Re: question on memcg_stats_[un]lock in memcg code Message-ID: References: <5eqyqywhpgtpulqgnqyvpjivwfasbytgfrmum75ikvmsyhsjzu@xudzfvenzhzl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5eqyqywhpgtpulqgnqyvpjivwfasbytgfrmum75ikvmsyhsjzu@xudzfvenzhzl> X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Queue-Id: 6D03912000A X-Rspamd-Server: rspam03 X-Stat-Signature: s6e9q7qkzgx7oj8xw3x9crjcg8wy8aow X-HE-Tag: 1741916819-417066 X-HE-Meta: U2FsdGVkX1+CCnfy3r+RqPd8hX1ugLGWcn8Y3oIUaKqsmDDhnVtHKtTNvElZJGX+rPDqpTMPvlHQIUUBplBSxEJ+Q304BhgoORQFGwS7lDXONU/SGsB6AWiNDWhDWCJ/h1dyj/CPKQSwfMJ11ra8SBEIx5creLl29g4PEmJJxEoDbDWI/sQn6u5Q+4VbueySXbm5XeA+T+EAaTwUz7i4A8lrXCpKYY7Yz6pODBjSE8Wq6gSP4DcdKcE1AGyTEGwj9YwNGuDp9CJ64A0ZAENP0UHIaG+UNxAOFyyoCt8Od0AH463A/Sq6kNtHpL3PcheDltYAGSTY3/D4BBOQU7T+p1JTA9uSoVNf167FCfwzyr6zAf5nSqaSh40iikT19v/SsqS9dfnD7jzuQBp7YlR7Elh+XPE7mcmyCIcWZECuz78lHaO6Ip2qj3lYeoNwbKlR1ZLy+jHAN5bbZlfcbqfPmISTAXlUzdaPNd4ynIEdCowLa0dVSYJxIsJkJrzst4nk0zwnvyCXAyVs8xl6z0tusKqCjeYI1FfDbc/J5Ih47G7SNHMjGTzRkOGQZYMz4mvzok5v/94UxaqyqgFtzj4l6KQzkZwS5vO41lhBVhgbl6E/UUdB9A6/i24KgpoLZwhzTOskTxu4VWuEvoOVm3++aLb9MZjhImjq43qgy/Jz0itYf5UYrVx98ZU8J+BUtVc7YQyAg0UNurng/wTH5kCfDTHUWcNWmYiq3nLpcDdUnShQVijTpFXP0nFKPkEdl9vN8NkTwS9UgD9uZtABCYxINCZMxeN0U4MnvUuqvkSazcngPX+ALcFicVexPUtz7uO3S++udVneFb3XNZJoFORif7OwC/vTLBaTSGM32eJ+2eseFr2RVkQlE+RY+wo7ayVm3SNp6UUVVw/XYP0aDGB5IUXVGnjuFO8Z8RJrN/4VsvO5Kj3sV3ivRlaFfMIQFzdGQfE3DD+ukZ1iVrMbk4d /iK+muRx Wm+TDAuI5Igjs3rECgBB7Y179Uul2N438JrcvMfqv7lXhPeKgw1lJ8H7twltGbPuU82yEjEHED+54EnUzmNi/Q3wpcOgFP/BZCLpi7Th+tvTENqI0H1LfGp71oNCDGtrlEgGgby7CTahAFuojf8D2oF3AH/QQ/2g18WheMXHyurQxMCUb0TTJNnMizGjdgbOO4PRTPEdZM2reEHlKYs80sBZDwwuUky2SlA/o 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: On Thu, Mar 13, 2025 at 06:11:30PM -0700, Shakeel Butt wrote: > Hi Sebastian, > > The commit be3e67b54b43 ("mm/memcg: protect per-CPU counter by disabling > preemption on PREEMPT_RT where needed.") added memcg_stats_lock() and > other variants in memcontrol.c. There usage were added in > __mod_memcg_lruvec_state, __count_memcg_events and mem_cgroup_swapout. I > am wondering why __mod_memcg_state was excluded? > Basically I wanted to know if the reason was that there were no direct caller for __mod_memcg_state and something like the following patch is fine with new direct caller: >From 6506b9463e2a96d1e9681dcaf6dece75e7050513 Mon Sep 17 00:00:00 2001 From: Shakeel Butt Date: Thu, 13 Mar 2025 18:27:41 -0700 Subject: [PATCH] memcg: use __mod_memcg_state in drain_obj_stock For non-PREEMPT_RT kernels, drain_obj_stock() is always called with irq disabled, so we can use __mod_memcg_state() instead of mod_memcg_state(). For PREEMPT_RT, we need to add memcg_stats_[un]lock in __mod_memcg_state(). Signed-off-by: Shakeel Butt --- mm/memcontrol.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4de6acb9b8ec..8ddb9c94db7d 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -700,10 +700,12 @@ void __mod_memcg_state(struct mem_cgroup *memcg, enum memcg_stat_item idx, if (WARN_ONCE(BAD_STAT_IDX(i), "%s: missing stat item %d\n", __func__, idx)) return; + memcg_stats_lock(); __this_cpu_add(memcg->vmstats_percpu->state[i], val); val = memcg_state_val_in_pages(idx, val); memcg_rstat_updated(memcg, val); trace_mod_memcg_state(memcg, idx, val); + memcg_stats_unlock(); } /* idx can be of type enum memcg_stat_item or node_stat_item. */ @@ -2791,7 +2793,7 @@ static struct obj_cgroup *drain_obj_stock(struct memcg_stock_pcp *stock) memcg = get_mem_cgroup_from_objcg(old); - mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); + __mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); memcg1_account_kmem(memcg, -nr_pages); __refill_stock(memcg, nr_pages); -- 2.47.1