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 CB5F4C3ABC9 for ; Fri, 9 May 2025 23:29:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3849B8E0013; Fri, 9 May 2025 19:29:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 335E68E000E; Fri, 9 May 2025 19:29:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 223E58E0013; Fri, 9 May 2025 19:29:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id EEDDC8E000E for ; Fri, 9 May 2025 19:29:48 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id BB2EA5D08E for ; Fri, 9 May 2025 23:29:50 +0000 (UTC) X-FDA: 83424964140.12.F1319A5 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) by imf11.hostedemail.com (Postfix) with ESMTP id 15F5040003 for ; Fri, 9 May 2025 23:29:48 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lkhlPPFU; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf11.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.170 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746833389; a=rsa-sha256; cv=none; b=7LMaqlfPHvIvCMW4JRwKqnwvKv6z0Jnsbvsx5/sQgtljgUEl66qyybLCE9B5a/FPELcF3o 6IwXQrDAc4svfSmBcyWmKJWOar4NTKE1XMMxRHi3wKpQmhRmT0zba1s0ISzC06iilIGXec 1/IZSCTiu8ZXKle/2ZYcjwIGiBj0MEk= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lkhlPPFU; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf11.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.170 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746833389; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FDd1Wwam5FZkoQkd5LJTalm5yy6hRT18QxXePa+yB6g=; b=YhJLTDiZm1LMt6EoR/z+lS+M0FZJqTG4lAGYjrKMoLT1/mMzb3xWwwIxeR/hrjukU9uvo5 As8JKDcJ69vBW6yJwichYQ86hnfRrMdNx2A4MQgAM6G4pMAcTXKb+bYgkAcA6SqU4PozF/ d7D4hAnU3ZmXBGWEZ8gKufq74pwtnwM= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1746833387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FDd1Wwam5FZkoQkd5LJTalm5yy6hRT18QxXePa+yB6g=; b=lkhlPPFUb+WFjQBSsdJ8oFTCadIsdsC5qXueINpBp60zFDmX9vlfydRzdvLlVMR1Xtgswh VhgJSc3ZqOofZXKkWXwIEmbHvDuoEZW2MQsnHYilG3Sa7TR1VHiS4n0UGaztgZxnr2QNFS 5QcgrEcKN2W0D1FBhqPbUa3r+ADY3gM= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Vlastimil Babka , Alexei Starovoitov , Sebastian Andrzej Siewior , bpf@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: [PATCH 2/4] memcg: add nmi-safe update for MEMCG_KMEM Date: Fri, 9 May 2025 16:28:57 -0700 Message-ID: <20250509232859.657525-3-shakeel.butt@linux.dev> In-Reply-To: <20250509232859.657525-1-shakeel.butt@linux.dev> References: <20250509232859.657525-1-shakeel.butt@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 15F5040003 X-Stat-Signature: if4wx46md1iwtmnro5gapaijeomk5e7q X-Rspam-User: X-HE-Tag: 1746833388-841525 X-HE-Meta: U2FsdGVkX18OiGWIo1sBiolNmfVJcGN80aTGJvc3yck/uih6PskbzUlvyJQoKTNUK1HEZnVuQgDg3QvJ1GJm7ckTmqtNjqHmoPbDwI+TXUgh5OqC9lmT7StymoQV80mKaE1qG+UNc3ScpSLq/+vQwn6a0HH3zmxG8TlLOwQcGJcnrMWfZrKVqb3Cg/qnZ3hl93pEpOBA8Y6avg2N2U2tcnrpWXeLRRXYWL6k/mXBk1yGRn1HKM4KU9rTPDQpsnkDIurRUN94Z4ZByPnuSgvWiVbFPVRg7zfHG9I2hc5tBDofuQhIuAP5NjlJWoR2O5wcMbINHQydMkQH50ekOaiGa9D315zUDthLizW7MeE9sCW7ISF6rGzpqN8oE7VNSZr/BXA6wNL2ViOoB6hz0LPSpdRprynWZCvNxF+GIqQ+8uFmok1Fflg19QmWe2cLmvaGwP291ppdkJQ3zTMlVwVf1oDJtD7WltomGI4SYDOvTaBoGlvZkLd/I1khOzQrmHKBpttkrnqwCWYgThvFZzmV03bEwx7qkFXDdXNPzP7ih7DvgFCYGphF5SgpYLHzmw74A5hEZJgXhF0NLIC2xWICCinzuzH++ZOlBmVp2Vi0n10wJ00vgw6cQpka56/QHRkyefmeZrjr2f25kqeSMMgWPqOk5BlwRM9JayHYARPX5W5kACfZ1P1Doy9zII1OyYOqQNXpRHoVNYXf8wbUoeUjkKn9WoaCEL8ct6PdukvgY5nhZ3fk9rxTznBY0SLnViPOYi1RVqOyg1PHbSOe24FfEFy+ixPKtcb/nfSaEjUyRg5MJkuqKip+PQb+UeIOR3TSRtiGMVn3oD+m8+C2u26bQdYfOrdar6YIJSIw/ZaAMipFzqoYQbjXr4Y0gsHvY2y++zAK5Pof+ZKHBs1yzeoPE50IwjqsxmM/liDLo/K33q6GPMY/TPA22E8KmtEhhNbAXNMifNOHzJWb6xVV68A ZFHJVGzr j6A0+0T5SvU+D3zp8Q4MRbzgSnwPxPQB+Pbe8VxUn4qVq08UqSWOJhIUQjjQHL+PdZl5euFPPUtX0Utz2A26pzCmnA2DTTdthqZqRp466L+iqKk4jj6hGri5Nr4x7IDYnhzeT+WdVQg6XgjeTIh8U5ifC7rKtakeqSCFQZ53WFVGMs55a1sVQ/sjtd0lY9eDrzjE1Skj294CIMQpeOcyCQsZcvfGZkUn4qyx/ 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: The objcg based kmem charging and uncharging code path needs to update MEMCG_KMEM appropriately. Let's add support to update MEMCG_KMEM in nmi-safe way for those code paths. Signed-off-by: Shakeel Butt --- mm/memcontrol.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 7200f6930daf..e91e4368650f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2779,6 +2779,18 @@ struct obj_cgroup *get_obj_cgroup_from_folio(struct folio *folio) return objcg; } + +static inline void account_kmem_nmi_safe(struct mem_cgroup *memcg, int val) +{ + if (likely(!in_nmi())) { + mod_memcg_state(memcg, MEMCG_KMEM, val); + } else { + /* TODO: add to cgroup update tree once it is nmi-safe. */ + atomic64_add(val, &memcg->kmem_stat); + } +} + + /* * obj_cgroup_uncharge_pages: uncharge a number of kernel pages from a objcg * @objcg: object cgroup to uncharge @@ -2791,7 +2803,7 @@ static void obj_cgroup_uncharge_pages(struct obj_cgroup *objcg, memcg = get_mem_cgroup_from_objcg(objcg); - mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); + account_kmem_nmi_safe(memcg, -nr_pages); memcg1_account_kmem(memcg, -nr_pages); if (!mem_cgroup_is_root(memcg)) refill_stock(memcg, nr_pages); @@ -2819,7 +2831,7 @@ static int obj_cgroup_charge_pages(struct obj_cgroup *objcg, gfp_t gfp, if (ret) goto out; - mod_memcg_state(memcg, MEMCG_KMEM, nr_pages); + account_kmem_nmi_safe(memcg, nr_pages); memcg1_account_kmem(memcg, nr_pages); out: css_put(&memcg->css); -- 2.47.1