[alsa-devel] [BUG] Race in spdif initialisation / ASoC oopses on module removal

Nicolin Chen Guangyu.Chen at freescale.com
Mon Dec 16 01:27:37 EST 2013


Hi Russell,

On Mon, Dec 16, 2013 at 12:33:38AM +0000, Russell King - ARM Linux wrote:
> So, I have the following as modules, and Ubuntu being Ubuntu, it loads
> them in an apparantly random order on each boot.  The order in which it
> loaded it this time was (most recent first):
> 
> snd_soc_fsl_spdif
> imx_sdma
> imx_pcm_dma
> snd_soc_imx_spdif
> snd_soc_spdif_tx
> 
> which produced these messages:
> 
> imx-spdif sound-spdif.17: ASoC: CPU DAI (null) not registered
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -517
> platform sound-spdif.17: Driver imx-spdif requests probe deferral
> imx-spdif sound-spdif.17: ASoC: CPU DAI (null) not registered
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -517
> platform sound-spdif.17: Driver imx-spdif requests probe deferral
> imx-spdif sound-spdif.17: ASoC: CPU DAI (null) not registered
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -517
> platform sound-spdif.17: Driver imx-spdif requests probe deferral
> imx-spdif sound-spdif.17: ASoC: CPU DAI (null) not registered
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -517
> platform sound-spdif.17: Driver imx-spdif requests probe deferral
> imx-sdma 20ec000.sdma: initialized
> imx-sdma 20ec000.sdma: loaded firmware 1.1
> 
> Unloading and reloading snd_soc_imx_spdif then caused this:
> 
> fsl-spdif-dai 2004000.spdif: Missing dma channel for stream: 0
> fsl-spdif-dai 2004000.spdif: ASoC: pcm constructor failed: -22
> imx-spdif sound-spdif.17: ASoC: can't create pcm S/PDIF PCM Playback :-22
> imx-spdif sound-spdif.17: ASoC: failed to instantiate card -22
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -22
> imx-spdif: probe of sound-spdif.17 failed with error -22
> fsl-spdif-dai 2004000.spdif: Missing dma channel for stream: 0
> fsl-spdif-dai 2004000.spdif: ASoC: pcm constructor failed: -22
> imx-spdif sound-spdif.17: ASoC: can't create pcm S/PDIF PCM Playback :-22
> imx-spdif sound-spdif.17: ASoC: failed to instantiate card -22
> imx-spdif sound-spdif.17: snd_soc_register_card failed: -22
> 
> and unloading all of them (except for imx_sdma and snd_soc_spdif_tx) and
> reloading them in this order (most recent first):
> 
> snd_soc_imx_spdif
> snd_soc_fsl_spdif
> imx_pcm_dma
> 
> then produced:
> 
> imx-spdif sound-spdif.17: dit-hifi <-> 2004000.spdif mapping ok
> 
> Clearly something isn't right here.
> 
> Unloading snd_soc_imx_spdif to then try and re-provoke the problem then
> caused this:
> 
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 1301 at /home/rmk/git/linux-rmk/fs/sysfs/dir.c:915 sysfs_hash_and_remove+0x84/0x90()
> sysfs: can not remove 'dapm_widget', no directory
> Modules linked in: snd_soc_imx_spdif(-) snd_soc_fsl_spdif imx_pcm_dma fuse bnep rfcomm bluetooth imx_sdma imx_thermal imx2_wdt snd_soc_spdif_tx hid_cypress [last unloaded: imx_pcm_dma]
> CPU: 0 PID: 1301 Comm: rmmod Not tainted 3.13.0-rc4+ #387
> Backtrace: 
> [<c0012640>] (dump_backtrace) from [<c00127dc>] (show_stack+0x18/0x1c)
>  r6:00000393 r5:c016bfa4 r4:00000000 r3:00000000
> [<c00127c4>] (show_stack) from [<c0683a18>] (dump_stack+0x70/0x90)
> [<c06839a8>] (dump_stack) from [<c00244e0>] (warn_slowpath_common+0x74/0x94)
>  r4:dab89d30 r3:00000000
> [<c002446c>] (warn_slowpath_common) from [<c00245a4>] (warn_slowpath_fmt+0x38/0x40)
>  r8:c689ce00 r7:00000000 r6:00000000 r5:c077c04c r4:dba2a318
> [<c0024570>] (warn_slowpath_fmt) from [<c016bfa4>] (sysfs_hash_and_remove+0x84/0x90)
>  r3:c077c04c r2:c06b3c38
> [<c016bf20>] (sysfs_hash_and_remove) from [<c016a00c>] (sysfs_remove_file_ns+0x18/0x1c)
>  r7:da916900 r6:00000000 r5:db2c900c r4:dba2a318
> [<c0169ff4>] (sysfs_remove_file_ns) from [<c03687d4>] (device_remove_file+0x20/0x24)
> [<c03687b4>] (device_remove_file) from [<c04f532c>] (snd_soc_dapm_free+0x1c/0x22c)
> [<c04f5310>] (snd_soc_dapm_free) from [<c04f0c98>] (soc_remove_codec+0x34/0x98)
>  r10:dabae59c r9:00000000 r8:c689ce00 r7:da916900 r6:00000000 r5:db2c900c
>  r4:dba2a200 r3:00000000
> [<c04f0c64>] (soc_remove_codec) from [<c04f3188>] (soc_remove_dai_links.clone.28+0x3c0/0x3ec)
>  r4:00000000 r3:00000000
> [<c04f2dc8>] (soc_remove_dai_links.clone.28) from [<c04f3248>] (snd_soc_unregister_card+0x94/0xc8)
>  r10:d8435000 r9:db924204 r8:d8435000 r7:d079d480 r6:00000001 r5:00000608
>  r4:dabae4b8
> [<c04f31b4>] (snd_soc_unregister_card) from [<c04ffa70>] (devm_card_release+0x14/0x18)
>  r6:00000003 r5:db924010 r4:dab89e60 r3:c04ffa5c
> [<c04ffa5c>] (devm_card_release) from [<c036ec74>] (release_nodes+0x190/0x1f8)
> [<c036eae4>] (release_nodes) from [<c036ed94>] (devres_release_all+0x38/0x54)
>  r10:00000000 r9:dab88000 r8:c000eb44 r7:bef87600 r6:db924044 r5:bf131014
>  r4:db924010
> [<c036ed5c>] (devres_release_all) from [<c036b7a8>] (__device_release_driver+0x80/0xd4)
>  r4:db924010 r3:bf12f000
> [<c036b728>] (__device_release_driver) from [<c036bf28>] (driver_detach+0xbc/0xc0)
>  r5:bf131014 r4:db924010
> [<c036be6c>] (driver_detach) from [<c036b490>] (bus_remove_driver+0x54/0x98)
>  r6:dab89f3c r5:bf131058 r4:bf131014 r3:db0c8000
> [<c036b43c>] (bus_remove_driver) from [<c036c588>] (driver_unregister+0x30/0x4c)
>  r4:bf131014 r3:c68a7a80
> [<c036c558>] (driver_unregister) from [<c036d21c>] (platform_driver_unregister+0x14/0x18)
>  r4:00000000 r3:bf12f2d0
> [<c036d208>] (platform_driver_unregister) from [<bf12f2e4>] (imx_spdif_driver_exit+0x14/0xd30 [snd_soc_imx_spdif])
> [<bf12f2d0>] (imx_spdif_driver_exit [snd_soc_imx_spdif]) from [<c008d764>] (SyS_delete_module+0x140/0x190)
> [<c008d624>] (SyS_delete_module) from [<c000e980>] (ret_fast_syscall+0x0/0x48)
>  r7:00000081 r6:000120a8 r5:bef87600 r4:00000880
> ---[ end trace 09423e64ab60df46 ]---
> Unable to handle kernel NULL pointer dereference at virtual address 00000008
> pgd = dab9c000
> [00000008] *pgd=2062f831, *pte=00000000, *ppte=00000000
> Internal error: Oops: 17 [#1] SMP ARM
> Modules linked in: snd_soc_imx_spdif(-) snd_soc_fsl_spdif imx_pcm_dma fuse bnep rfcomm bluetooth imx_sdma imx_thermal imx2_wdt snd_soc_spdif_tx hid_cypress [last unloaded: imx_pcm_dma]
> CPU: 0 PID: 1301 Comm: rmmod Tainted: G        W    3.13.0-rc4+ #387
> task: db0c8000 ti: dab88000 task.ti: dab88000
> PC is at soc_remove_codec+0x78/0x98
> LR is at trace_hardirqs_on+0x14/0x18
> pc : [<c04f0cdc>]    lr : [<c0066514>]    psr: 600f0013
> sp : dab89dc8  ip : 00000020  fp : dab89ddc
> r10: dabae59c  r9 : 00000000  r8 : c689ce00
> r7 : da916900  r6 : 00000000  r5 : db2c900c  r4 : dba2a200
> r3 : 00000000  r2 : 00100100  r1 : dabac810  r0 : dabae5f8
> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
> Control: 10c53c7d  Table: 2ab9c059  DAC: 00000015
> Process rmmod (pid: 1301, stack limit = 0xdab88240)
> Stack: (0xdab89dc8 to 0xdab8a000)
> 9dc0:                   00000000 00000000 dab89e24 dab89de0 c04f3188 c04f0c70
> 9de0: d84355bc dabae5a0 00200200 00100100 00200200 00100100 d079d480 dabae4b8
> 9e00: 00000608 00000001 d079d480 d8435000 db924204 d8435000 dab89e44 dab89e28
> 9e20: c04f3248 c04f2dd4 c04ffa5c dab89e60 db924010 00000003 dab89e54 dab89e48
> 9e40: c04ffa70 c04f31c0 dab89e94 dab89e58 c036ec74 c04ffa68 dab89e94 a00f0013
> 9e60: dabae400 d079d480 00000002 db924010 bf131014 db924044 bef87600 c000eb44
> 9e80: dab88000 00000000 dab89eac dab89e98 c036ed94 c036eaf0 bf12f000 db924010
> 9ea0: dab89ec4 dab89eb0 c036b7a8 c036ed68 db924010 bf131014 dab89ee4 dab89ec8
> 9ec0: c036bf28 c036b734 db0c8000 bf131014 bf131058 dab89f3c dab89efc dab89ee8
> 9ee0: c036b490 c036be78 c68a7a80 bf131014 dab89f14 dab89f00 c036c588 c036b448
> 9f00: bf12f2d0 00000000 dab89f24 dab89f18 c036d21c c036c564 dab89f34 dab89f28
> 9f20: bf12f2e4 c036d214 dab89fa4 dab89f38 c008d764 bf12f2dc 00000000 5f646e73
> 9f40: 5f636f73 5f786d69 69647073 bef80066 dab89f74 dab89f60 c005f0d4 c0069020
> 9f60: 0077a008 00000000 00000880 bef87600 000120a8 00000081 bf131058 00000880
> 9f80: dab89f84 00000000 00000880 bef87600 000120a8 00000081 00000000 dab89fa8
> 9fa0: c000e980 c008d630 00000880 bef87600 bef87600 00000880 00009778 bef875f4
> 9fc0: 00000880 bef87600 000120a8 00000081 00000001 000120bc 00000001 00000000
> 9fe0: b6f03840 bef875fc 00008f75 b6f0384c 800f0010 bef87600 00000000 00000000
> Backtrace: 
> [<c04f0c64>] (soc_remove_codec) from [<c04f3188>] (soc_remove_dai_links.clone.28+0x3c0/0x3ec)
>  r4:00000000 r3:00000000
> [<c04f2dc8>] (soc_remove_dai_links.clone.28) from [<c04f3248>] (snd_soc_unregister_card+0x94/0xc8)
>  r10:d8435000 r9:db924204 r8:d8435000 r7:d079d480 r6:00000001 r5:00000608
>  r4:dabae4b8
> [<c04f31b4>] (snd_soc_unregister_card) from [<c04ffa70>] (devm_card_release+0x14/0x18)
>  r6:00000003 r5:db924010 r4:dab89e60 r3:c04ffa5c
> [<c04ffa5c>] (devm_card_release) from [<c036ec74>] (release_nodes+0x190/0x1f8)
> [<c036eae4>] (release_nodes) from [<c036ed94>] (devres_release_all+0x38/0x54)
>  r10:00000000 r9:dab88000 r8:c000eb44 r7:bef87600 r6:db924044 r5:bf131014
>  r4:db924010
> [<c036ed5c>] (devres_release_all) from [<c036b7a8>] (__device_release_driver+0x80/0xd4)
>  r4:db924010 r3:bf12f000
> [<c036b728>] (__device_release_driver) from [<c036bf28>] (driver_detach+0xbc/0xc0)
>  r5:bf131014 r4:db924010
> [<c036be6c>] (driver_detach) from [<c036b490>] (bus_remove_driver+0x54/0x98)
>  r6:dab89f3c r5:bf131058 r4:bf131014 r3:db0c8000
> [<c036b43c>] (bus_remove_driver) from [<c036c588>] (driver_unregister+0x30/0x4c)
>  r4:bf131014 r3:c68a7a80
> [<c036c558>] (driver_unregister) from [<c036d21c>] (platform_driver_unregister+0x14/0x18)
>  r4:00000000 r3:bf12f2d0
> [<c036d208>] (platform_driver_unregister) from [<bf12f2e4>] (imx_spdif_driver_exit+0x14/0xd30 [snd_soc_imx_spdif])
> [<bf12f2d0>] (imx_spdif_driver_exit [snd_soc_imx_spdif]) from [<c008d764>] (SyS_delete_module+0x140/0x190)
> [<c008d624>] (SyS_delete_module) from [<c000e980>] (ret_fast_syscall+0x0/0x48)
>  r7:00000081 r6:000120a8 r5:bef87600 r4:00000880
> Code: e594100c e5842068 e584306c e5913080 (e5930008) 
> ---[ end trace 09423e64ab60df47 ]---

I just reproduced these two problems. It should be the bug in the imx-spdif
driver. I'll fix them soon. Please take a look after I send the patch.

Thank you,
Nicolin Chen

> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 
> 




More information about the linux-arm-kernel mailing list