From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AAEF22F01 for ; Mon, 30 Jun 2025 17:15:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751303723; cv=none; b=SOFYu6W2B6CESlaO+11INyks8QgNRmUu20m6rQXYZnhTvM7q0Ta9bN0KAF1ptEkYIBxPJ7iCmDsNTxp2R6ZAkge0brRf4whADYNj1eWvlOSvCJYLoPaJiEr3Igeht6YtIfXD0yoYQ9XwKuKgb/zyvaxrBQvZ+hFg2MaFaY2FS48= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751303723; c=relaxed/simple; bh=nQ4FD3ViARVtziCcWmgarF1OkIPj1MnbaWBVHLRo8Uk=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Fs/+iUcv0x8vc/Lq5zBSIGa2TI72VebVhyDdwZH8BqH77bhBH7etPyw1P3s+m8b3DJwDk0JKSodBZ9Z2jU7BAG6GTmhui3nQCac2aj/2tOrdX+nqOlePXRn9T7NbKtunqtsPPkuu+RuEW/XvNY/LZopMC58iCHuXC4eHqNXBv1Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4bWCSd5dYvz6M58g; Tue, 1 Jul 2025 01:14:25 +0800 (CST) Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71]) by mail.maildlp.com (Postfix) with ESMTPS id 9B2D7140427; Tue, 1 Jul 2025 01:15:18 +0800 (CST) Received: from localhost (10.122.19.247) 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; Mon, 30 Jun 2025 19:15:18 +0200 Date: Mon, 30 Jun 2025 18:15:16 +0100 From: Jonathan Cameron To: CC: , , , , , , , , , Subject: Re: [PATCH 2/2] EDAC/ecs: Reduce stack usage in ecs_create_desc() Message-ID: <20250630181516.000058ab@huawei.com> In-Reply-To: <20250630162034.1788-3-shiju.jose@huawei.com> References: <20250630162034.1788-1-shiju.jose@huawei.com> <20250630162034.1788-3-shiju.jose@huawei.com> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32) Precedence: bulk X-Mailing-List: linux-edac@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: lhrpeml500010.china.huawei.com (7.191.174.240) To frapeml500008.china.huawei.com (7.182.85.71) On Mon, 30 Jun 2025 17:20:34 +0100 wrote: > From: Shiju Jose > > Reduce per-function stack usage by changing to an actual attribute array > allocated statically. Then, add the FRU ID number to the per-FRU copy. > > In addition, rename the field 'dev_attr' in struct edac_ecs_fru_context to > 'ecs_dev_attr' for better readability. > > Fixes: bcbd069b11b0 ("EDAC: Add a Error Check Scrub control feature") > Suggested-by: Borislav Petkov (AMD) > Signed-off-by: Shiju Jose I'm not sure I'd have bothered with the rename, but it's harmless and a small improvement, so fair enough. Reviewed-by: Jonathan Cameron > --- > drivers/edac/ecs.c | 29 +++++++++++------------------ > 1 file changed, 11 insertions(+), 18 deletions(-) > > diff --git a/drivers/edac/ecs.c b/drivers/edac/ecs.c > index 51c451c7f0f0..368e01db63d3 100755 > --- a/drivers/edac/ecs.c > +++ b/drivers/edac/ecs.c > @@ -26,7 +26,7 @@ struct edac_ecs_dev_attr { > > struct edac_ecs_fru_context { > char name[EDAC_FEAT_NAME_LEN]; > - struct edac_ecs_dev_attr dev_attr[ECS_MAX_ATTRS]; > + struct edac_ecs_dev_attr ecs_dev_attr[ECS_MAX_ATTRS]; > struct attribute *ecs_attrs[ECS_MAX_ATTRS + 1]; > struct attribute_group group; > }; > @@ -131,17 +131,12 @@ static umode_t ecs_attr_visible(struct kobject *kobj, struct attribute *a, int a > return 0; > } > > -#define EDAC_ECS_ATTR_RO(_name, _fru_id) \ > - ((struct edac_ecs_dev_attr) { .dev_attr = __ATTR_RO(_name), \ > - .fru_id = _fru_id }) > - > -#define EDAC_ECS_ATTR_WO(_name, _fru_id) \ > - ((struct edac_ecs_dev_attr) { .dev_attr = __ATTR_WO(_name), \ > - .fru_id = _fru_id }) > - > -#define EDAC_ECS_ATTR_RW(_name, _fru_id) \ > - ((struct edac_ecs_dev_attr) { .dev_attr = __ATTR_RW(_name), \ > - .fru_id = _fru_id }) > +static const struct device_attribute ecs_dev_attr[] = { > + [ECS_LOG_ENTRY_TYPE] = __ATTR_RW(log_entry_type), > + [ECS_MODE] = __ATTR_RW(mode), > + [ECS_RESET] = __ATTR_WO(reset), > + [ECS_THRESHOLD] = __ATTR_RW(threshold) > +}; > > static int ecs_create_desc(struct device *ecs_dev, const struct attribute_group **attr_groups, > u16 num_media_frus) > @@ -165,14 +160,12 @@ static int ecs_create_desc(struct device *ecs_dev, const struct attribute_group > struct attribute_group *group = &fru_ctx->group; > int i; > > - fru_ctx->dev_attr[ECS_LOG_ENTRY_TYPE] = EDAC_ECS_ATTR_RW(log_entry_type, fru); > - fru_ctx->dev_attr[ECS_MODE] = EDAC_ECS_ATTR_RW(mode, fru); > - fru_ctx->dev_attr[ECS_RESET] = EDAC_ECS_ATTR_WO(reset, fru); > - fru_ctx->dev_attr[ECS_THRESHOLD] = EDAC_ECS_ATTR_RW(threshold, fru); > - > for (i = 0; i < ECS_MAX_ATTRS; i++) { > + fru_ctx->ecs_dev_attr[i].dev_attr = ecs_dev_attr[i]; > + fru_ctx->ecs_dev_attr[i].fru_id = fru; > + > sysfs_attr_init(&fru_ctx->dev_attr[i].dev_attr.attr); > - fru_ctx->ecs_attrs[i] = &fru_ctx->dev_attr[i].dev_attr.attr; > + fru_ctx->ecs_attrs[i] = &fru_ctx->ecs_dev_attr[i].dev_attr.attr; > } > > sprintf(fru_ctx->name, "%s%d", EDAC_ECS_FRU_NAME, fru);