All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: shiju.jose@huawei.com, linux-edac@vger.kernel.org, bp@alien8.de,
	tony.luck@intel.com, arnd@kernel.org, mchehab@kernel.org,
	rric@kernel.org, dave.jiang@intel.com,
	jonathan.cameron@huawei.com
Cc: oe-kbuild-all@lists.linux.dev, linuxarm@huawei.com,
	tanxiaofei@huawei.com, prime.zeng@hisilicon.com,
	shiju.jose@huawei.com
Subject: Re: [PATCH 2/2] EDAC/ecs: Reduce stack usage in ecs_create_desc()
Date: Tue, 1 Jul 2025 11:27:20 +0800	[thread overview]
Message-ID: <202507011111.3D1OQtAM-lkp@intel.com> (raw)
In-Reply-To: <20250630162034.1788-3-shiju.jose@huawei.com>

Hi,

kernel test robot noticed the following build errors:

[auto build test ERROR on ras/edac-for-next]
[cannot apply to linus/master v6.16-rc4 next-20250630]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/shiju-jose-huawei-com/EDAC-scrub-Reduce-stack-usage-in-scrub_create_desc/20250701-002641
base:   https://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next
patch link:    https://lore.kernel.org/r/20250630162034.1788-3-shiju.jose%40huawei.com
patch subject: [PATCH 2/2] EDAC/ecs: Reduce stack usage in ecs_create_desc()
config: x86_64-randconfig-073-20250701 (https://download.01.org/0day-ci/archive/20250701/202507011111.3D1OQtAM-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250701/202507011111.3D1OQtAM-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507011111.3D1OQtAM-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/linux/kobject.h:20,
                    from include/linux/energy_model.h:7,
                    from include/linux/device.h:16,
                    from include/linux/edac.h:16,
                    from drivers/edac/ecs.c:10:
   drivers/edac/ecs.c: In function 'ecs_create_desc':
>> drivers/edac/ecs.c:167:51: error: 'struct edac_ecs_fru_context' has no member named 'dev_attr'; did you mean 'ecs_dev_attr'?
     167 |                         sysfs_attr_init(&fru_ctx->dev_attr[i].dev_attr.attr);
         |                                                   ^~~~~~~~
   include/linux/sysfs.h:55:10: note: in definition of macro 'sysfs_attr_init'
      55 |         (attr)->key = &__key;                           \
         |          ^~~~


vim +167 drivers/edac/ecs.c

bcbd069b11b024 Shiju Jose 2025-02-12  @10  #include <linux/edac.h>
bcbd069b11b024 Shiju Jose 2025-02-12   11  
bcbd069b11b024 Shiju Jose 2025-02-12   12  #define EDAC_ECS_FRU_NAME "ecs_fru"
bcbd069b11b024 Shiju Jose 2025-02-12   13  
bcbd069b11b024 Shiju Jose 2025-02-12   14  enum edac_ecs_attributes {
bcbd069b11b024 Shiju Jose 2025-02-12   15  	ECS_LOG_ENTRY_TYPE,
bcbd069b11b024 Shiju Jose 2025-02-12   16  	ECS_MODE,
bcbd069b11b024 Shiju Jose 2025-02-12   17  	ECS_RESET,
bcbd069b11b024 Shiju Jose 2025-02-12   18  	ECS_THRESHOLD,
bcbd069b11b024 Shiju Jose 2025-02-12   19  	ECS_MAX_ATTRS
bcbd069b11b024 Shiju Jose 2025-02-12   20  };
bcbd069b11b024 Shiju Jose 2025-02-12   21  
bcbd069b11b024 Shiju Jose 2025-02-12   22  struct edac_ecs_dev_attr {
bcbd069b11b024 Shiju Jose 2025-02-12   23  	struct device_attribute dev_attr;
bcbd069b11b024 Shiju Jose 2025-02-12   24  	int fru_id;
bcbd069b11b024 Shiju Jose 2025-02-12   25  };
bcbd069b11b024 Shiju Jose 2025-02-12   26  
bcbd069b11b024 Shiju Jose 2025-02-12   27  struct edac_ecs_fru_context {
bcbd069b11b024 Shiju Jose 2025-02-12   28  	char name[EDAC_FEAT_NAME_LEN];
df1b3160633d4f Shiju Jose 2025-06-30   29  	struct edac_ecs_dev_attr ecs_dev_attr[ECS_MAX_ATTRS];
bcbd069b11b024 Shiju Jose 2025-02-12   30  	struct attribute *ecs_attrs[ECS_MAX_ATTRS + 1];
bcbd069b11b024 Shiju Jose 2025-02-12   31  	struct attribute_group group;
bcbd069b11b024 Shiju Jose 2025-02-12   32  };
bcbd069b11b024 Shiju Jose 2025-02-12   33  
bcbd069b11b024 Shiju Jose 2025-02-12   34  struct edac_ecs_context {
bcbd069b11b024 Shiju Jose 2025-02-12   35  	u16 num_media_frus;
bcbd069b11b024 Shiju Jose 2025-02-12   36  	struct edac_ecs_fru_context *fru_ctxs;
bcbd069b11b024 Shiju Jose 2025-02-12   37  };
bcbd069b11b024 Shiju Jose 2025-02-12   38  
bcbd069b11b024 Shiju Jose 2025-02-12   39  #define TO_ECS_DEV_ATTR(_dev_attr)	\
bcbd069b11b024 Shiju Jose 2025-02-12   40  	container_of(_dev_attr, struct edac_ecs_dev_attr, dev_attr)
bcbd069b11b024 Shiju Jose 2025-02-12   41  
bcbd069b11b024 Shiju Jose 2025-02-12   42  #define EDAC_ECS_ATTR_SHOW(attrib, cb, type, format)				\
bcbd069b11b024 Shiju Jose 2025-02-12   43  static ssize_t attrib##_show(struct device *ras_feat_dev,			\
bcbd069b11b024 Shiju Jose 2025-02-12   44  			     struct device_attribute *attr, char *buf)		\
bcbd069b11b024 Shiju Jose 2025-02-12   45  {										\
bcbd069b11b024 Shiju Jose 2025-02-12   46  	struct edac_ecs_dev_attr *dev_attr = TO_ECS_DEV_ATTR(attr);		\
bcbd069b11b024 Shiju Jose 2025-02-12   47  	struct edac_dev_feat_ctx *ctx = dev_get_drvdata(ras_feat_dev);		\
bcbd069b11b024 Shiju Jose 2025-02-12   48  	const struct edac_ecs_ops *ops = ctx->ecs.ecs_ops;			\
bcbd069b11b024 Shiju Jose 2025-02-12   49  	type data;								\
bcbd069b11b024 Shiju Jose 2025-02-12   50  	int ret;								\
bcbd069b11b024 Shiju Jose 2025-02-12   51  										\
bcbd069b11b024 Shiju Jose 2025-02-12   52  	ret = ops->cb(ras_feat_dev->parent, ctx->ecs.private,			\
bcbd069b11b024 Shiju Jose 2025-02-12   53  		      dev_attr->fru_id, &data);					\
bcbd069b11b024 Shiju Jose 2025-02-12   54  	if (ret)								\
bcbd069b11b024 Shiju Jose 2025-02-12   55  		return ret;							\
bcbd069b11b024 Shiju Jose 2025-02-12   56  										\
bcbd069b11b024 Shiju Jose 2025-02-12   57  	return sysfs_emit(buf, format, data);					\
bcbd069b11b024 Shiju Jose 2025-02-12   58  }
bcbd069b11b024 Shiju Jose 2025-02-12   59  
bcbd069b11b024 Shiju Jose 2025-02-12   60  EDAC_ECS_ATTR_SHOW(log_entry_type, get_log_entry_type, u32, "%u\n")
bcbd069b11b024 Shiju Jose 2025-02-12   61  EDAC_ECS_ATTR_SHOW(mode, get_mode, u32, "%u\n")
bcbd069b11b024 Shiju Jose 2025-02-12   62  EDAC_ECS_ATTR_SHOW(threshold, get_threshold, u32, "%u\n")
bcbd069b11b024 Shiju Jose 2025-02-12   63  
bcbd069b11b024 Shiju Jose 2025-02-12   64  #define EDAC_ECS_ATTR_STORE(attrib, cb, type, conv_func)			\
bcbd069b11b024 Shiju Jose 2025-02-12   65  static ssize_t attrib##_store(struct device *ras_feat_dev,			\
bcbd069b11b024 Shiju Jose 2025-02-12   66  			      struct device_attribute *attr,			\
bcbd069b11b024 Shiju Jose 2025-02-12   67  			      const char *buf, size_t len)			\
bcbd069b11b024 Shiju Jose 2025-02-12   68  {										\
bcbd069b11b024 Shiju Jose 2025-02-12   69  	struct edac_ecs_dev_attr *dev_attr = TO_ECS_DEV_ATTR(attr);		\
bcbd069b11b024 Shiju Jose 2025-02-12   70  	struct edac_dev_feat_ctx *ctx = dev_get_drvdata(ras_feat_dev);		\
bcbd069b11b024 Shiju Jose 2025-02-12   71  	const struct edac_ecs_ops *ops = ctx->ecs.ecs_ops;			\
bcbd069b11b024 Shiju Jose 2025-02-12   72  	type data;								\
bcbd069b11b024 Shiju Jose 2025-02-12   73  	int ret;								\
bcbd069b11b024 Shiju Jose 2025-02-12   74  										\
bcbd069b11b024 Shiju Jose 2025-02-12   75  	ret = conv_func(buf, 0, &data);						\
bcbd069b11b024 Shiju Jose 2025-02-12   76  	if (ret < 0)								\
bcbd069b11b024 Shiju Jose 2025-02-12   77  		return ret;							\
bcbd069b11b024 Shiju Jose 2025-02-12   78  										\
bcbd069b11b024 Shiju Jose 2025-02-12   79  	ret = ops->cb(ras_feat_dev->parent, ctx->ecs.private,			\
bcbd069b11b024 Shiju Jose 2025-02-12   80  		      dev_attr->fru_id, data);					\
bcbd069b11b024 Shiju Jose 2025-02-12   81  	if (ret)								\
bcbd069b11b024 Shiju Jose 2025-02-12   82  		return ret;							\
bcbd069b11b024 Shiju Jose 2025-02-12   83  										\
bcbd069b11b024 Shiju Jose 2025-02-12   84  	return len;								\
bcbd069b11b024 Shiju Jose 2025-02-12   85  }
bcbd069b11b024 Shiju Jose 2025-02-12   86  
bcbd069b11b024 Shiju Jose 2025-02-12   87  EDAC_ECS_ATTR_STORE(log_entry_type, set_log_entry_type, unsigned long, kstrtoul)
bcbd069b11b024 Shiju Jose 2025-02-12   88  EDAC_ECS_ATTR_STORE(mode, set_mode, unsigned long, kstrtoul)
bcbd069b11b024 Shiju Jose 2025-02-12   89  EDAC_ECS_ATTR_STORE(reset, reset, unsigned long, kstrtoul)
bcbd069b11b024 Shiju Jose 2025-02-12   90  EDAC_ECS_ATTR_STORE(threshold, set_threshold, unsigned long, kstrtoul)
bcbd069b11b024 Shiju Jose 2025-02-12   91  
bcbd069b11b024 Shiju Jose 2025-02-12   92  static umode_t ecs_attr_visible(struct kobject *kobj, struct attribute *a, int attr_id)
bcbd069b11b024 Shiju Jose 2025-02-12   93  {
bcbd069b11b024 Shiju Jose 2025-02-12   94  	struct device *ras_feat_dev = kobj_to_dev(kobj);
bcbd069b11b024 Shiju Jose 2025-02-12   95  	struct edac_dev_feat_ctx *ctx = dev_get_drvdata(ras_feat_dev);
bcbd069b11b024 Shiju Jose 2025-02-12   96  	const struct edac_ecs_ops *ops = ctx->ecs.ecs_ops;
bcbd069b11b024 Shiju Jose 2025-02-12   97  
bcbd069b11b024 Shiju Jose 2025-02-12   98  	switch (attr_id) {
bcbd069b11b024 Shiju Jose 2025-02-12   99  	case ECS_LOG_ENTRY_TYPE:
bcbd069b11b024 Shiju Jose 2025-02-12  100  		if (ops->get_log_entry_type)  {
bcbd069b11b024 Shiju Jose 2025-02-12  101  			if (ops->set_log_entry_type)
bcbd069b11b024 Shiju Jose 2025-02-12  102  				return a->mode;
bcbd069b11b024 Shiju Jose 2025-02-12  103  			else
bcbd069b11b024 Shiju Jose 2025-02-12  104  				return 0444;
bcbd069b11b024 Shiju Jose 2025-02-12  105  		}
bcbd069b11b024 Shiju Jose 2025-02-12  106  		break;
bcbd069b11b024 Shiju Jose 2025-02-12  107  	case ECS_MODE:
bcbd069b11b024 Shiju Jose 2025-02-12  108  		if (ops->get_mode) {
bcbd069b11b024 Shiju Jose 2025-02-12  109  			if (ops->set_mode)
bcbd069b11b024 Shiju Jose 2025-02-12  110  				return a->mode;
bcbd069b11b024 Shiju Jose 2025-02-12  111  			else
bcbd069b11b024 Shiju Jose 2025-02-12  112  				return 0444;
bcbd069b11b024 Shiju Jose 2025-02-12  113  		}
bcbd069b11b024 Shiju Jose 2025-02-12  114  		break;
bcbd069b11b024 Shiju Jose 2025-02-12  115  	case ECS_RESET:
bcbd069b11b024 Shiju Jose 2025-02-12  116  		if (ops->reset)
bcbd069b11b024 Shiju Jose 2025-02-12  117  			return a->mode;
bcbd069b11b024 Shiju Jose 2025-02-12  118  		break;
bcbd069b11b024 Shiju Jose 2025-02-12  119  	case ECS_THRESHOLD:
bcbd069b11b024 Shiju Jose 2025-02-12  120  		if (ops->get_threshold) {
bcbd069b11b024 Shiju Jose 2025-02-12  121  			if (ops->set_threshold)
bcbd069b11b024 Shiju Jose 2025-02-12  122  				return a->mode;
bcbd069b11b024 Shiju Jose 2025-02-12  123  			else
bcbd069b11b024 Shiju Jose 2025-02-12  124  				return 0444;
bcbd069b11b024 Shiju Jose 2025-02-12  125  		}
bcbd069b11b024 Shiju Jose 2025-02-12  126  		break;
bcbd069b11b024 Shiju Jose 2025-02-12  127  	default:
bcbd069b11b024 Shiju Jose 2025-02-12  128  		break;
bcbd069b11b024 Shiju Jose 2025-02-12  129  	}
bcbd069b11b024 Shiju Jose 2025-02-12  130  
bcbd069b11b024 Shiju Jose 2025-02-12  131  	return 0;
bcbd069b11b024 Shiju Jose 2025-02-12  132  }
bcbd069b11b024 Shiju Jose 2025-02-12  133  
df1b3160633d4f Shiju Jose 2025-06-30  134  static const struct device_attribute ecs_dev_attr[] = {
df1b3160633d4f Shiju Jose 2025-06-30  135  	[ECS_LOG_ENTRY_TYPE]	= __ATTR_RW(log_entry_type),
df1b3160633d4f Shiju Jose 2025-06-30  136  	[ECS_MODE]		= __ATTR_RW(mode),
df1b3160633d4f Shiju Jose 2025-06-30  137  	[ECS_RESET]		= __ATTR_WO(reset),
df1b3160633d4f Shiju Jose 2025-06-30  138  	[ECS_THRESHOLD]		= __ATTR_RW(threshold)
df1b3160633d4f Shiju Jose 2025-06-30  139  };
bcbd069b11b024 Shiju Jose 2025-02-12  140  
bcbd069b11b024 Shiju Jose 2025-02-12  141  static int ecs_create_desc(struct device *ecs_dev, const struct attribute_group **attr_groups,
bcbd069b11b024 Shiju Jose 2025-02-12  142  			   u16 num_media_frus)
bcbd069b11b024 Shiju Jose 2025-02-12  143  {
bcbd069b11b024 Shiju Jose 2025-02-12  144  	struct edac_ecs_context *ecs_ctx;
bcbd069b11b024 Shiju Jose 2025-02-12  145  	u32 fru;
bcbd069b11b024 Shiju Jose 2025-02-12  146  
bcbd069b11b024 Shiju Jose 2025-02-12  147  	ecs_ctx = devm_kzalloc(ecs_dev, sizeof(*ecs_ctx), GFP_KERNEL);
bcbd069b11b024 Shiju Jose 2025-02-12  148  	if (!ecs_ctx)
bcbd069b11b024 Shiju Jose 2025-02-12  149  		return -ENOMEM;
bcbd069b11b024 Shiju Jose 2025-02-12  150  
bcbd069b11b024 Shiju Jose 2025-02-12  151  	ecs_ctx->num_media_frus = num_media_frus;
bcbd069b11b024 Shiju Jose 2025-02-12  152  	ecs_ctx->fru_ctxs = devm_kcalloc(ecs_dev, num_media_frus,
bcbd069b11b024 Shiju Jose 2025-02-12  153  					 sizeof(*ecs_ctx->fru_ctxs),
bcbd069b11b024 Shiju Jose 2025-02-12  154  					 GFP_KERNEL);
bcbd069b11b024 Shiju Jose 2025-02-12  155  	if (!ecs_ctx->fru_ctxs)
bcbd069b11b024 Shiju Jose 2025-02-12  156  		return -ENOMEM;
bcbd069b11b024 Shiju Jose 2025-02-12  157  
bcbd069b11b024 Shiju Jose 2025-02-12  158  	for (fru = 0; fru < num_media_frus; fru++) {
bcbd069b11b024 Shiju Jose 2025-02-12  159  		struct edac_ecs_fru_context *fru_ctx = &ecs_ctx->fru_ctxs[fru];
bcbd069b11b024 Shiju Jose 2025-02-12  160  		struct attribute_group *group = &fru_ctx->group;
bcbd069b11b024 Shiju Jose 2025-02-12  161  		int i;
bcbd069b11b024 Shiju Jose 2025-02-12  162  
1e14ea901dc8d9 Shiju Jose 2025-06-26  163  		for (i = 0; i < ECS_MAX_ATTRS; i++) {
df1b3160633d4f Shiju Jose 2025-06-30  164  			fru_ctx->ecs_dev_attr[i].dev_attr = ecs_dev_attr[i];
df1b3160633d4f Shiju Jose 2025-06-30  165  			fru_ctx->ecs_dev_attr[i].fru_id = fru;
df1b3160633d4f Shiju Jose 2025-06-30  166  
1e14ea901dc8d9 Shiju Jose 2025-06-26 @167  			sysfs_attr_init(&fru_ctx->dev_attr[i].dev_attr.attr);
df1b3160633d4f Shiju Jose 2025-06-30  168  			fru_ctx->ecs_attrs[i] = &fru_ctx->ecs_dev_attr[i].dev_attr.attr;
1e14ea901dc8d9 Shiju Jose 2025-06-26  169  		}
bcbd069b11b024 Shiju Jose 2025-02-12  170  
bcbd069b11b024 Shiju Jose 2025-02-12  171  		sprintf(fru_ctx->name, "%s%d", EDAC_ECS_FRU_NAME, fru);
bcbd069b11b024 Shiju Jose 2025-02-12  172  		group->name = fru_ctx->name;
bcbd069b11b024 Shiju Jose 2025-02-12  173  		group->attrs = fru_ctx->ecs_attrs;
bcbd069b11b024 Shiju Jose 2025-02-12  174  		group->is_visible  = ecs_attr_visible;
bcbd069b11b024 Shiju Jose 2025-02-12  175  
bcbd069b11b024 Shiju Jose 2025-02-12  176  		attr_groups[fru] = group;
bcbd069b11b024 Shiju Jose 2025-02-12  177  	}
bcbd069b11b024 Shiju Jose 2025-02-12  178  
bcbd069b11b024 Shiju Jose 2025-02-12  179  	return 0;
bcbd069b11b024 Shiju Jose 2025-02-12  180  }
bcbd069b11b024 Shiju Jose 2025-02-12  181  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

      parent reply	other threads:[~2025-07-01  3:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-30 16:20 [PATCH 0/2] EDAC/features: Reduce stack usage in create_desc functions shiju.jose
2025-06-30 16:20 ` [PATCH 1/2] EDAC/scrub: Reduce stack usage in scrub_create_desc() shiju.jose
2025-06-30 17:11   ` Jonathan Cameron
2025-06-30 16:20 ` [PATCH 2/2] EDAC/ecs: Reduce stack usage in ecs_create_desc() shiju.jose
2025-06-30 17:15   ` Jonathan Cameron
2025-07-01  3:27   ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202507011111.3D1OQtAM-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=arnd@kernel.org \
    --cc=bp@alien8.de \
    --cc=dave.jiang@intel.com \
    --cc=jonathan.cameron@huawei.com \
    --cc=linux-edac@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mchehab@kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=prime.zeng@hisilicon.com \
    --cc=rric@kernel.org \
    --cc=shiju.jose@huawei.com \
    --cc=tanxiaofei@huawei.com \
    --cc=tony.luck@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.