From patchwork Fri Mar 14 06:15:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 14016306 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 72BACC35FF1 for ; Fri, 14 Mar 2025 06:15:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D7C0C280008; Fri, 14 Mar 2025 02:15:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D2B32280003; Fri, 14 Mar 2025 02:15:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD00B280008; Fri, 14 Mar 2025 02:15:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 9C103280003 for ; Fri, 14 Mar 2025 02:15:43 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 699FC8041E for ; Fri, 14 Mar 2025 06:15:44 +0000 (UTC) X-FDA: 83219145408.10.AFE1CED Received: from out-172.mta1.migadu.com (out-172.mta1.migadu.com [95.215.58.172]) by imf15.hostedemail.com (Postfix) with ESMTP id B0008A000A for ; Fri, 14 Mar 2025 06:15:42 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=A3ycuLnE; spf=pass (imf15.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.172 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=1741932942; 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=lcDoiTd7xEiImi4APdwYNjABkW5nrlOItPgvjNpxcds=; b=0OMEtx6TAuxNcfS+5v04786i+1Pxv8t2MG2/8q48qA8jJ375Nj7BnXw3iByBJ0dJuVM3+c /8L9IhxCepMsEYWjYbWZHpK9XQ8pz82xPtA73I3FI52iDx+baDn0d0yW3Zih/EVQ95arpu ObGn9X8S23BFV+HsheqE6/BJ/sFos24= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741932942; a=rsa-sha256; cv=none; b=JThC33aMlEOwZN+Gj7jTkYipSakqKdUHlYohCdgD22g1M2mZRG83VvSMra5Y37jykpVzDH mHNeAkzzoiKN4+isDuTM87wqLMDx5yzOBCQUa4pJi2NvH3GE3GWbbVQo+fN8J4/+OrCwAm geuuAaJ8Z6rIkLNFvyLzRnkiLkipEfw= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=A3ycuLnE; spf=pass (imf15.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.172 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev 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=1741932941; 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=lcDoiTd7xEiImi4APdwYNjABkW5nrlOItPgvjNpxcds=; b=A3ycuLnENDh5V07GWrH8Jxn+FR3OaxeVX1PN7A7UGAgmaark0HHfSnFiszqsZ4vp8xDkjs fPjVhxtQ7rRtNBIuopLUKdw0S2PB/6Ooq+Es0ODBtRgCobG9H0wTXDPAQOxpVL/z4Rv7uc 1aWOQV+aKTZuhIGf3oAQCTRqjvv0WUM= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Vlastimil Babka , Sebastian Andrzej Siewior , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: [RFC PATCH 05/10] memcg: no refilling stock from obj_cgroup_release Date: Thu, 13 Mar 2025 23:15:06 -0700 Message-ID: <20250314061511.1308152-6-shakeel.butt@linux.dev> In-Reply-To: <20250314061511.1308152-1-shakeel.butt@linux.dev> References: <20250314061511.1308152-1-shakeel.butt@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: B0008A000A X-Stat-Signature: 1s941f1bb1znch7cbuw1omyzywtmjqjc X-HE-Tag: 1741932942-541602 X-HE-Meta: U2FsdGVkX1+/m4DFCi/jPsX8yBQ/QyTzkWTjCcauP8e8NB3hvns65Spqeu/S8U85k0it0BrqGz+TGOTNDbz094w7frvXhsU8Rep3WpjlwrKCSbG6pvI3hQZITw/oFPG2h5nhAEF0rWSf6NQCZh9iht2YkvZXHwGwnOFndDzaJ8fO3hyVWlrqEnP+8lgKYNHf4OplcLPSEGNgV7PDNG1vjXg4hqmTzs8AZX8hAu87ndl3emFMe5jlQdDQdxdQA8uIS9c5VPLPD7+1R3XF8P88UAymBkz2TTYGxCDARn5UWDJXAPBommJDkeBhMRuXKBRBpkwptXYYkbj+tlx5kbw+N4QG5qE4J5nd+wn9+zIxaMh26kWc4Mqr2oV02cwu8UIfoYlekjJjjrd0g5hyJkOwLtdmUcARjbYOFt8qzTa9khZ3pC/41VYF1aoU3MDNxRgVkB6FztXVu7+HG8/opKoq0Xbx+PvRpQZ7H3waUuajYG8BOSc/3htx+KPZVXZvfSB7V3xnNKhwMPBgrAZrIa+Vy7mR5gcsijNYDhDm4tMUBEz2PblOAhPSxOF9t5O5gVBSIaEUt9t9pGFslR0+CqdIHr6VOqyVmzOQfywIBppb67AN0hSRfdaApCf9sMWmBTbkCK2zyvgFQEneCFe3DG86FA/itsuNVDQWDBgx4ahl5qg5Rhh7EeW+EKTFPCecKYx8+xQPYRABs1R4lsh+3907HUkHr9Fwl6D2ZYWwOWSRz3+SDYVsMRQdUtX1LuXwf5PWg0W+ogfu73cCkgVQe92w8eB3TDhpbQDSQIXcFbSlicfBbmFrHsWM1DV+bIJJXsV1lOfKljMTDmrKL9KaB/qxcTv8bDrHm/QrtF135zHFfVDcQfADtCCXWLZszlVlge5aEWQwOxke9LJ+ZOqVUOR9+u1/Fw5OBJBk8zs5lOgAceCQnv5i0buRKk31bDDgPFCIGPK2+mXgunHLmML4qjm GKcMOgUL YgnDxdceJp4QBlX1wNfzz7IL0KrquLapPj7vH0GS/UUOldPZb99H0XEn7zdYZYr1P4k3xymoI5ome3lMklFA0jQHOUqIFTCm0S8jUeO/5by8JgtDvaGoWBjHojQLtl3Lh6qBiOmVz1IT2dShG9Um8PDlXuUsnMQZrjM2yy1rFhcPBiGAC4k9AxGEXj3dXiHz5WYufc1cnBbWwxr8XjsfbHVz4+mZWOp6XWeQI 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: obj_cgroup_release is called when all the references to the objcg has been released i.e. no more memory objects are pointing to it. Most probably objcg->memcg will be pointing to some ancestor memcg and at the moment, in obj_cgroup_release, the kernel call obj_cgroup_uncharge_pages() to uncharge last remaining memory. However obj_cgroup_uncharge_pages() refills the local stock. There is no need to refill the local stock with some ancestor memcg and flush the local stock. In addition this removes the requirement to only call obj_cgroup_put() outside of local_lock. Signed-off-by: Shakeel Butt Acked-by: Vlastimil Babka --- mm/memcontrol.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 7054b0ebd207..83db180455a1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -129,8 +129,7 @@ bool mem_cgroup_kmem_disabled(void) return cgroup_memory_nokmem; } -static void obj_cgroup_uncharge_pages(struct obj_cgroup *objcg, - unsigned int nr_pages); +static void memcg_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages); static void obj_cgroup_release(struct percpu_ref *ref) { @@ -163,8 +162,16 @@ static void obj_cgroup_release(struct percpu_ref *ref) WARN_ON_ONCE(nr_bytes & (PAGE_SIZE - 1)); nr_pages = nr_bytes >> PAGE_SHIFT; - if (nr_pages) - obj_cgroup_uncharge_pages(objcg, nr_pages); + if (nr_pages) { + struct mem_cgroup *memcg; + + memcg = get_mem_cgroup_from_objcg(objcg); + mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); + memcg1_account_kmem(memcg, -nr_pages); + if (!mem_cgroup_is_root(memcg)) + memcg_uncharge(memcg, nr_pages); + css_put(&memcg->css); + } spin_lock_irqsave(&objcg_lock, flags); list_del(&objcg->list);