Skip to content

Commit 1e14ea9

Browse files
shijujose4bp3tk0v
authored andcommitted
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: f90b738 ("EDAC: Add scrub control feature") Fixes: bcbd069 ("EDAC: Add a Error Check Scrub control feature") Fixes: 699ea52 ("EDAC: Add a memory repair control feature") Reported-by: Dave Jiang <[email protected]> Suggested-by: Jonathan Cameron <[email protected]> Signed-off-by: Shiju Jose <[email protected]> Signed-off-by: Borislav Petkov (AMD) <[email protected]> Reviewed-by: Jonathan Cameron <[email protected]> Link: https://lore.kernel.org/[email protected]
1 parent a3f3040 commit 1e14ea9

File tree

3 files changed

+5
-1
lines changed

3 files changed

+5
-1
lines changed

drivers/edac/ecs.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,10 @@ static int ecs_create_desc(struct device *ecs_dev, const struct attribute_group
170170
fru_ctx->dev_attr[ECS_RESET] = EDAC_ECS_ATTR_WO(reset, fru);
171171
fru_ctx->dev_attr[ECS_THRESHOLD] = EDAC_ECS_ATTR_RW(threshold, fru);
172172

173-
for (i = 0; i < ECS_MAX_ATTRS; i++)
173+
for (i = 0; i < ECS_MAX_ATTRS; i++) {
174+
sysfs_attr_init(&fru_ctx->dev_attr[i].dev_attr.attr);
174175
fru_ctx->ecs_attrs[i] = &fru_ctx->dev_attr[i].dev_attr.attr;
176+
}
175177

176178
sprintf(fru_ctx->name, "%s%d", EDAC_ECS_FRU_NAME, fru);
177179
group->name = fru_ctx->name;

drivers/edac/mem_repair.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ static int mem_repair_create_desc(struct device *dev,
333333
for (i = 0; i < MR_MAX_ATTRS; i++) {
334334
memcpy(&ctx->mem_repair_dev_attr[i],
335335
&dev_attr[i], sizeof(dev_attr[i]));
336+
sysfs_attr_init(&ctx->mem_repair_dev_attr[i].dev_attr.attr);
336337
ctx->mem_repair_attrs[i] =
337338
&ctx->mem_repair_dev_attr[i].dev_attr.attr;
338339
}

drivers/edac/scrub.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ static int scrub_create_desc(struct device *scrub_dev,
176176
group = &scrub_ctx->group;
177177
for (i = 0; i < SCRUB_MAX_ATTRS; i++) {
178178
memcpy(&scrub_ctx->scrub_dev_attr[i], &dev_attr[i], sizeof(dev_attr[i]));
179+
sysfs_attr_init(&scrub_ctx->scrub_dev_attr[i].dev_attr.attr);
179180
scrub_ctx->scrub_attrs[i] = &scrub_ctx->scrub_dev_attr[i].dev_attr.attr;
180181
}
181182
sprintf(scrub_ctx->name, "%s%d", "scrub", instance);

0 commit comments

Comments
 (0)