From patchwork Wed Mar 12 07:56:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013062 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 EE130C28B28 for ; Wed, 12 Mar 2025 07:56:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E75C280002; Wed, 12 Mar 2025 03:56:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 76BE4280001; Wed, 12 Mar 2025 03:56:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 60F29280002; Wed, 12 Mar 2025 03:56:40 -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 41C93280001 for ; Wed, 12 Mar 2025 03:56:40 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4169955FD3 for ; Wed, 12 Mar 2025 07:56:42 +0000 (UTC) X-FDA: 83212142244.29.69A1786 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id BE73810000F for ; Wed, 12 Mar 2025 07:56:39 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741766200; a=rsa-sha256; cv=none; b=VtyQxB3WjYOCmwr1qr9ol8GlaVVGhGTw4fU0vsdX7fA8643Q9iy2G447Zxozljvx975r/l nR4h4uaM/VDB5ejBWEWntW/K/wgf2YTUT79yuUFH6fMC3HCSLJ59JA9wfu1BVO8JT4j/xe kPA5vu9qbFPwzu1/YswvN1dB2O/4Tlg= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741766200; 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:references; bh=5n2ooCqYEl5Wx8nfQJwAJM8Fl3IW8SGM6UYh6koa7Ok=; b=HZ0aAFXxMeMgaKzkQ3B/TDm8ab2E/4R93EH6lASGIEZet9m5Lg+KHuq/Ohxm51/kkreUr1 qTREf279uTJm/sHiPDGFSZ/gfxRbsSUoVAeH6NGwL2DPWVHW9sUd5pRPWdZrc/nkd6GR6a iLsFAlE6Up3pYubt92qXH3LBBKJUxUg= X-AuditID: a67dfc5b-669ff7000002311f-02-67d13e357e71 From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v2 1/4] mm/mempolicy: Fix memory leaks in mempolicy_sysfs_init() Date: Wed, 12 Mar 2025 16:56:24 +0900 Message-ID: <20250312075628.648-1-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKLMWRmVeSWpSXmKPExsXC9ZZnka6p3cV0g9U9whZz1q9hs5g+9QKj xc+7x9ktjm+dx25xftYpFovLu+awWdxb85/VYvWaDAcOj52z7rJ7dLddZvdYvOclk8emT5PY PU7M+M3isfOhpcfnTXIB7FFcNimpOZllqUX6dglcGXfftTAWdAlUrD3/kKWBsZO3i5GTQ0LA ROLFtE5WGHva/g0sXYwcHGwCShLH9saAhEUERCXmHZ0NFObiYBZYzCSx8PB6JpCEsECAxPpj c9hBbBYBVYlbnY1gc3gFjCVmb5oGNVNTouHSPSaIuKDEyZlPWEBsZgF5ieats5lBhkoIbGCT aHp/gQmiQVLi4IobLBMYeWch6ZmFpGcBI9MqRqHMvLLcxMwcE72MyrzMCr3k/NxNjMDAXFb7 J3oH46cLwYcYBTgYlXh4BXIupAuxJpYVV+YeYpTgYFYS4V1tCxTiTUmsrEotyo8vKs1JLT7E KM3BoiTOa/StPEVIID2xJDU7NbUgtQgmy8TBKdXAGL90z40VmxN38xQvPfuX6dG2H0kvlH4e 4j9x86+NynXuicmGB9y57Is1ntr5lYo57m6I7Qq3L2/0lllwbdeGevZdzefbHhjEb0q9deK0 PvsHgwNfuhvTvB48PhZ8dl758XsRfdf7tFNyPZvKvURXXPsrcMvxlIW7Azfnf+sID7U5uxg+ sprfV2Ipzkg01GIuKk4EAN4JA+VIAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPLMWRmVeSWpSXmKPExsXCNUNNS9fU7mK6waVnLBZz1q9hs5g+9QKj xc+7x9ktPj97zWxxfOs8dovDc0+yWpyfdYrF4vKuOWwW99b8Z7U4dO05q8XqNRkWv7etYHPg 8dg56y67R3fbZXaPxXteMnls+jSJ3ePEjN8sHjsfWnp8u+3hsfjFByaPz5vkAjijuGxSUnMy y1KL9O0SuDLuvmthLOgSqFh7/iFLA2MnbxcjJ4eEgInEtP0bWLoYOTjYBJQkju2NAQmLCIhK zDs6GyjMxcEssJhJYuHh9UwgCWGBAIn1x+awg9gsAqoStzobWUFsXgFjidmbprFCzNSUaLh0 jwkiLihxcuYTFhCbWUBeonnrbOYJjFyzkKRmIUktYGRaxSiSmVeWm5iZY6pXnJ1RmZdZoZec n7uJERiMy2r/TNzB+OWy+yFGAQ5GJR7eA6oX0oVYE8uKK3MPMUpwMCuJ8K62BQrxpiRWVqUW 5ccXleakFh9ilOZgURLn9QpPTRASSE8sSc1OTS1ILYLJMnFwSjUwbtFMz9984bPo7zipBRkX e+pEwkICP/92f7Hu5OubZhl9X4wfyWu/PB0wOfK/0cSbCarFsxUi5ZjfcGdZ+n5NWa89Q9ii i9Py75y3TIWra07etWI3VdArSNbolmeIzTIW5WGLMJz0o1a6s9NMLvbvKjextQ+E7Rfsmr/e eE1HzH6Nk1PYe4WVWIozEg21mIuKEwEOm2ZYQgIAAA== X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: BE73810000F X-Rspamd-Server: rspam05 X-Stat-Signature: necbja9frqiekmezjbr7qwe11y4uj6qs X-HE-Tag: 1741766199-695066 X-HE-Meta: U2FsdGVkX19zKB9G5WCBLMmVqjfZXBU+DmmNA1KSJzhMLoAoCwHwKRLfI+PEGcnlRuNlbW6G69dcpL80pngii5O94jfiTN8Djt1mrpNXRdDBQ7JxHPO44zHCyBlkvXCH6ADKUJLxUBcb41Yq2Y/BTkAcbcnWvgexutjXlis1t1dBJQVL6iojfp3GKljUQjF+wUCauTrVkg920qVx333zzEGPBSk5jDrtbF2MlBa8bvdI6kYBnjkUt+y3GxOFGQR/B867UOeOj6tjHskVijEN+VL15LCCTywMceZhdqDMGMzDyG8REQy/gX4zj7LECbJOcr+7de+UCp257TSHfL7Yg7etX3QCVGsAXfPEHUu/Ve7YdtZIbx3Hwrpz1kK/1my1YH2rqTBDsKez54F0fOJwRzAYKOS0brDTYM6FFtIuFZtgZz/ObUDGg8F0EwbbdeJKYVEs6R+e3AmGi+AXUCptLOynA6P4uAdOg92OQTnA/RlpbWxkhF9zgYyENU0zWL86sXd67bNqptfcgPOPbktxm2gH56A3Q425QGmRDiPAFS++qgzrpkDA7ki9DtV82TeSceEZyLObcfIfXm5G/PWTpObp7XUMGw5bPQ7P8ECvtZ8mjaJwslENya3lZI+hHpRDgBOov+8qXZdK4x2DOg46tLdoVlM2gg33q0HhxIgB4szii3umfgGN5iZJiNJFlmvajNAGXegZAkmeOeoUhOJZbTIfVzN3E7bjhcx14u1wzNAcr+tBY9pXFSxJFEK1vMqnC24bQPFdUr4T9s2wzhPzYTPGCUGU2uzGXtsXrApV42m4hi0jAfKIe8btgYQJiNILZHjSt39m3FPBD0PNyYoHCNRJQuncmuN0bSGOhouWJoaOx4kjrLw8CH+Q52d+trv7Ie6MNsZLW6J4ROWE7kG0a6UlZ5Xx9dZUgeCw+856CpIOSCOj5XEs9jMOk+hDDFiR7bJnFjYIXW+6IO/RLLs ZsMkuEBY 6dLDCNJ5MHu6lsqbs0pqnrzWmofogdjT7f7adZV9QYH+YR7p1QfqDU06Q5nHSGt20XQz1tK0y1w5WuemcJ2nN1SWR7+Ngnb5LHUEeNYbsTSKmZG8wG1rkkxsExMuogzZvDpXqyRNKukJAhkn1sB5Zy2YEDA== 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: Improper cleanup of sysfs attributes caused kobject and memory leaks when initialization failed or nodes were removed. This patch ensures proper deallocation of kobjects and memory, preventing resource leaks and improving stability. Fixes: dce41f5ae253 ("mm/mempolicy: implement the sysfs-based weighted_interleave interface") Signed-off-by: Rakie Kim --- mm/mempolicy.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) base-commit: 80e54e84911a923c40d7bee33a34c1b4be148d7a diff --git a/mm/mempolicy.c b/mm/mempolicy.c index bbaadbeeb291..1691748badb2 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3541,39 +3541,40 @@ static int __init mempolicy_sysfs_init(void) int err; static struct kobject *mempolicy_kobj; - mempolicy_kobj = kzalloc(sizeof(*mempolicy_kobj), GFP_KERNEL); - if (!mempolicy_kobj) { + node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), + GFP_KERNEL); + if (!node_attrs) { err = -ENOMEM; goto err_out; } - node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), - GFP_KERNEL); - if (!node_attrs) { + mempolicy_kobj = kzalloc(sizeof(*mempolicy_kobj), GFP_KERNEL); + if (!mempolicy_kobj) { err = -ENOMEM; - goto mempol_out; + goto node_out; } err = kobject_init_and_add(mempolicy_kobj, &mempolicy_ktype, mm_kobj, "mempolicy"); - if (err) - goto node_out; + if (err) { + kobject_put(mempolicy_kobj); + goto err_out; + } err = add_weighted_interleave_group(mempolicy_kobj); if (err) { - pr_err("mempolicy sysfs structure failed to initialize\n"); kobject_put(mempolicy_kobj); - return err; + goto err_out; } - return err; + return 0; + node_out: kfree(node_attrs); -mempol_out: - kfree(mempolicy_kobj); err_out: - pr_err("failed to add mempolicy kobject to the system\n"); + pr_err("mempolicy sysfs structure failed to initialize\n"); return err; + } late_initcall(mempolicy_sysfs_init); From patchwork Wed Mar 12 07:56:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013063 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 CF9A9C2BA1B for ; Wed, 12 Mar 2025 07:56:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C8F3E280003; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C1A42280001; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A90FB280003; Wed, 12 Mar 2025 03:56:42 -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 8AD20280001 for ; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A86B355FEC for ; Wed, 12 Mar 2025 07:56:44 +0000 (UTC) X-FDA: 83212142328.13.570EF54 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id C400F100005 for ; Wed, 12 Mar 2025 07:56:42 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741766203; a=rsa-sha256; cv=none; b=nOwcpHhP4cUrV5+LeymFdQnlaXBnkor52mH/k/rXIlrezqe5ThFpKBcEutFvqORzcE0Una n6i6adaM2vDaG5y6P9S3/DDTSkNA6Jb6MhJ0ZNReVMGc4lnBj0QyquVC1ejwxHDM3gF34g OerOpyxsVQW4tQV2b8f2T/pDCi/acq0= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741766203; 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; bh=SY4JLJwFvY0ZqsCcit9xtPtQZDbygFxdQdZQwLZjENo=; b=0F1OHbj5L5IXpgREVyTedMSPj2ylKGgno4RoSz1UAUyGGN/8Qo+LJkq9+8FWayOAv6sQMF hDZ1uKtjtYpjP72D4mYgQ/+1FsVrAnLMuo0AC6yrEU6dbMP+cO9P1H5k+IJWwNivfDkW0I eVqybwuu/MYV8wMUuHc6fcjlSEmVoyA= X-AuditID: a67dfc5b-669ff7000002311f-09-67d13e371826 From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v2 2/4] mm/mempolicy: Support memory hotplug in weighted interleave Date: Wed, 12 Mar 2025 16:56:25 +0900 Message-ID: <20250312075628.648-2-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250312075628.648-1-rakie.kim@sk.com> References: <20250312075628.648-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrLLMWRmVeSWpSXmKPExsXC9ZZnka653cV0gxM3pC3mrF/DZjF96gVG i593j7NbHN86j93i/KxTLBaXd81hs7i35j+rxeo1GQ4cHjtn3WX36G67zO6xeM9LJo9Nnyax e5yY8ZvFY+dDS4/Pm+QC2KO4bFJSczLLUov07RK4Mk7t62EqWC1VMWXNfvYGxm2iXYycHBIC JhLzZs9ghbGv37zB1sXIwcEmoCRxbG8MSFhEQFRi3tHZLF2MXBzMAouZJBYeXs8EkhAWCJZ4 c/E/mM0ioCqxovsZ2BxeAWOJqXMOMUPM1JRouHQPrIYTaP6Lz9fAbCGgmuXrpjNC1AtKnJz5 hAXEZhaQl2jeOpsZZJmEwAk2iSXNa6EGSUocXHGDZQIj/ywkPbOQ9CxgZFrFKJSZV5abmJlj opdRmZdZoZecn7uJERjIy2r/RO9g/HQh+BCjAAejEg+vQM6FdCHWxLLiytxDjBIczEoivKtt gUK8KYmVValF+fFFpTmpxYcYpTlYlMR5jb6VpwgJpCeWpGanphakFsFkmTg4pRoYJbrvZv5r j7Sez7DUR6rsezPb1fv5e6P47rMEFmz/ZPNxnt7KliXRC8JXXF+h2PQm2+LDHLOFEzoO91Z2 /Y4pO21oHyp4JVP6oFqQnXtxz9cbZRVs0y4vYF4j0cy6+HzgnTKW/hpm2U3NP2VfM3/66JP8 OCgpQaZR4YW+LPvfpvOxMzhy1O8osRRnJBpqMRcVJwIAscJsSGACAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOLMWRmVeSWpSXmKPExsXCNUNNS9fc7mK6wdEp3BZz1q9hs5g+9QKj xc+7x9ktPj97zWxxfOs8dovDc0+yWpyfdYrF4vKuOWwW99b8Z7U4dO05q8XqNRkWv7etYHPg 8dg56y67R3fbZXaPxXteMnls+jSJ3ePEjN8sHjsfWnp8u+3hsfjFByaPz5vkAjijuGxSUnMy y1KL9O0SuDJO7ethKlgtVTFlzX72BsZtol2MnBwSAiYS12/eYOti5OBgE1CSOLY3BiQsIiAq Me/obJYuRi4OZoHFTBILD69nAkkICwRLvLn4H8xmEVCVWNH9jBXE5hUwlpg65xAzxExNiYZL 98BqOIHmv/h8DcwWAqpZvm46I0S9oMTJmU9YQGxmAXmJ5q2zmScw8sxCkpqFJLWAkWkVo0hm XlluYmaOqV5xdkZlXmaFXnJ+7iZGYPAuq/0zcQfjl8vuhxgFOBiVeHgPqF5IF2JNLCuuzD3E KMHBrCTCu9oWKMSbklhZlVqUH19UmpNafIhRmoNFSZzXKzw1QUggPbEkNTs1tSC1CCbLxMEp 1cCYs0mwrrdw0aKNvbf6ZIMvtlov95w0TXbh4kamrwXrbjkveSkh8nae02TpyPrfrLuOHFC/ sqLTxab304Hz9Xz/v6d3Hi3ws1u1ZGqYpLmkVuyZt2s0i97+P15upmZ9kjHJ2uKtk6kve8W/ A2sT9Ce4Pe9l23E4tKExXm/64ZDuS5tFFLhfKnoqsRRnJBpqMRcVJwIAYzKyqloCAAA= X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: C400F100005 X-Rspamd-Server: rspam05 X-Stat-Signature: 3wgaau8yfk87cmebnohainwx36szr6my X-HE-Tag: 1741766202-367018 X-HE-Meta: U2FsdGVkX1/H69InMHMM6B5bwA7kn89t9DSSgpdCAMij0vcHZ2r/AKJ8SnoKm5gGNDaTGl4tKz3nVK9dFECoFUIitCiWGWqK5MjG2ykYJ81rNKS5pAES1G3Z7XrbfdijTD9A0Xjy5UpKRprgu651WsFZ9pSY83tEKeMzJ+isYgc3A8CZGbjffT8x857ZPJHMZLhSoHCzWg2wWOUMHUXTk/N9jq324gg5QRfeh6UFfW0QIksFmhf7+/V5bEGXsT2NijOi3pnMITAfTo0pJLNqhxm1fpPqwdTdhqpNphWFZz83FnAovIJyaE1d1LebrZTzjTABIy8mSGT5U1UBsVXJCUVfjTUC+4hyZKkFWKK6bzyxtFTJx43h4s3y+zgs+Cnt76MRYWcAiyNLj9Fa639lFZmubu/rgxfHE4u0VcjjlR5ffL3yT77H867ppzasL6x4McOGbSEkK87O/tmecn+UFavo5PZtFLhmICdkFeD8G6nUcR50zCL0WO0ha+NWQ0kUB1mSwAn5hzGqA4AUOluBQPnsEZqukwRTlLMqD2pP+N44Dh7OPShuXBqDut1nfJbZiihFtaI24zz0eDbeSxoUts5heM9AqQOB4b0NaCMu99ijI6hVz0AWq5cX7/jar9n/wcPsnc+On2FKMI8GB69qFjCDrvPt8okxS2uyR3jWMtcWL2GRjCFsgU0s8WrbLc9Mo/RKv6VnOQjmeH3aEAIWYXupTOMLYoHKU3GpCWpV00g8ZUX8MRhZjmTz1/i0bQ7byFPfkQBjPij/mbz2JbqRbRDbJVks3+/laEp7KKhK5BUO1xjjzSrJnRoG4UtNMi5QhiO0AVGBPxGogh3qYF2MTAflmS/3B0CbHzpvK92+170r3XdfebjpPshRf9nZMcpsC0IPUWWFj1d82DEIxl9lrhz7JtXR28UzEaDqSXhmMUD4509JLTnfFtRRO7ZcW/D8ky23+rMhpbYGoji6UqT PjQO+dx0 0pysXk087nRg/0dPj/qPkiiwE71IBnfL2iXq5+LBC5u8UUT+b/ASozqcTXgpfwJbtNLgVCyG/egIFHFBMfcZN5JoP9ri9v7WAl4Nb 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 weighted interleave policy distributes page allocations across multiple NUMA nodes based on their performance weight, thereby optimizing memory bandwidth utilization. The weight values for each node are configured through sysfs. Previously, the sysfs entries for configuring weighted interleave were only created during initialization. This approach had several limitations: - Sysfs entries were generated for all possible nodes at boot time, including nodes without memory, leading to unnecessary sysfs creation. - Some memory devices transition to an online state after initialization, but the existing implementation failed to create sysfs entries for these dynamically added nodes. As a result, memory hotplugged nodes were not properly recognized by the weighed interleave mechanism. To resolve these issues, this patch introduces two key improvements: 1) At initialization, only nodes that are online and have memory are recognized, preventing the creation of unnecessary sysfs entries. 2) Nodes that become available after initialization are dynamically detected and integrated through the memory hotplug mechanism. With this enhancement, the weighted interleave policy now properly supports memory hotplug, ensuring that newly added nodes are recognized and sysfs entries are created accordingly. Signed-off-by: Rakie Kim --- mm/mempolicy.c | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 1691748badb2..94efff89e0be 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -113,6 +113,7 @@ #include #include #include +#include #include "internal.h" @@ -3489,9 +3490,38 @@ static int add_weight_node(int nid, struct kobject *wi_kobj) return 0; } +struct kobject *wi_kobj; + +static int wi_node_notifier(struct notifier_block *nb, + unsigned long action, void *data) +{ + int err; + struct memory_notify *arg = data; + int nid = arg->status_change_nid; + + if (nid < 0) + goto notifier_end; + + switch(action) { + case MEM_ONLINE: + err = add_weight_node(nid, wi_kobj); + if (err) { + pr_err("failed to add sysfs [node%d]\n", nid); + kobject_put(wi_kobj); + return NOTIFY_BAD; + } + break; + case MEM_OFFLINE: + sysfs_wi_node_release(node_attrs[nid], wi_kobj); + break; + } + +notifier_end: + return NOTIFY_OK; +} + static int add_weighted_interleave_group(struct kobject *root_kobj) { - struct kobject *wi_kobj; int nid, err; wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); @@ -3505,16 +3535,23 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) return err; } - for_each_node_state(nid, N_POSSIBLE) { + for_each_online_node(nid) { + if (!node_state(nid, N_MEMORY)) + continue; + err = add_weight_node(nid, wi_kobj); if (err) { pr_err("failed to add sysfs [node%d]\n", nid); - break; + goto err_out; } } - if (err) - kobject_put(wi_kobj); + + hotplug_memory_notifier(wi_node_notifier, DEFAULT_CALLBACK_PRI); return 0; + +err_out: + kobject_put(wi_kobj); + return err; } static void mempolicy_kobj_release(struct kobject *kobj) From patchwork Wed Mar 12 07:56:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013064 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 7E228C28B2E for ; Wed, 12 Mar 2025 07:56:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 85D4A280004; Wed, 12 Mar 2025 03:56:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7E757280001; Wed, 12 Mar 2025 03:56:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 65F58280004; Wed, 12 Mar 2025 03:56:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 49A01280001 for ; Wed, 12 Mar 2025 03:56:45 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 381D5A92EF for ; Wed, 12 Mar 2025 07:56:47 +0000 (UTC) X-FDA: 83212142454.06.F2202D3 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id 41E9D100003 for ; Wed, 12 Mar 2025 07:56:45 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741766205; a=rsa-sha256; cv=none; b=vC8LbcllIdvzClBF98Az1pwAxzVbmoBaz0w8+689r9kDkgHRXk7yofbhhynugbpNncDn+P nKnW5Vep/9C440ftTSrMkGQ1gGNdwBXvY6btYlgI667s5+ae1qkBLYEwM4zvwnIUg/mJtC aIl51dyMm8LtXLWDhQxx/8gv2OJ3cX0= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741766205; 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; bh=Bl4Wlc/CYPoGP2g70T62yoDvCG6jelmvgJOhKNz5y/g=; b=BrtgEOYKk5bnu//CVDu/ZPbsXfalaM6QCjeRRozZp3UZ+o2pokr8M0+J/afBuuvtG1lUCE sv4TC4HLYxYN5U6T6emwLNaLUag7fNSB9bDCufWMkYsP+R4Qeyiupr69nVAvbx8PPfi4p+ 01OY2pNVHGG41WyPxIC6efZTk1AhXI0= X-AuditID: a67dfc5b-669ff7000002311f-12-67d13e394814 From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v2 3/4] mm/mempolicy: Enable sysfs support for memory hotplug in weighted interleave Date: Wed, 12 Mar 2025 16:56:26 +0900 Message-ID: <20250312075628.648-3-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250312075628.648-1-rakie.kim@sk.com> References: <20250312075628.648-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNLMWRmVeSWpSXmKPExsXC9ZZnka6l3cV0gyn7xSzmrF/DZjF96gVG i593j7NbHN86j93i/KxTLBaXd81hs7i35j+rxeo1GQ4cHjtn3WX36G67zO6xeM9LJo9Nnyax e5yY8ZvFY+dDS4/Pm+QC2KO4bFJSczLLUov07RK4Mu5NVS7YrFMxa21sA+Mf5S5GTg4JAROJ u5MusMHYf4+cZeli5OBgE1CSOLY3BiQsIiAqMe/obKAwFwezwGImiYWH1zOBJIQFUiTWP1kA 1ssioCoxpQmkl5ODV8BYYtm79ywQMzUlGi7dA6vnBJr/4vM1MFsIqGb5uumMEPWCEidnPgGr ZxaQl2jeOpsZZJmEwBE2iZZDy6COk5Q4uOIGywRG/llIemYh6VnAyLSKUSgzryw3MTPHRC+j Mi+zQi85P3cTIzCIl9X+id7B+OlC8CFGAQ5GJR5egZwL6UKsiWXFlbmHGCU4mJVEeFfbAoV4 UxIrq1KL8uOLSnNSiw8xSnOwKInzGn0rTxESSE8sSc1OTS1ILYLJMnFwSjUwTvxWl/Hp/uxg iXeBK+ztm6ctlLSo3ZrbWL3ozvwVzzTmzX142HOqV7IdY/DpXx82t8gEzpg7r6CB0Tx693Ge hKUBWbcMOt10JqzcXVp18VLw6qvph5IslD4F8v9aOfsok/2lto/657czitxmbDtZxbKkcu+L uXqVme++7LpWqTL7wu4fB0x9LJVYijMSDbWYi4oTAU0ibYpeAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrKLMWRmVeSWpSXmKPExsXCNUNNS9fS7mK6wfMmLos569ewWUyfeoHR 4ufd4+wWn5+9ZrY4vnUeu8XhuSdZLc7POsVicXnXHDaLe2v+s1ocuvac1WL1mgyL39tWsDnw eOycdZfdo7vtMrvH4j0vmTw2fZrE7nFixm8Wj50PLT2+3fbwWPziA5PH501yAZxRXDYpqTmZ ZalF+nYJXBn3pioXbNapmLU2toHxj3IXIyeHhICJxN8jZ1m6GDk42ASUJI7tjQEJiwiISsw7 OhsozMXBLLCYSWLh4fVMIAlhgRSJ9U8WsIHYLAKqElOaQHo5OXgFjCWWvXvPAjFTU6Lh0j2w ek6g+S8+XwOzhYBqlq+bzghRLyhxcuYTsHpmAXmJ5q2zmScw8sxCkpqFJLWAkWkVo0hmXllu YmaOqV5xdkZlXmaFXnJ+7iZGYOAuq/0zcQfjl8vuhxgFOBiVeHgPqF5IF2JNLCuuzD3EKMHB rCTCu9oWKMSbklhZlVqUH19UmpNafIhRmoNFSZzXKzw1QUggPbEkNTs1tSC1CCbLxMEp1cC4 8ZLu56tO3VkVWU1slq+DHb9lcy9h/nCnNs5+zp7sZ2oHbniLTJLzfLbz2+tnC5U/cymXl504 7GXS/jTDOkJf7v5fvzzvT/I/FWbdiHLLWcLlsFHVYOWnii/ntZsy8hK3HRZoOXGa3emwY5eB kaqA4jeVtAsLu92v3rxyonMyz7bJlfrnl3srsRRnJBpqMRcVJwIABYdkhlgCAAA= X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: 41E9D100003 X-Rspamd-Server: rspam05 X-Stat-Signature: b9n933fkpmqyjderqgrtftox7q31pguz X-HE-Tag: 1741766205-693741 X-HE-Meta: U2FsdGVkX19oZ8u3viW+SaGuMD3GRO4VVOBPZj3lqJqnq2liBeIxZy06jOV/Z3VBi/6aWfnEhFR9az5G12hWkF9MyILgv1QJZWIwjMtM5kLcNBrlVV6OZ6UfUk5CXypIfd0zScfoE4Q/va35XlX7KM5o9UEiWVGOhuDh6BzS9F8U+oo5P9BQB3Sb6NPswghvUGI6DM4LfDvOSxGQ/5IP8kVm10xWvXCLBUoz6giflMKXSOas7/iUO0t4lKr53k8mV2CgZxr9uYl6zSwdxGQfaMRa+PMz4RYkpActROWd0WneWQpCFgYV8Sxwx4JWR1DaMJwzPtatakw9QDpl8l+znyyKnHUIxZ2m9L9bjVDjaTKDDeAkqUGOrId2U3KUgjpi1xnjqCMjyxPRIfFYAaljRbqzkQfuzqDZGMqHeV6EYLUJ881hncWgL3FXfdNHeW+8eo2r/BPiwSAE+ZljQG7rhZT7Icb4RIwTX9SymRGpSt8B1yyzZYsVA8cWm3mK6eBCcv865j5yQziQnrV1HbG4Rvjip6cOE1uDiXY7X+nnaCKZoHhcrtkrHljTA06xlXagoHtipBWhCcUUc4c+2ww7tKtzPqkuWiwQjmLAzuuB9z5ilVnCvicdqGMvBEH6rE2KJA7pVPe3CtY5LCjmpl3NRLusgaxyQxJfpPdpjT7rSo7E6nA2ycojPtyJ9wAhAPLD3tYMreXNQlCvqwqdGW+sQoGS2ERe4FeHMzzbX9uCyQhsEuJpV1ethDO27Y8HSIkgvCm1RwFjC5KrK3b6yjxYXlMoN2bN1tT3s9VwvbEgmxC+aUipC4BwESmQCQWp0FaRtDEAVfkbzdtzj2lJEWzg0jUiQjNzIb2CgLuDcjj3kWolOkRGHWU+T1Gidf3BsdwJqeIdhSAC3K5rXSkvQTbLEjpkNn5J8Z9wspcg8hFAXtkXsGgc5MhQZ4ZhlNY1mAze/9OXLe8ScqMqeSd6oTw HtzdPSSf NSmTUoeeGEXmG6Xd3Ll95owkz5Hb0yUnsnw3AOni4NUzZrNLAcOv8FWRzOXQCVkmzZ4QL4WLZoRuKWSQorNTYzeeunHmncHt1B4CW 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: Previously, sysfs entries for weighted interleave were only created during initialization, preventing dynamically added memory nodes from being recognized. This patch enables sysfs registration for nodes added via memory hotplug, allowing weighted interleave settings to be updated as the system memory configuration changes. Signed-off-by: Rakie Kim --- mm/mempolicy.c | 78 +++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 94efff89e0be..71aff1276d4d 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3389,6 +3389,13 @@ struct iw_node_attr { int nid; }; +struct iw_node_group { + struct kobject *wi_kobj; + struct iw_node_attr **nattrs; +}; + +static struct iw_node_group *ngrp; + static ssize_t node_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { @@ -3431,24 +3438,22 @@ static ssize_t node_store(struct kobject *kobj, struct kobj_attribute *attr, return count; } -static struct iw_node_attr **node_attrs; - -static void sysfs_wi_node_release(struct iw_node_attr *node_attr, - struct kobject *parent) +static void sysfs_wi_node_release(int nid) { - if (!node_attr) + if (!ngrp->nattrs[nid]) return; - sysfs_remove_file(parent, &node_attr->kobj_attr.attr); - kfree(node_attr->kobj_attr.attr.name); - kfree(node_attr); + + sysfs_remove_file(ngrp->wi_kobj, &ngrp->nattrs[nid]->kobj_attr.attr); + kfree(ngrp->nattrs[nid]->kobj_attr.attr.name); + kfree(ngrp->nattrs[nid]); } static void sysfs_wi_release(struct kobject *wi_kobj) { - int i; + int nid; - for (i = 0; i < nr_node_ids; i++) - sysfs_wi_node_release(node_attrs[i], wi_kobj); + for (nid = 0; nid < nr_node_ids; nid++) + sysfs_wi_node_release(nid); kobject_put(wi_kobj); } @@ -3457,7 +3462,7 @@ static const struct kobj_type wi_ktype = { .release = sysfs_wi_release, }; -static int add_weight_node(int nid, struct kobject *wi_kobj) +static int sysfs_wi_node_add(int nid) { struct iw_node_attr *node_attr; char *name; @@ -3479,19 +3484,17 @@ static int add_weight_node(int nid, struct kobject *wi_kobj) node_attr->kobj_attr.store = node_store; node_attr->nid = nid; - if (sysfs_create_file(wi_kobj, &node_attr->kobj_attr.attr)) { + if (sysfs_create_file(ngrp->wi_kobj, &node_attr->kobj_attr.attr)) { kfree(node_attr->kobj_attr.attr.name); kfree(node_attr); pr_err("failed to add attribute to weighted_interleave\n"); return -ENOMEM; } - node_attrs[nid] = node_attr; + ngrp->nattrs[nid] = node_attr; return 0; } -struct kobject *wi_kobj; - static int wi_node_notifier(struct notifier_block *nb, unsigned long action, void *data) { @@ -3504,15 +3507,15 @@ static int wi_node_notifier(struct notifier_block *nb, switch(action) { case MEM_ONLINE: - err = add_weight_node(nid, wi_kobj); + err = sysfs_wi_node_add(nid); if (err) { pr_err("failed to add sysfs [node%d]\n", nid); - kobject_put(wi_kobj); + kobject_put(ngrp->wi_kobj); return NOTIFY_BAD; } break; case MEM_OFFLINE: - sysfs_wi_node_release(node_attrs[nid], wi_kobj); + sysfs_wi_node_release(nid); break; } @@ -3524,14 +3527,14 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) { int nid, err; - wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); - if (!wi_kobj) + ngrp->wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); + if (!ngrp->wi_kobj) return -ENOMEM; - err = kobject_init_and_add(wi_kobj, &wi_ktype, root_kobj, + err = kobject_init_and_add(ngrp->wi_kobj, &wi_ktype, root_kobj, "weighted_interleave"); if (err) { - kfree(wi_kobj); + kfree(ngrp->wi_kobj); return err; } @@ -3539,7 +3542,7 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) if (!node_state(nid, N_MEMORY)) continue; - err = add_weight_node(nid, wi_kobj); + err = sysfs_wi_node_add(nid); if (err) { pr_err("failed to add sysfs [node%d]\n", nid); goto err_out; @@ -3550,7 +3553,7 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) return 0; err_out: - kobject_put(wi_kobj); + kobject_put(ngrp->wi_kobj); return err; } @@ -3565,7 +3568,9 @@ static void mempolicy_kobj_release(struct kobject *kobj) mutex_unlock(&iw_table_lock); synchronize_rcu(); kfree(old); - kfree(node_attrs); + + kfree(ngrp->nattrs); + kfree(ngrp); kfree(kobj); } @@ -3578,17 +3583,23 @@ static int __init mempolicy_sysfs_init(void) int err; static struct kobject *mempolicy_kobj; - node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), - GFP_KERNEL); - if (!node_attrs) { + ngrp = kzalloc(sizeof(*ngrp), GFP_KERNEL); + if (!ngrp) { err = -ENOMEM; goto err_out; } + ngrp->nattrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), + GFP_KERNEL); + if (!ngrp->nattrs) { + err = -ENOMEM; + goto ngrp_out; + } + mempolicy_kobj = kzalloc(sizeof(*mempolicy_kobj), GFP_KERNEL); if (!mempolicy_kobj) { err = -ENOMEM; - goto node_out; + goto nattr_out; } err = kobject_init_and_add(mempolicy_kobj, &mempolicy_ktype, mm_kobj, @@ -3606,12 +3617,13 @@ static int __init mempolicy_sysfs_init(void) return 0; -node_out: - kfree(node_attrs); +nattr_out: + kfree(ngrp->nattrs); +ngrp_out: + kfree(ngrp); err_out: pr_err("mempolicy sysfs structure failed to initialize\n"); return err; - } late_initcall(mempolicy_sysfs_init); From patchwork Wed Mar 12 07:56:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013065 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 1B8F1C28B28 for ; Wed, 12 Mar 2025 07:56:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A48D7280005; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9AB35280001; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7DAA1280005; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 60446280001 for ; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 876F6A92B5 for ; Wed, 12 Mar 2025 07:56:49 +0000 (UTC) X-FDA: 83212142538.23.04C5615 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id A0A05100003 for ; Wed, 12 Mar 2025 07:56:47 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741766208; a=rsa-sha256; cv=none; b=uYfspsN1X6SUh8eYq1DTPFyQxTBzf5pQqNrtR+7PWVdGdI4y21AAcKN9a1dK1t0fzXE4Kq miZqp65F+bdhiD9wtWQgMDoRgIVSvd/fReFOiwQGyuNnKOwVtGuiymvvy3Pmo1w5p30bQK GVF90tEb+tbM/VgOvGBkdWwm3kpSQAc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741766208; 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; bh=Hn0s9XMNnzdHinq6vgh+OHdzg0VXAF8PM1GiCV98GjA=; b=FPumuGBShB9i2FG0+BqXoyA0/ZroSc/QAeg7yQz0irvbpViW+i9Frn6lH0CZPo31i5TOUS m1d3w3TAUvrtUrploMucgm+x/YfhFyidKoO8jLwRM2YJ8tWd1g9eHYRf4rreCVvkbia2u4 4i6mq+DmxgHcnopa2gdrwMjpHUM5pY8= X-AuditID: a67dfc5b-669ff7000002311f-17-67d13e3b6a68 From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v2 4/4] mm/mempolicy: Fix duplicate node addition in sysfs for weighted interleave Date: Wed, 12 Mar 2025 16:56:27 +0900 Message-ID: <20250312075628.648-4-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250312075628.648-1-rakie.kim@sk.com> References: <20250312075628.648-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrLLMWRmVeSWpSXmKPExsXC9ZZnka613cV0g3+LBCzmrF/DZjF96gVG i593j7NbHN86j93i/KxTLBaXd81hs7i35j+rxeo1GQ4cHjtn3WX36G67zO6xeM9LJo9Nnyax e5yY8ZvFY+dDS4/Pm+QC2KO4bFJSczLLUov07RK4Mv6fmMdc8Fym4kPrDPYGxjfiXYycHBIC JhJtE66xwNjTHnYxdjFycLAJKEkc2xsDEhYREJWYd3Q2UAkXB7PAYiaJhYfXM4EkhAWSJHo/ P2cGsVkEVCUOPXrICGLzChhLXH47lxFipqZEw6V7YPWcQPNffL4GZgsB1SxfNx2qXlDi5Mwn YDcwC8hLNG+dzQyyTELgBJvEw4u7WSEGSUocXHGDZQIj/ywkPbOQ9CxgZFrFKJSZV5abmJlj opdRmZdZoZecn7uJERjIy2r/RO9g/HQh+BCjAAejEg+vQM6FdCHWxLLiytxDjBIczEoivKtt gUK8KYmVValF+fFFpTmpxYcYpTlYlMR5jb6VpwgJpCeWpGanphakFsFkmTg4pRoYixdz5s00 Wtp58klRe+3XNcfVMltvqO1XXG6xts7o8mLGfnfNt2+E3mu9iY4/bn3w5uQTzysqPrF8maJ7 9q9vrX5Zw8V/l9R1PXb4trfO9Lq9NuPxvYZ9hzaHMC9flLCzuEUy+s+nR/4fHzfU9sTO2Lh3 8pKwDwsrrs6JfbnSwM5d89imdG6NI0osxRmJhlrMRcWJAM+avFBgAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOLMWRmVeSWpSXmKPExsXCNUNNS9fa7mK6wZXtHBZz1q9hs5g+9QKj xc+7x9ktPj97zWxxfOs8dovDc0+yWpyfdYrF4vKuOWwW99b8Z7U4dO05q8XqNRkWv7etYHPg 8dg56y67R3fbZXaPxXteMnls+jSJ3ePEjN8sHjsfWnp8u+3hsfjFByaPz5vkAjijuGxSUnMy y1KL9O0SuDL+n5jHXPBcpuJD6wz2BsY34l2MnBwSAiYS0x52MXYxcnCwCShJHNsbAxIWERCV mHd0NksXIxcHs8BiJomFh9czgSSEBZIkej8/ZwaxWQRUJQ49esgIYvMKGEtcfjuXEWKmpkTD pXtg9ZxA8198vgZmCwHVLF83HapeUOLkzCcsIDazgLxE89bZzBMYeWYhSc1CklrAyLSKUSQz ryw3MTPHVK84O6MyL7NCLzk/dxMjMHiX1f6ZuIPxy2X3Q4wCHIxKPLwHVC+kC7EmlhVX5h5i lOBgVhLhXW0LFOJNSaysSi3Kjy8qzUktPsQozcGiJM7rFZ6aICSQnliSmp2aWpBaBJNl4uCU amAsc6q5P0t43c7S+AsqSelhaa7nfkwNNe4plGMv2V0jq/jpBE/xpUfia5cqfpNPdC/4LXDu 5YJo9kDm3uRnV5Mz56dVP2nfvKq34o7VhdjrR26sNVDaXirHOnv7HN1stewuFv7yvQ+SPNcs 62A8Jbaj0rZiY8uLWTV3FvxbzXav1WCRXM3d5lolluKMREMt5qLiRACMy050WgIAAA== X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: A0A05100003 X-Rspamd-Server: rspam05 X-Stat-Signature: nd9wrjnbrtra51dagom6e5apb446g9k1 X-HE-Tag: 1741766207-489307 X-HE-Meta: U2FsdGVkX1+4QqVEjhpU9kOg6OyJiEc1SH81XmE+TUiAZcV8jKK1DcJ4nZmMSEabLz4C2fZV0gAdUJzAHIXvcitGFqVu7LGkGgd4cJVnj+4ycczoTJnQkGxFjSM/kmb08e3vkIQ25AoTDPg1sPXjx/zCp9cf04l20EtK7O3nfzAzRxHmkxTvgMGlluyuCs6Vmy9X5P+5b9F73FzPg0F2R7/s2hXAZhdpi13sxqXVIQyH2HxI9goO5meldp1FJTJaAz9190nAIp05WcHFsAeE99s5VtciM8BkNYTF7AzVvembc6rk5PKHs06nXjwVyGs/WneW3K/j5A87IOf8DoNB4VqvB0JcsDL9gleVHJNzZx+WVna75v2+e6qxgMWgi1d4rxu16B6qKIe2fYhLm76i2n0fAt3up+2f9DIv951pRtztd8ct666BIcVBXVQT9BFV9TPkZLD8JDSCXxM4eKqDQjTHVjsJCuZXoPYUCQ3BKpOcUVR7ezhCycIoEdeky6g0kaULxgObf1YDnAAJR8B75U3nREg27FN8yYz6IoYAVrpuTGN4hcTxtfEhlLLUc0lMYPp1AUtMlnS/8V6KUw7ov2LupqmYK2GNbu/NtLa/P8002V6ezeCQ1/sMr4oz5MQrLjhsn5YthOJnY75M78ZW8eXAo4WJWu8pQyQhI7JzCATwBoBrCKGVuLVEsErGV45npPFR99FiFyutYMEl3KDoAlpMD1X9B+lbgoyyt9EJtbC8pgqC3HiC5JaA6enYx8v45MIW1IkjOnQ4T2if9oKLH9piGvb+Hfael2aZYKCKDegXPuHKvlA6eFlDa6rQwFls89hIOiHcNFlAVQFZK+5y+Yk5n2hSchYGow8D2hu1I1vA2ZW2zwQ5ZKBvZm9RybP2+iNejkCKDbCPkO1EkNcUizwNOdsX6xVmCcUWroKaENmRlHQ/2pvfAErTcDGTS0drzwbC8IV6xtRbORsHldh Ij0ymHuH m84pvBeZpWjew1xfkbt7loXB7wnneSN2Q2LFt43oRy1Gqws7nCJGMFH7yQTZWz3za0hFdO6rM4g1+5q+NDRAupKNeCllI/85s7i/v 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: Sysfs attributes for interleave control were registered both at initialization and when new nodes were detected via hotplug, leading to potential duplicates. This patch ensures that each node is registered only once, preventing conflicts and redundant sysfs entries. Signed-off-by: Rakie Kim --- mm/mempolicy.c | 66 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 71aff1276d4d..5f20521036ec 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3391,6 +3391,7 @@ struct iw_node_attr { struct iw_node_group { struct kobject *wi_kobj; + struct mutex kobj_lock; struct iw_node_attr **nattrs; }; @@ -3440,12 +3441,17 @@ static ssize_t node_store(struct kobject *kobj, struct kobj_attribute *attr, static void sysfs_wi_node_release(int nid) { - if (!ngrp->nattrs[nid]) + mutex_lock(&ngrp->kobj_lock); + if (!ngrp->nattrs[nid]) { + mutex_unlock(&ngrp->kobj_lock); return; + } sysfs_remove_file(ngrp->wi_kobj, &ngrp->nattrs[nid]->kobj_attr.attr); kfree(ngrp->nattrs[nid]->kobj_attr.attr.name); kfree(ngrp->nattrs[nid]); + ngrp->nattrs[nid] = NULL; + mutex_unlock(&ngrp->kobj_lock); } static void sysfs_wi_release(struct kobject *wi_kobj) @@ -3464,35 +3470,54 @@ static const struct kobj_type wi_ktype = { static int sysfs_wi_node_add(int nid) { - struct iw_node_attr *node_attr; + int ret = 0; char *name; - node_attr = kzalloc(sizeof(*node_attr), GFP_KERNEL); - if (!node_attr) - return -ENOMEM; + if (nid < 0 || nid >= nr_node_ids) { + pr_err("Invalid node id: %d\n", nid); + ret = -EINVAL; + goto out; + } + + mutex_lock(&ngrp->kobj_lock); + if (!ngrp->nattrs[nid]) { + ngrp->nattrs[nid] = kzalloc(sizeof(struct iw_node_attr), GFP_KERNEL); + } else { + mutex_unlock(&ngrp->kobj_lock); + pr_info("Node [%d] is already existed\n", nid); + goto out; + } + mutex_unlock(&ngrp->kobj_lock); + + if (!ngrp->nattrs[nid]) { + ret = -ENOMEM; + goto out; + } name = kasprintf(GFP_KERNEL, "node%d", nid); if (!name) { - kfree(node_attr); - return -ENOMEM; + kfree(ngrp->nattrs[nid]); + ret = -ENOMEM; + goto out; } - sysfs_attr_init(&node_attr->kobj_attr.attr); - node_attr->kobj_attr.attr.name = name; - node_attr->kobj_attr.attr.mode = 0644; - node_attr->kobj_attr.show = node_show; - node_attr->kobj_attr.store = node_store; - node_attr->nid = nid; + sysfs_attr_init(&ngrp->nattrs[nid]->kobj_attr.attr); + ngrp->nattrs[nid]->kobj_attr.attr.name = name; + ngrp->nattrs[nid]->kobj_attr.attr.mode = 0644; + ngrp->nattrs[nid]->kobj_attr.show = node_show; + ngrp->nattrs[nid]->kobj_attr.store = node_store; + ngrp->nattrs[nid]->nid = nid; - if (sysfs_create_file(ngrp->wi_kobj, &node_attr->kobj_attr.attr)) { - kfree(node_attr->kobj_attr.attr.name); - kfree(node_attr); - pr_err("failed to add attribute to weighted_interleave\n"); - return -ENOMEM; + ret = sysfs_create_file(ngrp->wi_kobj, &ngrp->nattrs[nid]->kobj_attr.attr); + if (ret) { + kfree(ngrp->nattrs[nid]->kobj_attr.attr.name); + kfree(ngrp->nattrs[nid]); + pr_err("failed to add attribute to weighted_interleave: %d\n", ret); + goto out; } - ngrp->nattrs[nid] = node_attr; - return 0; +out: + return ret; } static int wi_node_notifier(struct notifier_block *nb, @@ -3588,6 +3613,7 @@ static int __init mempolicy_sysfs_init(void) err = -ENOMEM; goto err_out; } + mutex_init(&ngrp->kobj_lock); ngrp->nattrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), GFP_KERNEL);