mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
EDAC: Initialize EDAC features sysfs attributes
Fix the lockdep splat caused by missing sysfs_attr_init() calls for the recently added EDAC feature's sysfs attributes. In lockdep_init_map_type(), the check for the lock-class key if (!static_obj(key) && !is_dynamic_key(key)) causes the splat. Backtrace: RIP: 0010:lockdep_init_map_type Call Trace: __kernfs_create_file sysfs_add_file_mode_ns internal_create_group internal_create_groups device_add ? __init_waitqueue_head edac_dev_register devm_cxl_memdev_edac_register ? lock_acquire ? find_held_lock ? cxl_mem_probe ? cxl_mem_probe ? lockdep_hardirqs_on ? cxl_mem_probe cxl_mem_probe [ bp: Massage. ] Fixes:f90b738166
("EDAC: Add scrub control feature") Fixes:bcbd069b11
("EDAC: Add a Error Check Scrub control feature") Fixes:699ea5219c
("EDAC: Add a memory repair control feature") Reported-by: Dave Jiang <dave.jiang@intel.com> Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Shiju Jose <shiju.jose@huawei.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Link: https://lore.kernel.org/20250626101344.1726-1-shiju.jose@huawei.com
This commit is contained in:
parent
a3f3040657
commit
1e14ea901d
|
@ -170,8 +170,10 @@ static int ecs_create_desc(struct device *ecs_dev, const struct attribute_group
|
|||
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++)
|
||||
for (i = 0; i < ECS_MAX_ATTRS; i++) {
|
||||
sysfs_attr_init(&fru_ctx->dev_attr[i].dev_attr.attr);
|
||||
fru_ctx->ecs_attrs[i] = &fru_ctx->dev_attr[i].dev_attr.attr;
|
||||
}
|
||||
|
||||
sprintf(fru_ctx->name, "%s%d", EDAC_ECS_FRU_NAME, fru);
|
||||
group->name = fru_ctx->name;
|
||||
|
|
|
@ -333,6 +333,7 @@ static int mem_repair_create_desc(struct device *dev,
|
|||
for (i = 0; i < MR_MAX_ATTRS; i++) {
|
||||
memcpy(&ctx->mem_repair_dev_attr[i],
|
||||
&dev_attr[i], sizeof(dev_attr[i]));
|
||||
sysfs_attr_init(&ctx->mem_repair_dev_attr[i].dev_attr.attr);
|
||||
ctx->mem_repair_attrs[i] =
|
||||
&ctx->mem_repair_dev_attr[i].dev_attr.attr;
|
||||
}
|
||||
|
|
|
@ -176,6 +176,7 @@ static int scrub_create_desc(struct device *scrub_dev,
|
|||
group = &scrub_ctx->group;
|
||||
for (i = 0; i < SCRUB_MAX_ATTRS; i++) {
|
||||
memcpy(&scrub_ctx->scrub_dev_attr[i], &dev_attr[i], sizeof(dev_attr[i]));
|
||||
sysfs_attr_init(&scrub_ctx->scrub_dev_attr[i].dev_attr.attr);
|
||||
scrub_ctx->scrub_attrs[i] = &scrub_ctx->scrub_dev_attr[i].dev_attr.attr;
|
||||
}
|
||||
sprintf(scrub_ctx->name, "%s%d", "scrub", instance);
|
||||
|
|
Loading…
Reference in New Issue
Block a user