[alsa-devel] sysfs: cannot create duplicate filename '/devices/isa/sbawe.0/sound/card0/seq-oss-0-0'
Greetings,
I recently upgraded (an admittedly ancient K6-2 PCI/ISA machine) to kernel version 4.2.2 (compiled from source). It went surprising well, but I did run into a minor issue which did not occur under the older kernel 3.16.3.
Maybe the info here will help someone else out in the future or even reveal a bug that might have greater implications that have not yet been seen.
The ancient machine has one of those ISA SoundBlaster cards whose drivers are compiled as modules (to allow isapnp to operate) before module loading.
Upon issuing a
/sbin/modprobe snd-sbawe port=0x220 mpu_port=0x330 awe_port=0x620 irq=5 dma8=1 dma16=5 mic_agc=1 csp=0
dmesg (under 4.2.2) spits out:
EMU8000 [0x620]: 4096 KiB on-board DRAM detected ------------[ cut here ]------------ WARNING: CPU: 0 PID: 2791 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x51/0x80() sysfs: cannot create duplicate filename '/devices/isa/sbawe.0/sound/card0/seq-oss-0-0' Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_seq_virmidi snd_util_mem snd_opl3_synth snd_seq_midi_emul snd_sbawe snd_opl3_lib snd_sb16_dsp snd_sb16_csp snd_sb_common snd_mpu401_uart lp parport_pc parport CPU: 0 PID: 2791 Comm: modprobe Not tainted 4.2.2 #1 . . ---- (full output with trace at the end of this message)
The /sys/devices/isa/sbawe.0 directory did not exist prior to the attempt to load snd-sbawe and there are no other sound drivers in the system other than those for the Soundblaster.
I do still have OSS emulation selected in the kernel config - I was surpised that still is the recommended default. I probably could avoid this bug by deselecting that. I doubt I have any software that still requires OSS emulation, which is probably going to be removed from future kernels anyway (and Debian systems don't even carry it anymore).
Nevertheless, a bug is a bug and this problem should not happen. I think snd_seq_oss and snd_emux_synth are both trying to register the same sysfs name or a single driver is trying to register the same thing twice.
For the record, what is the correct procedure to find out exactly which drivers are in conflict in duplicate sysfs filename cases like this?
Cheers and thanks in advance,
Mike Shell
---- EMU8000 [0x620]: 4096 KiB on-board DRAM detected ------------[ cut here ]------------ WARNING: CPU: 0 PID: 2791 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x51/0x80() sysfs: cannot create duplicate filename '/devices/isa/sbawe.0/sound/card0/seq-oss-0-0' Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_seq_virmidi snd_util_mem snd_opl3_synth snd_seq_midi_emul snd_sbawe snd_opl3_lib snd_sb16_dsp snd_sb16_csp snd_sb_common snd_mpu401_uart lp parport_pc parport CPU: 0 PID: 2791 Comm: modprobe Not tainted 4.2.2 #1 c1604e78 c1031c40 c175c544 dd6dfc48 00000ae7 c1758c38 0000001f c1103391 c1103391 df493000 dd6ef2c0 dd6ec6b0 dd6bfe9c c1031d13 00000009 dd6dfc30 c175c544 dd6dfc48 c1103391 c1758c38 0000001f c175c544 df493fdf dd6ef2c0 Call Trace: [<c1604e78>] ? dump_stack+0xa/0x13 [<c1031c40>] ? warn_slowpath_common+0x80/0xc0 [<c1103391>] ? sysfs_warn_dup+0x51/0x80 [<c1103391>] ? sysfs_warn_dup+0x51/0x80 [<c1031d13>] ? warn_slowpath_fmt+0x33/0x40 [<c1103391>] ? sysfs_warn_dup+0x51/0x80 [<c110346b>] ? sysfs_create_dir_ns+0x6b/0x80 [<c11c156c>] ? kobject_add_internal+0x6c/0x2e0 [<c11c86cb>] ? vsnprintf+0xcb/0x400 [<c11c1956>] ? kobject_add+0x36/0x80 [<c134de21>] ? device_add+0xc1/0x500 [<c1441669>] ? snd_device_new+0x29/0xa0 [<c1460a56>] ? snd_seq_device_new+0xb6/0x100 [<c146096c>] ? snd_seq_device_dev_register+0xc/0x40 [<c1441604>] ? snd_device_register+0x44/0x80 [<e0bd1fc4>] ? snd_emux_init_seq_oss+0x84/0xa0 [snd_emux_synth] [<e0bcd1e3>] ? snd_emux_register+0x103/0x140 [snd_emux_synth] [<e0bcd000>] ? 0xe0bcd000 [<e0bcd020>] ? sf_sample_new+0x20/0x20 [snd_emux_synth] [<e0bcd040>] ? sf_sample_free+0x20/0x20 [snd_emux_synth] [<e0bdf113>] ? snd_emu8000_probe+0xd3/0x180 [snd_emu8000_synth] [<c11036dd>] ? sysfs_create_link+0x1d/0x40 [<c13504fb>] ? driver_probe_device+0x15b/0x220 [<c1350631>] ? __driver_attach+0x71/0x80 [<c13505c0>] ? driver_probe_device+0x220/0x220 [<c134f000>] ? bus_for_each_dev+0x40/0x80 [<c134ff7a>] ? driver_attach+0x1a/0x20 [<c13505c0>] ? driver_probe_device+0x220/0x220 [<c134fcf4>] ? bus_add_driver+0xd4/0x200 [<c1350b91>] ? driver_register+0x51/0xe0 [<e0be3000>] ? 0xe0be3000 [<e0be3000>] ? 0xe0be3000 [<c10003f2>] ? do_one_initcall+0x72/0x1a0 [<e0be3000>] ? 0xe0be3000 [<c14ac646>] ? netlink_broadcast_filtered+0x166/0x3c0 [<c106c4a5>] ? do_init_module+0x45/0x200 [<c10a8425>] ? __vunmap+0x85/0xe0 [<c106dfaa>] ? load_module+0x186a/0x1ea0 [<c106e6aa>] ? SyS_init_module+0xca/0x100 [<c160a2dd>] ? syscall_call+0x7/0x7 ---[ end trace 826ff8353957cad3 ]--- ------------[ cut here ]------------ WARNING: CPU: 0 PID: 2791 at lib/kobject.c:240 kobject_add_internal+0x252/0x2e0() kobject_add_internal failed for seq-oss-0-0 with -EEXIST, don't try to register things with the same name in the same directory. Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_seq_virmidi snd_util_mem snd_opl3_synth snd_seq_midi_emul snd_sbawe snd_opl3_lib snd_sb16_dsp snd_sb16_csp snd_sb_common snd_mpu401_uart lp parport_pc parport CPU: 0 PID: 2791 Comm: modprobe Tainted: G W 4.2.2 #1 c1604e78 c1031c40 c1768d78 dd6dfc84 00000ae7 c1768e8e 000000f0 c11c1752 c11c1752 dd66c274 00000000 dd66c274 dd6bfe9c c1031d13 00000009 dd6dfc6c c1768d78 dd6dfc84 c11c1752 c1768e8e 000000f0 c1768d78 c162bbd4 dd6ef2c0 Call Trace: [<c1604e78>] ? dump_stack+0xa/0x13 [<c1031c40>] ? warn_slowpath_common+0x80/0xc0 [<c11c1752>] ? kobject_add_internal+0x252/0x2e0 [<c11c1752>] ? kobject_add_internal+0x252/0x2e0 [<c1031d13>] ? warn_slowpath_fmt+0x33/0x40 [<c11c1752>] ? kobject_add_internal+0x252/0x2e0 [<c11c1956>] ? kobject_add+0x36/0x80 [<c134de21>] ? device_add+0xc1/0x500 [<c1441669>] ? snd_device_new+0x29/0xa0 [<c1460a56>] ? snd_seq_device_new+0xb6/0x100 [<c146096c>] ? snd_seq_device_dev_register+0xc/0x40 [<c1441604>] ? snd_device_register+0x44/0x80 [<e0bd1fc4>] ? snd_emux_init_seq_oss+0x84/0xa0 [snd_emux_synth] [<e0bcd1e3>] ? snd_emux_register+0x103/0x140 [snd_emux_synth] [<e0bcd000>] ? 0xe0bcd000 [<e0bcd020>] ? sf_sample_new+0x20/0x20 [snd_emux_synth] [<e0bcd040>] ? sf_sample_free+0x20/0x20 [snd_emux_synth] [<e0bdf113>] ? snd_emu8000_probe+0xd3/0x180 [snd_emu8000_synth] [<c11036dd>] ? sysfs_create_link+0x1d/0x40 [<c13504fb>] ? driver_probe_device+0x15b/0x220 [<c1350631>] ? __driver_attach+0x71/0x80 [<c13505c0>] ? driver_probe_device+0x220/0x220 [<c134f000>] ? bus_for_each_dev+0x40/0x80 [<c134ff7a>] ? driver_attach+0x1a/0x20 [<c13505c0>] ? driver_probe_device+0x220/0x220 [<c134fcf4>] ? bus_add_driver+0xd4/0x200 [<c1350b91>] ? driver_register+0x51/0xe0 [<e0be3000>] ? 0xe0be3000 [<e0be3000>] ? 0xe0be3000 [<c10003f2>] ? do_one_initcall+0x72/0x1a0 [<e0be3000>] ? 0xe0be3000 [<c14ac646>] ? netlink_broadcast_filtered+0x166/0x3c0 [<c106c4a5>] ? do_init_module+0x45/0x200 [<c10a8425>] ? __vunmap+0x85/0xe0 [<c106dfaa>] ? load_module+0x186a/0x1ea0 [<c106e6aa>] ? SyS_init_module+0xca/0x100 [<c160a2dd>] ? syscall_call+0x7/0x7 ---[ end trace 826ff8353957cad4 ]---
On Sun, 04 Oct 2015 07:12:38 +0200, Michael Shell wrote:
Greetings,
I recently upgraded (an admittedly ancient K6-2 PCI/ISA machine) to kernel version 4.2.2 (compiled from source). It went surprising well, but I did run into a minor issue which did not occur under the older kernel 3.16.3.
Maybe the info here will help someone else out in the future or even reveal a bug that might have greater implications that have not yet been seen.
The ancient machine has one of those ISA SoundBlaster cards whose drivers are compiled as modules (to allow isapnp to operate) before module loading.
Upon issuing a
/sbin/modprobe snd-sbawe port=0x220 mpu_port=0x330 awe_port=0x620 irq=5 dma8=1 dma16=5 mic_agc=1 csp=0
dmesg (under 4.2.2) spits out:
EMU8000 [0x620]: 4096 KiB on-board DRAM detected ------------[ cut here ]------------ WARNING: CPU: 0 PID: 2791 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x51/0x80() sysfs: cannot create duplicate filename '/devices/isa/sbawe.0/sound/card0/seq-oss-0-0' Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_seq_virmidi snd_util_mem snd_opl3_synth snd_seq_midi_emul snd_sbawe snd_opl3_lib snd_sb16_dsp snd_sb16_csp snd_sb_common snd_mpu401_uart lp parport_pc parport CPU: 0 PID: 2791 Comm: modprobe Not tainted 4.2.2 #1 . .
(full output with trace at the end of this message)
The /sys/devices/isa/sbawe.0 directory did not exist prior to the attempt to load snd-sbawe and there are no other sound drivers in the system other than those for the Soundblaster.
I do still have OSS emulation selected in the kernel config - I was surpised that still is the recommended default. I probably could avoid this bug by deselecting that. I doubt I have any software that still requires OSS emulation, which is probably going to be removed from future kernels anyway (and Debian systems don't even carry it anymore).
Nevertheless, a bug is a bug and this problem should not happen. I think snd_seq_oss and snd_emux_synth are both trying to register the same sysfs name or a single driver is trying to register the same thing twice.
For the record, what is the correct procedure to find out exactly which drivers are in conflict in duplicate sysfs filename cases like this?
This looks like a very long-standing bug but wasn't revealed until the recent change of device management. Could you check whether the simple fix like below works?
thanks,
Takashi
diff --git a/sound/synth/emux/emux_oss.c b/sound/synth/emux/emux_oss.c index 82e350e9501c..7950a3316c7f 100644 --- a/sound/synth/emux/emux_oss.c +++ b/sound/synth/emux/emux_oss.c @@ -69,7 +69,7 @@ snd_emux_init_seq_oss(struct snd_emux *emu) struct snd_seq_oss_reg *arg; struct snd_seq_device *dev;
- if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS, + if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS, sizeof(struct snd_seq_oss_reg), &dev) < 0) return;
On Sun, 04 Oct 2015 17:21:04 +0200 Takashi Iwai tiwai@suse.de wrote:
- if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS,
- if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS,
Takashi,
Confirmed to work under 4.2.2. No more dmesg error messages and midi playback is operating normally.
Thank you for you help,
Mike
PS: In the future, is there any recommended systematic way to find out which drivers are conflicting with regard to this type of problem? The last/error one is easy, but how would we find out which one registered before it?
On Mon, 05 Oct 2015 11:14:38 +0200, Michael Shell wrote:
On Sun, 04 Oct 2015 17:21:04 +0200 Takashi Iwai tiwai@suse.de wrote:
- if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS,
- if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS,
Takashi,
Confirmed to work under 4.2.2. No more dmesg error messages and midi playback is operating normally.
Thanks for confirmation. The fix is queued up now.
Thank you for you help,
Mike
PS: In the future, is there any recommended systematic way to find out which drivers are conflicting with regard to this type of problem? The last/error one is easy, but how would we find out which one registered before it?
You can just take a look at the conflicting sysfs entry. It should have indicated to opl3.
Takashi
participants (2)
-
Michael Shell
-
Takashi Iwai