nubus: Remove proc entries before adding them
authorFinn Thain <fthain@linux-m68k.org>
Wed, 22 Mar 2023 00:54:32 +0000 (11:54 +1100)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Mon, 22 May 2023 11:51:48 +0000 (13:51 +0200)
commitb7629ce6f492eb2d48b9ee1dab5980c7278514c1
tree165155668f21fab8c8cd2747bf5347c3ad9e79c4
parent0e96647cff9224db564a1cee6efccb13dbe11ee2
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 fafe3a20 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 <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/dd1b560bbe426b351cdbb3bbf89414753c3d0117.1679446472.git.fthain@linux-m68k.org
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
drivers/nubus/proc.c