On Mon, 17 Jun 2019 22:51:42 +0200, Ranjani Sridharan wrote:
On Mon, 2019-06-17 at 13:36 +0200, Amadeusz Sławiński wrote:
When we unload Skylake driver we may end up calling hdac_component_master_unbind(), it uses acomp->audio_ops, which we set in hdmi_codec_probe(), so we need to set it to NULL in hdmi_codec_remove(), otherwise we will dereference no longer existing pointer.
Hi Amadeusz,
It looks like the audio_ops should be deleted snd_hdac_acomp_exit().
It's a different one. The codec driver registers / de-registers the notifier at its probe/remove, while the controller driver takes care of snd_hdac_acomp_init(). snd_hdac_acomp_exit() is usually not needed to be called explicitly, as it's managed via devres.
Takashi
Also, this doesnt seem to be the case with when the SOF driver is removed. Could you please give a bit more context on what error you see when this happens?
Thanks, Ranjani
Signed-off-by: Amadeusz Sławiński < amadeuszx.slawinski@linux.intel.com>
sound/soc/codecs/hdac_hdmi.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c index 911bb6e2a1ac..9ee1bff548d8 100644 --- a/sound/soc/codecs/hdac_hdmi.c +++ b/sound/soc/codecs/hdac_hdmi.c @@ -1890,6 +1890,12 @@ static void hdmi_codec_remove(struct snd_soc_component *component) { struct hdac_hdmi_priv *hdmi = snd_soc_component_get_drvdata(component); struct hdac_device *hdev = hdmi->hdev;
- int ret;
- ret = snd_hdac_acomp_register_notifier(hdev->bus, NULL);
- if (ret < 0)
dev_err(&hdev->dev, "notifier unregister failed: err:
%d\n",
ret);
pm_runtime_disable(&hdev->dev);
}