Hi, On 17/02/2020 14.13, Marek Szyprowski wrote: > Dear All, Adding Vinod and Geert + dmaengine list > > On 14.02.2020 21:56, Mark Brown wrote: >> The patch >> >> ASoC: core: ensure component names are unique >> >> has been applied to the asoc tree at >> >> https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git >> >> All being well this means that it will be integrated into the linux-next >> tree (usually sometime in the next 24 hours) and sent to Linus during >> the next merge window (or sooner if it is a bug fix), however if >> problems are discovered then the patch may be dropped or reverted. >> >> You may get further e-mails resulting from automated or manual testing >> and review of the tree, please engage with people reporting problems and >> send followup patches addressing any issues that are reported if needed. >> >> If any updates are required or you are submitting further changes they >> should be sent as incremental updates against current git, existing >> patches will not be replaced. >> >> Please add any relevant lists and maintainers to the CCs when replying >> to this mail. >> >> Thanks, >> Mark >> >> From b2354e4009a773c00054b964d937e1b81cb92078 Mon Sep 17 00:00:00 2001 >> From: Jerome Brunet <jbrunet@xxxxxxxxxxxx> >> Date: Fri, 14 Feb 2020 14:47:04 +0100 >> Subject: [PATCH] ASoC: core: ensure component names are unique >> >> Make sure each ASoC component is registered with a unique name. >> The component is derived from the device name. If a device registers more >> than one component, the component names will be the same. >> >> This usually brings up a warning about the debugfs directory creation of >> the component since directory already exists. >> >> In such case, start numbering the component of the device so the names >> don't collide anymore. >> >> Signed-off-by: Jerome Brunet <jbrunet@xxxxxxxxxxxx> >> Link: https://lore.kernel.org/r/20200214134704.342501-1-jbrunet@xxxxxxxxxxxx >> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> > > This patch landed in today's linux-next and I've noticed that it breaks > registration of VC4 DRM driver on Raspberry Pi3 boards (I've compiled > kernel from bcm2835_defconfig): > > sysfs: cannot create duplicate filename > '/devices/platform/soc/3f902000.hdmi/dma:audio-rx' It looks like that DMAengine tries to create the same link multiple times? I'm not sure why reverting this patch fixes the issue... - Péter > CPU: 0 PID: 67 Comm: kworker/0:2 Tainted: G W > 5.6.0-rc2-next-20200217 #314 > Hardware name: BCM2835 > Workqueue: events deferred_probe_work_func > Backtrace: > [<c010c424>] (dump_backtrace) from [<c010c8a8>] (show_stack+0x20/0x24) > r7:eb73d5c0 r6:eb53a8f0 r5:eb73d5c0 r4:eb4d3000 > [<c010c888>] (show_stack) from [<c080ad40>] (dump_stack+0x20/0x28) > [<c080ad20>] (dump_stack) from [<c02be6e0>] (sysfs_warn_dup+0x60/0x74) > [<c02be680>] (sysfs_warn_dup) from [<c02bea00>] > (sysfs_do_create_link_sd+0xa4/0xc0) > r7:eb73d5c0 r6:eb53a8f0 r5:eb6becb8 r4:ffffffef > [<c02be95c>] (sysfs_do_create_link_sd) from [<c02beb68>] > (sysfs_create_link+0x34/0x44) > r9:eb698c40 r8:c093e47c r7:00000000 r6:eb537e10 r5:eb6f9900 r4:eb537e10 > [<c02beb34>] (sysfs_create_link) from [<c0415afc>] > (dma_request_chan+0x1b8/0x208) > [<c0415944>] (dma_request_chan) from [<c05f25a0>] > (snd_dmaengine_pcm_register+0xf4/0x1bc) > r10:c0963460 r9:eb537e10 r8:c093e47c r7:00000000 r6:eb537e10 r5:eb6f9900 > r4:c093e468 > [<c05f24ac>] (snd_dmaengine_pcm_register) from [<c05f0ebc>] > (devm_snd_dmaengine_pcm_register+0x4c/0x84) > r10:eb715c4c r9:c093e3d4 r8:eb537e00 r7:00000000 r6:eb537e10 r5:eb7ca240 > r4:c093e468 > [<c05f0e70>] (devm_snd_dmaengine_pcm_register) from [<c0492dc0>] > (vc4_hdmi_bind+0x3a8/0x590) > r7:eb537e10 r6:eb537e10 r5:eb715440 r4:eb715c40 > [<c0492a18>] (vc4_hdmi_bind) from [<c049b6e0>] > (component_bind_all+0x128/0x238) > r10:eb7267c0 r9:00000008 r8:eb73f800 r7:00000018 r6:00000000 r5:eb7016c0 > r4:eb6c9240 > [<c049b5b8>] (component_bind_all) from [<c048c150>] > (vc4_drm_bind+0xe4/0x17c) > r9:00000008 r8:eb6c88c0 r7:eb6a2840 r6:eb53b210 r5:00000000 r4:eb73f800 > [<c048c06c>] (vc4_drm_bind) from [<c049adc8>] > (try_to_bring_up_master+0x190/0x264) > r7:eb6a2840 r6:000000a8 r5:eb7267c0 r4:eb6c9240 > [<c049ac38>] (try_to_bring_up_master) from [<c049b13c>] > (__component_add+0x80/0x114) > r10:c0d57488 r9:00000012 r8:00000000 r7:eb6c9240 r6:c093e924 r5:c0d572f8 > r4:eb7267c0 > [<c049b0bc>] (__component_add) from [<c049b1ec>] (component_add+0x1c/0x20) > r7:c0d56f7c r6:c0d56f7c r5:eb534a10 r4:00000000 > [<c049b1d0>] (component_add) from [<c0493864>] (vc4_vec_dev_probe+0x20/0x28) > [<c0493844>] (vc4_vec_dev_probe) from [<c04a43a4>] > (platform_drv_probe+0x58/0xa8) > [<c04a434c>] (platform_drv_probe) from [<c04a2298>] > (really_probe+0x1a8/0x428) > r7:c0d56f7c r6:00000000 r5:c0e579b8 r4:eb534a10 > [<c04a20f0>] (really_probe) from [<c04a2840>] > (driver_probe_device+0x158/0x1ac) > r9:00000000 r8:00000001 r7:eb70fe9c r6:c0d56f7c r5:c0d56f7c r4:eb534a10 > [<c04a26e8>] (driver_probe_device) from [<c04a2a40>] > (__device_attach_driver+0xb0/0xf8) > r9:00000000 r8:00000001 r7:eb70fe9c r6:c0d56f7c r5:eb534a10 r4:00000001 > [<c04a2990>] (__device_attach_driver) from [<c04a0408>] > (bus_for_each_drv+0xa0/0xc8) > r7:c04a2990 r6:eb70fe9c r5:c0d04248 r4:00000000 > [<c04a0368>] (bus_for_each_drv) from [<c04a25bc>] > (__device_attach+0xa4/0x158) > r7:eb534a54 r6:c0d04248 r5:c0d576a8 r4:eb534a10 > [<c04a2518>] (__device_attach) from [<c04a2aa4>] > (device_initial_probe+0x1c/0x20) > r8:eb9c7300 r7:00000000 r6:eb534a10 r5:c0d576a8 r4:eb534a10 > [<c04a2a88>] (device_initial_probe) from [<c04a12d4>] > (bus_probe_device+0x38/0x90) > [<c04a129c>] (bus_probe_device) from [<c04a1848>] > (deferred_probe_work_func+0x70/0xb0) > r7:00000000 r6:c0d57478 r5:c0d5746c r4:eb534a10 > [<c04a17d8>] (deferred_probe_work_func) from [<c0135a50>] > (process_one_work+0x1a8/0x2ac) > r7:00000000 r6:c0d0c8a4 r5:c0d57484 r4:eb6ed880 > [<c01358a8>] (process_one_work) from [<c0136ddc>] > (worker_thread+0x1f0/0x2e8) > r10:00000000 r9:c0d156e0 r8:c0d0c8b8 r7:c0d156e0 r6:c0d0c8a4 r5:eb6ed894 > r4:eb6ed880 > [<c0136bec>] (worker_thread) from [<c013b5a0>] (kthread+0x120/0x130) > r10:00000000 r9:eb6f5018 r8:eb4e9e98 r7:c0136bec r6:eb6ed880 r5:eb6e6b40 > r4:eb6f5000 r3:00000000 > [<c013b480>] (kthread) from [<c01010e8>] (ret_from_fork+0x14/0x2c) > Exception stack(0xeb70ffb0 to 0xeb70fff8) > ffa0: 00000000 00000000 00000000 > 00000000 > ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 > ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 > r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c013b480 r4:eb6e6b40 > vc4_hdmi 3f902000.hdmi: Cannot create DMA dma:audio-rx symlink > vc4_hdmi 3f902000.hdmi: ASoC: CODEC DAI vc4-hdmi-hifi not registered > vc4_hdmi 3f902000.hdmi: Could not register sound card: -517 > vc4-drm soc:gpu: failed to bind 3f902000.hdmi (ops vc4_hdmi_ops): -517 > vc4-drm soc:gpu: master bind failed: -517 > > Reverting this patch fixes vc4-drm driver registration and > initialization. If I find some spare time I will debug this issue > further, but it looks that it is somehow related to deferred probe. > > >> --- >> sound/soc/soc-core.c | 29 ++++++++++++++++++++++++++++- >> 1 file changed, 28 insertions(+), 1 deletion(-) >> >> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c >> index 03b87427faa7..6a58a8f6e3c4 100644 >> --- a/sound/soc/soc-core.c >> +++ b/sound/soc/soc-core.c >> @@ -2446,6 +2446,33 @@ static int snd_soc_register_dais(struct snd_soc_component *component, >> return ret; >> } >> >> +static char *snd_soc_component_unique_name(struct device *dev, >> + struct snd_soc_component *component) >> +{ >> + struct snd_soc_component *pos; >> + int count = 0; >> + char *name, *unique; >> + >> + name = fmt_single_name(dev, &component->id); >> + if (!name) >> + return name; >> + >> + /* Count the number of components registred by the device */ >> + for_each_component(pos) { >> + if (dev == pos->dev) >> + count++; >> + } >> + >> + /* Keep naming as it is for the 1st component */ >> + if (!count) >> + return name; >> + >> + unique = devm_kasprintf(dev, GFP_KERNEL, "%s-%d", name, count); >> + devm_kfree(dev, name); >> + >> + return unique; >> +} >> + >> static int snd_soc_component_initialize(struct snd_soc_component *component, >> const struct snd_soc_component_driver *driver, struct device *dev) >> { >> @@ -2454,7 +2481,7 @@ static int snd_soc_component_initialize(struct snd_soc_component *component, >> INIT_LIST_HEAD(&component->card_list); >> mutex_init(&component->io_mutex); >> >> - component->name = fmt_single_name(dev, &component->id); >> + component->name = snd_soc_component_unique_name(dev, component); >> if (!component->name) { >> dev_err(dev, "ASoC: Failed to allocate name\n"); >> return -ENOMEM; > > Best regards > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel