From: Sasha Levin Date: Thu, 12 Dec 2019 03:11:21 +0000 (-0500) Subject: fixes for 4.9 X-Git-Tag: v5.4.3~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f9064146debd3425af90b342c8a006ce99924170;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.9 Signed-off-by: Sasha Levin --- diff --git a/queue-4.9/alsa-hda-fix-pending-unsol-events-at-shutdown.patch b/queue-4.9/alsa-hda-fix-pending-unsol-events-at-shutdown.patch new file mode 100644 index 00000000000..e1870e0f9ca --- /dev/null +++ b/queue-4.9/alsa-hda-fix-pending-unsol-events-at-shutdown.patch @@ -0,0 +1,61 @@ +From 538cc0d4695c58f40e598c43bda39f2a1695cfde Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 28 Oct 2019 11:58:03 +0100 +Subject: ALSA: hda - Fix pending unsol events at shutdown + +From: Takashi Iwai + +[ Upstream commit ca58f55108fee41d87c9123f85ad4863e5de7f45 ] + +This is an alternative fix attemp for the issue reported in the commit +caa8422d01e9 ("ALSA: hda: Flush interrupts on disabling") that was +reverted later due to regressions. Instead of tweaking the hardware +disablement order and the enforced irq flushing, do calling +cancel_work_sync() of the unsol work early enough, and explicitly +ignore the unsol events during the shutdown by checking the +bus->shutdown flag. + +Fixes: caa8422d01e9 ("ALSA: hda: Flush interrupts on disabling") +Cc: Chris Wilson +Link: https://lore.kernel.org/r/s5h1ruxt9cz.wl-tiwai@suse.de +Signed-off-by: Takashi Iwai +Signed-off-by: Sasha Levin +--- + sound/pci/hda/hda_bind.c | 4 ++++ + sound/pci/hda/hda_intel.c | 3 +++ + 2 files changed, 7 insertions(+) + +diff --git a/sound/pci/hda/hda_bind.c b/sound/pci/hda/hda_bind.c +index 7ea201c05e5da..d0d6dfbfcfdf8 100644 +--- a/sound/pci/hda/hda_bind.c ++++ b/sound/pci/hda/hda_bind.c +@@ -42,6 +42,10 @@ static void hda_codec_unsol_event(struct hdac_device *dev, unsigned int ev) + { + struct hda_codec *codec = container_of(dev, struct hda_codec, core); + ++ /* ignore unsol events during shutdown */ ++ if (codec->bus->shutdown) ++ return; ++ + if (codec->patch_ops.unsol_event) + codec->patch_ops.unsol_event(codec, ev); + } +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index f2f1d9fd848c8..3234e9ca02cec 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -1275,8 +1275,11 @@ static int azx_free(struct azx *chip) + static int azx_dev_disconnect(struct snd_device *device) + { + struct azx *chip = device->device_data; ++ struct hdac_bus *bus = azx_bus(chip); + + chip->bus.shutdown = 1; ++ cancel_work_sync(&bus->unsol_work); ++ + return 0; + } + +-- +2.20.1 + diff --git a/queue-4.9/series b/queue-4.9/series index 94aa7ca1ea0..0254af543b7 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -90,3 +90,4 @@ crypto-user-fix-memory-leak-in-crypto_report.patch spi-atmel-fix-cs-high-support.patch rdma-qib-validate-show-store-callbacks-before-calling-them.patch thermal-fix-deadlock-in-thermal-thermal_zone_device_check.patch +alsa-hda-fix-pending-unsol-events-at-shutdown.patch