Skip to content
  • Fabio Estevam's avatar
    ASoC: fsl: imx-wm8962: Set the card owner field · 0984f341
    Fabio Estevam authored
    The following crash happens when trying to unload the snd_soc_imx_wm8962 module
    while playback is active:
    
    [  208.666868] Unable to handle kernel paging request at virtc
    [  208.674110] pgd = 80004000
    [  208.676867] [7f06541c] *pgd=4c334811, *pte=00000000, *ppte=00000000
    [  208.683211] Internal error: Oops: 80000007 [#1
    
    ] SMP ARM
    [  208.688445] Modules linked in: snd_soc_wm8962 snd_soc_fsl_ssi snd_soc_imx_audmux imx_pcm_fiq evbug]
    ...
    
    In order to avoid such problem, fill the card owner field as suggested by
    Lars-Peter Clausen:
    
    "But looking at the source it seems that this is a core feature of ALSA and at
    least for the card module itself it will do the ref-counting when a stream is
    started/stopped. And we even support setting the owner of a card in ASoC.
    It's just that pretty much no ASoC card driver bothers to set the owner field
    in the snd_soc_card struct. So this particular problem can be fixed by updating
    the imx-wm8962 driver to set the owner field."
    
    By doing as suggested, we no longer see the crash when attempting to unload the
    snd_soc_imx_wm8962 module while playback is active:
    
    $ modprobe -r snd_soc_imx_wm8962
    modprobe: can't unload module snd_soc_imx_wm8962: Resource temporarily
    unavailable
    
    Reported-by: default avatarJiada Wang <jiada_wang@mentor.com>
    Suggested-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarFabio Estevam <fabio.estevam@freescale.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    0984f341