aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeyon Jie <[email protected]>2019-08-07 09:50:30 -0500
committerMark Brown <[email protected]>2019-08-08 20:38:53 +0100
commit804cbf4bb063204ca6c2471baa694548aab02ce3 (patch)
treef5d9076b955dd9086b533a0b0792032dd96acc2b
parentcc352735d49c9c25fd711795bee35d3d001ddffa (diff)
ASoC: hdac_hda: fix page fault issue by removing race
There is a race between hda codec device removing and the jack-detecting work, which will lead to a page fault issue as the latter work is accessing codec device which could be already removed. Here add the cancellation of jack-detecting work before codecs are actually removed to avoid the race and fix the issue. Bug: https://github.com/thesofproject/linux/issues/1067 Signed-off-by: Keyon Jie <[email protected]> Signed-off-by: Pierre-Louis Bossart <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
-rw-r--r--sound/soc/codecs/hdac_hda.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c
index 7d4940256914..91242b6f8ea7 100644
--- a/sound/soc/codecs/hdac_hda.c
+++ b/sound/soc/codecs/hdac_hda.c
@@ -495,6 +495,10 @@ static int hdac_hda_dev_probe(struct hdac_device *hdev)
static int hdac_hda_dev_remove(struct hdac_device *hdev)
{
+ struct hdac_hda_priv *hda_pvt;
+
+ hda_pvt = dev_get_drvdata(&hdev->dev);
+ cancel_delayed_work_sync(&hda_pvt->codec.jackpoll_work);
return 0;
}