Skip to content

Commit b7629ce

Browse files
fthaingeertu
authored andcommitted
nubus: Remove proc entries before adding them
The config ROMs on some Nubus cards contain mistakes such as resource duplication. This results in a warning from proc_register(): NuBus: Scanning NuBus slots. ------------[ cut here ]------------ WARNING: CPU: 0 PID: 1 at fs/proc/generic.c:376 proc_register+0xbc/0xda proc_dir_entry '24/5' already registered Modules linked in: CPU: 0 PID: 1 Comm: swapper Not tainted 6.1.0-5-m68k #1 Debian 6.1.12-1 Stack from 00829d18: 00829d18 00451507 00451507 00000000 00000009 0038c57c 00451507 00386bae 00442945 0045f062 00000178 00868580 00868f50 00386c42 0045f062 00000178 00166fc8 00000009 00000000 00829d78 008685e4 0037f9ec 00000025 00248808 0045f0df 00829d94 00166fc8 0045f062 00000178 00000009 0045f0df 008689e4 008685e4 fafe3a2 00868980 00829df3 00829e32 00000024 00829dc0 00167332 00868980 00868580 00829e40 00248d36 00829df3 00008124 00868980 00248b0c Call Trace: [<0038c57c>] dump_stack+0xc/0x10 [<00386bae>] __warn+0x70/0xbc [<00386c42>] warn_slowpath_fmt+0x48/0x66 [<00166fc8>] proc_register+0xbc/0xda [<0037f9ec>] memcmp+0x0/0x56 [<00248808>] nubus_get_rsrc_str+0x0/0x5e [<00166fc8>] proc_register+0xbc/0xda [<00167332>] proc_create_single_data+0x40/0x48 [<00248d36>] nubus_proc_add_rsrc_mem+0x68/0xa4 [<00008124>] amiga_mksound+0xb8/0xc8 [<00248b0c>] nubus_proc_rsrc_show+0x0/0xa4 [<00386180>] memset+0x0/0x94 [<0024864a>] nubus_readdir+0x0/0x66 [<00560f35>] nubus_get_vendorinfo.isra.0+0x87/0x10e [<00560fb4>] nubus_get_vendorinfo.isra.0+0x106/0x10e [<00248d72>] nubus_proc_add_rsrc+0x0/0x8e [<001f6f50>] __dynamic_pr_debug+0x0/0x96 [<0038741e>] _printk+0x0/0x18 [<0016fafe>] kernfs_link_sibling+0x9a/0xaa [<00561cb0>] nubus_init+0x660/0x79c [<0037f7c6>] strcpy+0x0/0x1c [<0003f58c>] parse_args+0x0/0x308 [<00002104>] do_one_initcall+0x0/0x184 [<00561650>] nubus_init+0x0/0x79c [<00010000>] frc1_dst+0xe/0x14 [<00002172>] do_one_initcall+0x6e/0x184 [<0037f7c6>] strcpy+0x0/0x1c [<0003f58c>] parse_args+0x0/0x308 [<00002104>] do_one_initcall+0x0/0x184 [<0054b25c>] kernel_init_freeable+0x192/0x19c [<00561650>] nubus_init+0x0/0x79c [<0038c6c4>] kernel_init+0x0/0xec [<0038c6d8>] kernel_init+0x14/0xec [<0038c6c4>] kernel_init+0x0/0xec [<0000297c>] ret_from_kernel_thread+0xc/0x14 ---[ end trace 0000000000000000 ]--- This particular card (a Radius video card) contains a duplicated resource hence the /proc/bus/nubus/a/1/24/5 entry got registered twice. (A date resource has ID 5, the vendor info directory has ID 24) The solution for this is to remove a potentially pre-existing entry before adding the procfs entry for the resource. Reported-and-tested-by: Stan Johnson <[email protected]> Signed-off-by: Finn Thain <[email protected]> Reviewed-by: Geert Uytterhoeven <[email protected]> Link: https://lore.kernel.org/r/dd1b560bbe426b351cdbb3bbf89414753c3d0117.1679446472.git.fthain@linux-m68k.org Signed-off-by: Geert Uytterhoeven <[email protected]>
1 parent 0e96647 commit b7629ce

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

drivers/nubus/proc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ struct proc_dir_entry *nubus_proc_add_rsrc_dir(struct proc_dir_entry *procdir,
7575
if (!procdir)
7676
return NULL;
7777
snprintf(name, sizeof(name), "%x", ent->type);
78+
remove_proc_subtree(name, procdir);
7879
return proc_mkdir_data(name, 0555, procdir, (void *)lanes);
7980
}
8081

@@ -164,6 +165,7 @@ void nubus_proc_add_rsrc_mem(struct proc_dir_entry *procdir,
164165
pded = nubus_proc_alloc_pde_data(nubus_dirptr(ent), size);
165166
else
166167
pded = NULL;
168+
remove_proc_subtree(name, procdir);
167169
proc_create_data(name, S_IFREG | 0444, procdir,
168170
&nubus_rsrc_proc_ops, pded);
169171
}
@@ -178,6 +180,7 @@ void nubus_proc_add_rsrc(struct proc_dir_entry *procdir,
178180
return;
179181

180182
snprintf(name, sizeof(name), "%x", ent->type);
183+
remove_proc_subtree(name, procdir);
181184
proc_create_data(name, S_IFREG | 0444, procdir,
182185
&nubus_rsrc_proc_ops,
183186
nubus_proc_alloc_pde_data(data, 0));

0 commit comments

Comments
 (0)