mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-12-18 08:26:08 +01:00
The earlier commit to fix runtime PM in case i915 init fails,
introduces a possibility to hit a page fault.
snd_hdac_ext_bus_device_exit() is designed to be called from
dev.release(). Calling it outside device reference counting, is
not safe and may lead to calling the device_exit() function
twice. Additionally, as part of ext_bus_device_init(), the device
is also registered with snd_hdac_device_register(). Thus before
calling device_exit(), the device must be removed from device
hierarchy first.
Fix the issue by rolling back init actions by calling
hdac_device_unregister() and then releasing device with put_device().
This matches with existing code in hdac-ext module.
To complete the fix, add handling for the case where
hda_codec_load_module() returns -ENODEV, and clean up the hdac_ext
resources also in this case.
In future work, hdac-ext interface should be extended to allow clients
more flexibility to handle the life-cycle of individual devices, beyond
just the current snd_hdac_ext_bus_device_remove(), which removes all
devices.
BugLink: https://github.com/thesofproject/linux/issues/2646
Reported-by: Jaroslav Kysela <perex@perex.cz>
Fixes:
|
||
|---|---|---|
| .. | ||
| adi | ||
| amd | ||
| atmel | ||
| au1x | ||
| bcm | ||
| cirrus | ||
| codecs | ||
| dwc | ||
| fsl | ||
| generic | ||
| hisilicon | ||
| img | ||
| intel | ||
| jz4740 | ||
| kirkwood | ||
| mediatek | ||
| meson | ||
| mxs | ||
| pxa | ||
| qcom | ||
| rockchip | ||
| samsung | ||
| sh | ||
| sirf | ||
| sof | ||
| spear | ||
| sprd | ||
| sti | ||
| stm | ||
| sunxi | ||
| tegra | ||
| ti | ||
| txx9 | ||
| uniphier | ||
| ux500 | ||
| xilinx | ||
| xtensa | ||
| zte | ||
| Kconfig | ||
| Makefile | ||
| soc-ac97.c | ||
| soc-acpi.c | ||
| soc-card.c | ||
| soc-component.c | ||
| soc-compress.c | ||
| soc-core.c | ||
| soc-dai.c | ||
| soc-dapm.c | ||
| soc-devres.c | ||
| soc-generic-dmaengine-pcm.c | ||
| soc-jack.c | ||
| soc-link.c | ||
| soc-ops.c | ||
| soc-pcm.c | ||
| soc-topology.c | ||
| soc-utils.c | ||