nvmem: rmem: Make reserved region name unique

Message ID 20230411135035.106725-1-iivanov@suse.de
State New
Headers
Series nvmem: rmem: Make reserved region name unique |

Commit Message

Ivan T. Ivanov April 11, 2023, 1:50 p.m. UTC
  They could be multiple reserved memory regions,
so let's make their names unique.

This fixes following kernel error:

[    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'
[    9.831304] CPU: 3 PID: 467 Comm: (udev-worker) Not tainted 6.2.9-1-default #1 openSUSE Tumbleweed a4aeb3a90c0f23041a8a7944b12739b07585f009
[    9.831326] Hardware name: raspberrypi rpi/rpi, BIOS 2023.01 01/01/2023
[    9.831335] Call trace:
[    9.831343]  dump_backtrace+0xe4/0x140
[    9.831366]  show_stack+0x20/0x30
[    9.831379]  dump_stack_lvl+0x64/0x80
[    9.831398]  dump_stack+0x18/0x34
[    9.831410]  sysfs_warn_dup+0x6c/0x90
[    9.831424]  sysfs_do_create_link_sd+0xf8/0x100
[    9.831437]  sysfs_create_link+0x28/0x50
[    9.831449]  bus_add_device+0x70/0x190
[    9.831468]  device_add+0x3e8/0x84c
[    9.831481]  nvmem_register+0x85c/0x9f0
[    9.831500]  devm_nvmem_register+0x24/0x70
[    9.831517]  rmem_probe+0xa0/0xf4 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
[    9.831555]  platform_probe+0x70/0xd0
[    9.831566]  really_probe+0xc8/0x3e4
[    9.831582]  __driver_probe_device+0x84/0x190
[    9.831598]  driver_probe_device+0x44/0x11c
[    9.831613]  __driver_attach+0xf8/0x200
[    9.831629]  bus_for_each_dev+0x78/0xd0
[    9.831643]  driver_attach+0x2c/0x40
[    9.831657]  bus_add_driver+0x188/0x250
[    9.831672]  driver_register+0x80/0x13c
[    9.831688]  __platform_driver_register+0x30/0x40
[    9.831699]  rmem_driver_init+0x28/0x1000 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
[    9.831727]  do_one_initcall+0x48/0x2bc
[    9.831740]  do_init_module+0x50/0x1f0
[    9.831753]  load_module+0x1e54/0x2250
[    9.831763]  __do_sys_init_module+0x2ac/0x2f0
[    9.831774]  __arm64_sys_init_module+0x24/0x30
[    9.831785]  invoke_syscall+0x78/0x100
[    9.831803]  el0_svc_common.constprop.0+0x15c/0x180
[    9.831820]  do_el0_svc+0x40/0xb0
[    9.831836]  el0_svc+0x34/0x134
[    9.831850]  el0t_64_sync_handler+0x114/0x120
[    9.831865]  el0t_64_sync+0x1a4/0x1a8
[    9.831956] rmem: probe of 3ef62ce0.nvram failed with error -17

Some background information about the issue could be found here:
https://bugzilla.suse.com/show_bug.cgi?id=1206846

Signed-off-by: Ivan T. Ivanov <iivanov@suse.de>
---
 drivers/nvmem/rmem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Stefan Wahren April 11, 2023, 4:53 p.m. UTC | #1
Hi Ivan,

Am 11.04.23 um 15:50 schrieb Ivan T. Ivanov:
> They could be multiple reserved memory regions,
> so let's make their names unique.
> 
> This fixes following kernel error:
> 
> [    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'

could you please provide more background information:

- are two instances of rmem trying to create this file?
- which exact platform is affect (Raspberry Pi 4), because the Hardware 
name from the trace is useless?
- could you provide some reliable scenario/config to reproduce this issue?

> [    9.831304] CPU: 3 PID: 467 Comm: (udev-worker) Not tainted 6.2.9-1-default #1 openSUSE Tumbleweed a4aeb3a90c0f23041a8a7944b12739b07585f009
> [    9.831326] Hardware name: raspberrypi rpi/rpi, BIOS 2023.01 01/01/2023
> [    9.831335] Call trace:
> [    9.831343]  dump_backtrace+0xe4/0x140
> [    9.831366]  show_stack+0x20/0x30
> [    9.831379]  dump_stack_lvl+0x64/0x80
> [    9.831398]  dump_stack+0x18/0x34
> [    9.831410]  sysfs_warn_dup+0x6c/0x90
> [    9.831424]  sysfs_do_create_link_sd+0xf8/0x100
> [    9.831437]  sysfs_create_link+0x28/0x50
> [    9.831449]  bus_add_device+0x70/0x190
> [    9.831468]  device_add+0x3e8/0x84c
> [    9.831481]  nvmem_register+0x85c/0x9f0
> [    9.831500]  devm_nvmem_register+0x24/0x70
> [    9.831517]  rmem_probe+0xa0/0xf4 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
> [    9.831555]  platform_probe+0x70/0xd0
> [    9.831566]  really_probe+0xc8/0x3e4
> [    9.831582]  __driver_probe_device+0x84/0x190
> [    9.831598]  driver_probe_device+0x44/0x11c
> [    9.831613]  __driver_attach+0xf8/0x200
> [    9.831629]  bus_for_each_dev+0x78/0xd0
> [    9.831643]  driver_attach+0x2c/0x40
> [    9.831657]  bus_add_driver+0x188/0x250
> [    9.831672]  driver_register+0x80/0x13c
> [    9.831688]  __platform_driver_register+0x30/0x40
> [    9.831699]  rmem_driver_init+0x28/0x1000 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
> [    9.831727]  do_one_initcall+0x48/0x2bc
> [    9.831740]  do_init_module+0x50/0x1f0
> [    9.831753]  load_module+0x1e54/0x2250
> [    9.831763]  __do_sys_init_module+0x2ac/0x2f0
> [    9.831774]  __arm64_sys_init_module+0x24/0x30
> [    9.831785]  invoke_syscall+0x78/0x100
> [    9.831803]  el0_svc_common.constprop.0+0x15c/0x180
> [    9.831820]  do_el0_svc+0x40/0xb0
> [    9.831836]  el0_svc+0x34/0x134
> [    9.831850]  el0t_64_sync_handler+0x114/0x120
> [    9.831865]  el0t_64_sync+0x1a4/0x1a8
> [    9.831956] rmem: probe of 3ef62ce0.nvram failed with error -17
> 
> Some background information about the issue could be found here:
> https://bugzilla.suse.com/show_bug.cgi?id=1206846
> 
> Signed-off-by: Ivan T. Ivanov <iivanov@suse.de>
> ---
>   drivers/nvmem/rmem.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/nvmem/rmem.c b/drivers/nvmem/rmem.c
> index 80cb187f1481..77c70a47d519 100644
> --- a/drivers/nvmem/rmem.c
> +++ b/drivers/nvmem/rmem.c
> @@ -70,7 +70,7 @@ static int rmem_probe(struct platform_device *pdev)
>   
>   	config.dev = dev;
>   	config.priv = priv;
> -	config.name = "rmem";
> +	config.name = dev_name(dev);

AFAIR changing userspace isn't great because application could rely on 
the filename prefix.

What is the result after applying this patch:

ls bus/nvmem/devices/rmem*

>   	config.size = mem->size;
>   	config.reg_read = rmem_read;
>
  
Srinivas Kandagatla April 11, 2023, 4:56 p.m. UTC | #2
On 11/04/2023 14:50, Ivan T. Ivanov wrote:
> They could be multiple reserved memory regions,
> so let's make their names unique.
> 
> This fixes following kernel error:
> 
> [    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'

Have you considered using NVMEM_DEVID_AUTO?

--srini

> [    9.831304] CPU: 3 PID: 467 Comm: (udev-worker) Not tainted 6.2.9-1-default #1 openSUSE Tumbleweed a4aeb3a90c0f23041a8a7944b12739b07585f009
> [    9.831326] Hardware name: raspberrypi rpi/rpi, BIOS 2023.01 01/01/2023
> [    9.831335] Call trace:
> [    9.831343]  dump_backtrace+0xe4/0x140
> [    9.831366]  show_stack+0x20/0x30
> [    9.831379]  dump_stack_lvl+0x64/0x80
> [    9.831398]  dump_stack+0x18/0x34
> [    9.831410]  sysfs_warn_dup+0x6c/0x90
> [    9.831424]  sysfs_do_create_link_sd+0xf8/0x100
> [    9.831437]  sysfs_create_link+0x28/0x50
> [    9.831449]  bus_add_device+0x70/0x190
> [    9.831468]  device_add+0x3e8/0x84c
> [    9.831481]  nvmem_register+0x85c/0x9f0
> [    9.831500]  devm_nvmem_register+0x24/0x70
> [    9.831517]  rmem_probe+0xa0/0xf4 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
> [    9.831555]  platform_probe+0x70/0xd0
> [    9.831566]  really_probe+0xc8/0x3e4
> [    9.831582]  __driver_probe_device+0x84/0x190
> [    9.831598]  driver_probe_device+0x44/0x11c
> [    9.831613]  __driver_attach+0xf8/0x200
> [    9.831629]  bus_for_each_dev+0x78/0xd0
> [    9.831643]  driver_attach+0x2c/0x40
> [    9.831657]  bus_add_driver+0x188/0x250
> [    9.831672]  driver_register+0x80/0x13c
> [    9.831688]  __platform_driver_register+0x30/0x40
> [    9.831699]  rmem_driver_init+0x28/0x1000 [nvmem_rmem 649243b01e5e28ee94e4dd53bd13b6ececa836f8]
> [    9.831727]  do_one_initcall+0x48/0x2bc
> [    9.831740]  do_init_module+0x50/0x1f0
> [    9.831753]  load_module+0x1e54/0x2250
> [    9.831763]  __do_sys_init_module+0x2ac/0x2f0
> [    9.831774]  __arm64_sys_init_module+0x24/0x30
> [    9.831785]  invoke_syscall+0x78/0x100
> [    9.831803]  el0_svc_common.constprop.0+0x15c/0x180
> [    9.831820]  do_el0_svc+0x40/0xb0
> [    9.831836]  el0_svc+0x34/0x134
> [    9.831850]  el0t_64_sync_handler+0x114/0x120
> [    9.831865]  el0t_64_sync+0x1a4/0x1a8
> [    9.831956] rmem: probe of 3ef62ce0.nvram failed with error -17
> 
> Some background information about the issue could be found here:
> https://bugzilla.suse.com/show_bug.cgi?id=1206846
> 
> Signed-off-by: Ivan T. Ivanov <iivanov@suse.de>
> ---
>   drivers/nvmem/rmem.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/nvmem/rmem.c b/drivers/nvmem/rmem.c
> index 80cb187f1481..77c70a47d519 100644
> --- a/drivers/nvmem/rmem.c
> +++ b/drivers/nvmem/rmem.c
> @@ -70,7 +70,7 @@ static int rmem_probe(struct platform_device *pdev)
>   
>   	config.dev = dev;
>   	config.priv = priv;
> -	config.name = "rmem";
> +	config.name = dev_name(dev);
>   	config.size = mem->size;
>   	config.reg_read = rmem_read;
>
  
Ivan T. Ivanov April 12, 2023, 7:08 a.m. UTC | #3
Hi Srini,

On 04-11 17:56, Srinivas Kandagatla wrote:
> 
> On 11/04/2023 14:50, Ivan T. Ivanov wrote:
> > They could be multiple reserved memory regions,
> > so let's make their names unique.
> > 
> > This fixes following kernel error:
> > 
> > [    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'
> 
> Have you considered using NVMEM_DEVID_AUTO?

Thanks,  I missed this one. I will rework it and resend.

Regards,
Ivan
  
Ivan T. Ivanov April 12, 2023, 7:26 a.m. UTC | #4
Hi Stefan,

On 04-11 18:53, Stefan Wahren wrote:
> 
> Am 11.04.23 um 15:50 schrieb Ivan T. Ivanov:
> > They could be multiple reserved memory regions,
> > so let's make their names unique.
> > 
> > This fixes following kernel error:
> > 
> > [    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'
> 
> could you please provide more background information:
> 
> - are two instances of rmem trying to create this file?
> - which exact platform is affect (Raspberry Pi 4), because the Hardware name
> from the trace is useless?
> - could you provide some reliable scenario/config to reproduce this issue?

I was sure your will be asking. :-)

I am using RPi4[0] for testing this. Device tree is based on sources
from here [1]. From this devicetree it is  obvious what is happening.

Unfortunately right now SUSE Bugzilla is under maintenance, so perhaps you
can't see the bug report [2]. In brief I am using latest Tumbleweed on this
device and you can imagine that error is happening always.

Regards,
Ivan

[0] Raspberry Pi 4 Model B Rev 1.1
[1] https://github.com/raspberrypi/linux/blob/rpi-6.2.y/arch/arm/boot/dts/bcm2711-rpi.dtsi#L57
[2] https://bugzilla.suse.com/show_bug.cgi?id=1206846
  
Stefan Wahren April 12, 2023, 3:10 p.m. UTC | #5
Am 12.04.23 um 09:26 schrieb Ivan T. Ivanov:
> Hi Stefan,
> 
> On 04-11 18:53, Stefan Wahren wrote:
>>
>> Am 11.04.23 um 15:50 schrieb Ivan T. Ivanov:
>>> They could be multiple reserved memory regions,
>>> so let's make their names unique.
>>>
>>> This fixes following kernel error:
>>>
>>> [    9.831285] sysfs: cannot create duplicate filename '/bus/nvmem/devices/rmem0'
>>
>> could you please provide more background information:
>>
>> - are two instances of rmem trying to create this file?
>> - which exact platform is affect (Raspberry Pi 4), because the Hardware name
>> from the trace is useless?
>> - could you provide some reliable scenario/config to reproduce this issue?
> 
> I was sure your will be asking. :-)
> 
> I am using RPi4[0] for testing this. Device tree is based on sources
> from here [1]. From this devicetree it is  obvious what is happening.

Thanks for clarifying. Unfortunately this file is not identical to the 
mainline file, so the issue can only be triggered with the vendor DTB?

> 
> Unfortunately right now SUSE Bugzilla is under maintenance, so perhaps you
> can't see the bug report [2]. In brief I am using latest Tumbleweed on this
> device and you can imagine that error is happening always.
> 
> Regards,
> Ivan
> 
> [0] Raspberry Pi 4 Model B Rev 1.1
> [1] https://github.com/raspberrypi/linux/blob/rpi-6.2.y/arch/arm/boot/dts/bcm2711-rpi.dtsi#L57
> [2] https://bugzilla.suse.com/show_bug.cgi?id=1206846
  
Ivan T. Ivanov April 13, 2023, 7:33 a.m. UTC | #6
Hi,

On 04-12 17:10, Stefan Wahren wrote:
> > 
> > I am using RPi4[0] for testing this. Device tree is based on sources
> > from here [1]. From this devicetree it is  obvious what is happening.
> 
> Thanks for clarifying. Unfortunately this file is not identical to the
> mainline file, so the issue can only be triggered with the vendor DTB?
> 

Patch which adds this here [4] is coming ...

Regards,
Ivan

> > [0] Raspberry Pi 4 Model B Rev 1.1
> > [1] https://github.com/raspberrypi/linux/blob/rpi-6.2.y/arch/arm/boot/dts/bcm2711-rpi.dtsi#L57
> > [2] https://bugzilla.suse.com/show_bug.cgi?id=1206846

[4] https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/bcm2711-rpi.dtsi#L56
  

Patch

diff --git a/drivers/nvmem/rmem.c b/drivers/nvmem/rmem.c
index 80cb187f1481..77c70a47d519 100644
--- a/drivers/nvmem/rmem.c
+++ b/drivers/nvmem/rmem.c
@@ -70,7 +70,7 @@  static int rmem_probe(struct platform_device *pdev)
 
 	config.dev = dev;
 	config.priv = priv;
-	config.name = "rmem";
+	config.name = dev_name(dev);
 	config.size = mem->size;
 	config.reg_read = rmem_read;