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 7A18BC36010 for ; Fri, 4 Apr 2025 13:06:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0EE93280003; Fri, 4 Apr 2025 09:06:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 09E77280001; Fri, 4 Apr 2025 09:06:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EA738280003; Fri, 4 Apr 2025 09:06:05 -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 CA429280001 for ; Fri, 4 Apr 2025 09:06:05 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 62C15B031E for ; Fri, 4 Apr 2025 13:06:07 +0000 (UTC) X-FDA: 83296384374.18.1D9E554 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf13.hostedemail.com (Postfix) with ESMTP id 5C17520018 for ; Fri, 4 Apr 2025 13:06:05 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; spf=pass (imf13.hostedemail.com: domain of jonathan.cameron@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=jonathan.cameron@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743771965; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uViKzXAcDOlYMFTcvJzR1yB881zr7CA3xZ/KY4VahZE=; b=mNfNGEOA4WKlQr6p33M0j6ztsvxcmZwODUH1JXjQoRpAm1JuBp3mlv7rnCaX/1q/zAadHR /RGKCuT1TDjyIYofvJz3cHWYdBB5g/4Wk81mldZSy1qfFg5Gc0vFLyuqzEpvgiwGmw4Mva wfZtvPpIsNmeX/cEKoRxn1yHpwSmRUs= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; spf=pass (imf13.hostedemail.com: domain of jonathan.cameron@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=jonathan.cameron@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743771965; a=rsa-sha256; cv=none; b=LcY/YgQwLCFptX2ytNo7Y0OtE7wH8jvYgRsSZOIK5Q2VyQRzPjm3RaMlWtaMvrcWCkhAub qYLcR1uSjHSXzvY6oTraOmIjCbPK9gV6rvh3lTdAhTLnXO4OVY7mHRuKqMpHS1oxVXiyri qHO/qLS0udrdptc5cS6dlSU24YOI5aw= Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4ZTf3M0KKCz6L4wH; Fri, 4 Apr 2025 21:05:19 +0800 (CST) Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71]) by mail.maildlp.com (Postfix) with ESMTPS id 71AF8140732; Fri, 4 Apr 2025 21:06:01 +0800 (CST) Received: from localhost (10.203.177.66) by frapeml500008.china.huawei.com (7.182.85.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 4 Apr 2025 15:06:00 +0200 Date: Fri, 4 Apr 2025 14:05:59 +0100 From: Jonathan Cameron To: Rakie Kim CC: , , , , , , , , , , , , Subject: Re: [PATCH v6 2/3] mm/mempolicy: Prepare weighted interleave sysfs for memory hotplug Message-ID: <20250404140559.00001112@huawei.com> In-Reply-To: <20250404074623.1179-3-rakie.kim@sk.com> References: <20250404074623.1179-1-rakie.kim@sk.com> <20250404074623.1179-3-rakie.kim@sk.com> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.203.177.66] X-ClientProxiedBy: lhrpeml500005.china.huawei.com (7.191.163.240) To frapeml500008.china.huawei.com (7.182.85.71) X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 5C17520018 X-Stat-Signature: y7qx8oegxz7xgmgkctui4jynquxg7fyc X-Rspam-User: X-HE-Tag: 1743771965-902612 X-HE-Meta: U2FsdGVkX1/cA/Oe5N2dKVuZYw8CEbDbmOEnbvGD/LorHEg26e34cxHwIsuF8m0s8j1XFtsCykdwfCnYXhh6oUyRmUId0ep6FhyA0Yua5ziHJf5gC2SWAnyBqehWtnrw+lqyI3+FF04OXQVWRA7mxYSPLFDmujLrpOotFUHoYdKlhn0U9LC62pSiXthvLeJs0luRp+F1tRgyCkGSj/kDSulPJaYmgrx2PNWTeN3/f633nxNasGpsoe93WWK/ZXp8Ua/52/QjW7Ufs8xK5ICxT40wu0vO59rm0XGZ2RewRb92Zwz9XwVO1THUoBQFEOaa1jXgKm90wGzEWaPviKXliwIrFvoY2KstntMuTOHEPrxE5PVWQTpKUAoqRWO+RZ0WmVPPOPsh6qdUSxRq4Kh9O3TJBBCDbvXb5nQEH3wRpxEzYGqZM9ZCOUJSgGftiU2VKWj8R/IO1GbkJnuylrWfnQTtDUkdTnqFvmUDZ1+45dP86MuGU2WS/OZnWco04zs+Z4TJvwyeh7I7S6hOfCTX6c4udh0nwyzMSpbZqOEKf9ndTNFao2pR8d/OQ4/pDYd/Ju0qlqRtlILDbQUa/wrmYjrEljmyDLudUYsMonCBO5kqrHe/OD0SLmuiZi9wkqrMM8x/XDMjQ4tRMlNyHbIEN5DwJ2Vd1Xn6pFvMrECTQFb5kBHmkn5YvksYjUaXwuCjaRdxBGKqObW5tblzAdUXtehoZSoeEQCRx6iyh8bW7qn8NuA5CBpwX2Xe7dUeeLv1Kg/FBmHN/FhDoHz83NyaebRmNQi+Jl5W+52wL6X3z2qfprLi1iUsHqOC5Wdqq6iSJDrzuHjESPfnwOal5yiNM+y96759TBjv8AyAXzcCSIclNe4yWP+dgpBmiSIrFO6a9uhvlHuEy6ia5HKYD2A4wxui8WiY/C7T6AG4jX/kGpUIGiPSdmFv7JlhlJ2qBbt/VUABngsEAaPal16+7d3 lwjans6k 31t3jTy7qtd/efGzPvdvJKxvwOMBNgaxGPHA/J0o4yg8ZVAQ3LA+MqkeocvsSGu5XXSNM5/rSpWc/EQ0sTDrSNJC4zMG4VLeTNpnDq8UM6PXU/UYbh+ESG7Xkwh0yFZXeBQ5owhn26SVsLeV2VOHimXwYy1iXJt3lBBzDZkjBfQr7UDilT4+yErZ7eH94QmWOy3a1CM3JvNAEwdTugxy121w0h+XdPHE8xzwrrDmMEW8t3+fYUK26sp5q0fLoEgtA1NDrybKTdm9UzZhZx1O4dUw/y8/aPQBSdVYnVJyXtNeE4um7t9syONzN1xhTQpQ1XUQYIor1JjBWv0zkcZOt4RgBG6nlZteYLQR/ViCeyuI9Rt4= 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 Fri, 4 Apr 2025 16:46:20 +0900 Rakie Kim wrote: > Previously, the weighted interleave sysfs structure was statically > managed during initialization. This prevented new nodes from being > recognized when memory hotplug events occurred, limiting the ability > to update or extend sysfs entries dynamically at runtime. > > To address this, this patch refactors the sysfs infrastructure and > encapsulates it within a new structure, `sysfs_wi_group`, which holds > both the kobject and an array of node attribute pointers. > > By allocating this group structure globally, the per-node sysfs > attributes can be managed beyond initialization time, enabling > external modules to insert or remove node entries in response to > events such as memory hotplug or node online/offline transitions. > > Instead of allocating all per-node sysfs attributes at once, the > initialization path now uses the existing sysfs_wi_node_add() and > sysfs_wi_node_delete() helpers. This refactoring makes it possible > to modularly manage per-node sysfs entries and ensures the > infrastructure is ready for runtime extension. > > Signed-off-by: Rakie Kim > Signed-off-by: Honggyu Kim > Signed-off-by: Yunjeong Mun > Reviewed-by: Gregory Price Hi Rakie, Some things I was requesting in patch 1 are done here. Mostly I think what is wanted is moving some of that refactoring back to that patch rather than here. Some of the label and function naming needs another look. Jonathan > --- > mm/mempolicy.c | 73 ++++++++++++++++++++++---------------------------- > 1 file changed, 32 insertions(+), 41 deletions(-) > > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index af3753925573..73a9405ff352 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -3388,6 +3388,13 @@ struct iw_node_attr { > int nid; > }; > > +struct sysfs_wi_group { > + struct kobject wi_kobj; > + struct iw_node_attr *nattrs[]; > +}; > + > +static struct sysfs_wi_group *wi_group; > + > static ssize_t node_show(struct kobject *kobj, struct kobj_attribute *attr, > char *buf) > { > @@ -3430,27 +3437,24 @@ 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_delete(int nid) Maybe stick to release naming to match the sysfs_wi_release() below? I don't really care about this. > { > - if (!node_attr) > + if (!wi_group->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(&wi_group->wi_kobj, > + &wi_group->nattrs[nid]->kobj_attr.attr); > + kfree(wi_group->nattrs[nid]->kobj_attr.attr.name); > + kfree(wi_group->nattrs[nid]); > } > > static void sysfs_wi_release(struct kobject *wi_kobj) > { > - int i; > - > - for (i = 0; i < nr_node_ids; i++) > - sysfs_wi_node_release(node_attrs[i], wi_kobj); > + int nid; > > - kfree(node_attrs); > - kfree(wi_kobj); > + for (nid = 0; nid < nr_node_ids; nid++) > + sysfs_wi_node_delete(nid); > + kfree(wi_group); > } > -static int add_weighted_interleave_group(struct kobject *root_kobj) > +static int add_weighted_interleave_group(struct kobject *mempolicy_kobj) > { > - struct kobject *wi_kobj; > int nid, err; > > - node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), > - GFP_KERNEL); > - if (!node_attrs) > + wi_group = kzalloc(struct_size(wi_group, nattrs, nr_node_ids), > + GFP_KERNEL); Align to after the ( I think it's a couple of spaces short of that. > + if (!wi_group) > return -ENOMEM; > > - wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); > - if (!wi_kobj) { > - err = -ENOMEM; > - goto node_out; > - } > - > - err = kobject_init_and_add(wi_kobj, &wi_ktype, root_kobj, > + err = kobject_init_and_add(&wi_group->wi_kobj, &wi_ktype, mempolicy_kobj, > "weighted_interleave"); > - if (err) { > - kobject_put(wi_kobj); > + if (err) > goto err_out; > - } > > for_each_node_state(nid, N_POSSIBLE) { > - 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); > - break; > + goto err_del; Ah! This is what I was looking for in patch 1, but it's down here. Move it back to there. > } > } > - if (err) { > - kobject_del(wi_kobj); > - kobject_put(wi_kobj); > - goto err_out; > - } > > return 0; > > -node_out: > - kfree(node_attrs); > +err_del: > + kobject_del(&wi_group->wi_kobj); > err_out: > + kobject_put(&wi_group->wi_kobj); Same issue as previous patch on naming of the label. Moving to this single error block is fine but belongs in patch 1. > return err; > } >