diff mbox series

mtd: core: provide unique name for nvmem device

Message ID 20211104134843.2642800-1-michael@walle.cc
State Accepted
Headers show
Series mtd: core: provide unique name for nvmem device | expand

Commit Message

Michael Walle Nov. 4, 2021, 1:48 p.m. UTC
If there is more than one mtd device which supports OTP, there will
be a kernel warning about duplicated sysfs entries and the probing will
fail. This is because the nvmem device name is not unique. Make it
unique by prepending the name of the mtd. E.g. before the name was
"user-otp", now it will be "mtd0-user-otp".

For reference the kernel splash is:
[    4.665531] sysfs: cannot create duplicate filename '/bus/nvmem/devices/user-otp'
[    4.673056] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.15.0-next-20211101+ #1296
[    4.680565] Hardware name: Kontron SMARC-sAL28 (Single PHY) on SMARC Eval 2.0 carrier (DT)
[    4.688856] Call trace:
[    4.691303]  dump_backtrace+0x0/0x1bc
[    4.694984]  show_stack+0x24/0x30
[    4.698306]  dump_stack_lvl+0x68/0x84
[    4.701980]  dump_stack+0x18/0x34
[    4.705302]  sysfs_warn_dup+0x70/0x90
[    4.708973]  sysfs_do_create_link_sd+0x144/0x150
[    4.713603]  sysfs_create_link+0x2c/0x50
[    4.717535]  bus_add_device+0x74/0x120
[    4.721293]  device_add+0x330/0x890
[    4.724791]  device_register+0x2c/0x40
[    4.728550]  nvmem_register+0x240/0x9f0
[    4.732398]  mtd_otp_nvmem_register+0xb0/0x10c
[    4.736854]  mtd_device_parse_register+0x28c/0x2b4
[    4.741659]  spi_nor_probe+0x20c/0x2e0
[    4.745418]  spi_mem_probe+0x78/0xbc
[    4.749001]  spi_probe+0x90/0xf0
[    4.752237]  really_probe.part.0+0xa4/0x320
..
[    4.873936] mtd mtd1: Failed to register OTP NVMEM device
[    4.894468] spi-nor: probe of spi0.0 failed with error -17

Fixes: 4b361cfa8624 ("mtd: core: add OTP nvmem provider support")
Signed-off-by: Michael Walle <michael@walle.cc>
---
 drivers/mtd/mtdcore.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Miquel Raynal Nov. 19, 2021, 6:35 p.m. UTC | #1
On Thu, 2021-11-04 at 13:48:43 UTC, Michael Walle wrote:
> If there is more than one mtd device which supports OTP, there will
> be a kernel warning about duplicated sysfs entries and the probing will
> fail. This is because the nvmem device name is not unique. Make it
> unique by prepending the name of the mtd. E.g. before the name was
> "user-otp", now it will be "mtd0-user-otp".
> 
> For reference the kernel splash is:
> [    4.665531] sysfs: cannot create duplicate filename '/bus/nvmem/devices/user-otp'
> [    4.673056] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.15.0-next-20211101+ #1296
> [    4.680565] Hardware name: Kontron SMARC-sAL28 (Single PHY) on SMARC Eval 2.0 carrier (DT)
> [    4.688856] Call trace:
> [    4.691303]  dump_backtrace+0x0/0x1bc
> [    4.694984]  show_stack+0x24/0x30
> [    4.698306]  dump_stack_lvl+0x68/0x84
> [    4.701980]  dump_stack+0x18/0x34
> [    4.705302]  sysfs_warn_dup+0x70/0x90
> [    4.708973]  sysfs_do_create_link_sd+0x144/0x150
> [    4.713603]  sysfs_create_link+0x2c/0x50
> [    4.717535]  bus_add_device+0x74/0x120
> [    4.721293]  device_add+0x330/0x890
> [    4.724791]  device_register+0x2c/0x40
> [    4.728550]  nvmem_register+0x240/0x9f0
> [    4.732398]  mtd_otp_nvmem_register+0xb0/0x10c
> [    4.736854]  mtd_device_parse_register+0x28c/0x2b4
> [    4.741659]  spi_nor_probe+0x20c/0x2e0
> [    4.745418]  spi_mem_probe+0x78/0xbc
> [    4.749001]  spi_probe+0x90/0xf0
> [    4.752237]  really_probe.part.0+0xa4/0x320
> ..
> [    4.873936] mtd mtd1: Failed to register OTP NVMEM device
> [    4.894468] spi-nor: probe of spi0.0 failed with error -17
> 
> Fixes: 4b361cfa8624 ("mtd: core: add OTP nvmem provider support")
> Signed-off-by: Michael Walle <michael@walle.cc>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next, thanks.

Miquel
diff mbox series

Patch

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 9186268d361b..fc0bed14bfb1 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -825,8 +825,7 @@  static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
 
 	/* OTP nvmem will be registered on the physical device */
 	config.dev = mtd->dev.parent;
-	/* just reuse the compatible as name */
-	config.name = compatible;
+	config.name = kasprintf(GFP_KERNEL, "%s-%s", dev_name(&mtd->dev), compatible);
 	config.id = NVMEM_DEVID_NONE;
 	config.owner = THIS_MODULE;
 	config.type = NVMEM_TYPE_OTP;
@@ -842,6 +841,7 @@  static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
 		nvmem = NULL;
 
 	of_node_put(np);
+	kfree(config.name);
 
 	return nvmem;
 }