alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling"
@ 2019-10-28  8:10 Takashi Iwai
  2019-10-28  8:21 ` Chris Wilson
  0 siblings, 1 reply; 4+ messages in thread
From: Takashi Iwai @ 2019-10-28  8:10 UTC (permalink / raw)
  To: alsa-devel; +Cc: Jonas Witschel, Chris Wilson

This reverts commit caa8422d01e983782548648e125fd617cadcec3f.

It turned out that this commit caused a regression at shutdown /
reboot, as the synchronize_irq() calls seems blocking the whole
shutdown.  Also another part of the change about shuffling the call
order looks suspicious; the azx_stop_chip() call disables the CORB /
RIRB while the others may still need the CORB/RIRB update.

Since the original commit itself was a cargo-fix, let's revert the
whole patch.

BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205333
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/hda/hdac_controller.c | 2 --
 sound/pci/hda/hda_intel.c   | 2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
index d3999e7b0705..7e7be8e4dcf9 100644
--- a/sound/hda/hdac_controller.c
+++ b/sound/hda/hdac_controller.c
@@ -447,8 +447,6 @@ static void azx_int_disable(struct hdac_bus *bus)
 	list_for_each_entry(azx_dev, &bus->stream_list, list)
 		snd_hdac_stream_updateb(azx_dev, SD_CTL, SD_INT_MASK, 0);
 
-	synchronize_irq(bus->irq);
-
 	/* disable SIE for all streams */
 	snd_hdac_chip_writeb(bus, INTCTL, 0);
 
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index a815bc811799..cf53fbd872ee 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1348,9 +1348,9 @@ static int azx_free(struct azx *chip)
 	}
 
 	if (bus->chip_init) {
-		azx_stop_chip(chip);
 		azx_clear_irq_pending(chip);
 		azx_stop_all_streams(chip);
+		azx_stop_chip(chip);
 	}
 
 	if (bus->irq >= 0)
-- 
2.16.4

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling"
  2019-10-28  8:10 [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling" Takashi Iwai
@ 2019-10-28  8:21 ` Chris Wilson
  2019-10-28  8:24   ` Takashi Iwai
  0 siblings, 1 reply; 4+ messages in thread
From: Chris Wilson @ 2019-10-28  8:21 UTC (permalink / raw)
  To: Takashi Iwai, alsa-devel; +Cc: Jonas Witschel

Quoting Takashi Iwai (2019-10-28 08:10:56)
> This reverts commit caa8422d01e983782548648e125fd617cadcec3f.
> 
> It turned out that this commit caused a regression at shutdown /
> reboot, as the synchronize_irq() calls seems blocking the whole
> shutdown.  Also another part of the change about shuffling the call
> order looks suspicious; the azx_stop_chip() call disables the CORB /
> RIRB while the others may still need the CORB/RIRB update.
> 
> Since the original commit itself was a cargo-fix, let's revert the
> whole patch.

You will want to include a link to the bug you may be reintroducing so
you have that information for easy reference later.

Also do you know if you fixed the bug in any other way, because our CI
hasn't reported that GPF since the patch landed.
-Chris
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling"
  2019-10-28  8:21 ` Chris Wilson
@ 2019-10-28  8:24   ` Takashi Iwai
  2019-10-28 11:09     ` Takashi Iwai
  0 siblings, 1 reply; 4+ messages in thread
From: Takashi Iwai @ 2019-10-28  8:24 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Jonas Witschel, alsa-devel

On Mon, 28 Oct 2019 09:21:07 +0100,
Chris Wilson wrote:
> 
> Quoting Takashi Iwai (2019-10-28 08:10:56)
> > This reverts commit caa8422d01e983782548648e125fd617cadcec3f.
> > 
> > It turned out that this commit caused a regression at shutdown /
> > reboot, as the synchronize_irq() calls seems blocking the whole
> > shutdown.  Also another part of the change about shuffling the call
> > order looks suspicious; the azx_stop_chip() call disables the CORB /
> > RIRB while the others may still need the CORB/RIRB update.
> > 
> > Since the original commit itself was a cargo-fix, let's revert the
> > whole patch.
> 
> You will want to include a link to the bug you may be reintroducing so
> you have that information for easy reference later.

Actually I forgot to put the Fixes tag where usually you can track the
original issue from there.  Will fix it.  I don't mind to put yet
another bug link tag, though.

> Also do you know if you fixed the bug in any other way, because our CI
> hasn't reported that GPF since the patch landed.

Well, let's see whether the GPF reappears with the revert at first.
It might be another fix that covered.


thanks,

Takashi
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling"
  2019-10-28  8:24   ` Takashi Iwai
@ 2019-10-28 11:09     ` Takashi Iwai
  0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2019-10-28 11:09 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Jonas Witschel, alsa-devel

On Mon, 28 Oct 2019 09:24:00 +0100,
Takashi Iwai wrote:
> 
> On Mon, 28 Oct 2019 09:21:07 +0100,
> Chris Wilson wrote:
> > 
> > Quoting Takashi Iwai (2019-10-28 08:10:56)
> > > This reverts commit caa8422d01e983782548648e125fd617cadcec3f.
> > > 
> > > It turned out that this commit caused a regression at shutdown /
> > > reboot, as the synchronize_irq() calls seems blocking the whole
> > > shutdown.  Also another part of the change about shuffling the call
> > > order looks suspicious; the azx_stop_chip() call disables the CORB /
> > > RIRB while the others may still need the CORB/RIRB update.
> > > 
> > > Since the original commit itself was a cargo-fix, let's revert the
> > > whole patch.
> > 
> > You will want to include a link to the bug you may be reintroducing so
> > you have that information for easy reference later.
> 
> Actually I forgot to put the Fixes tag where usually you can track the
> original issue from there.  Will fix it.  I don't mind to put yet
> another bug link tag, though.
> 
> > Also do you know if you fixed the bug in any other way, because our CI
> > hasn't reported that GPF since the patch landed.
> 
> Well, let's see whether the GPF reappears with the revert at first.
> It might be another fix that covered.

Thinking over this again, the patch below should cover this kind of
races (hopefully).  I'm going to queue this together with the revert.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: hda - Fix pending unsol events at shutdown

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 <chris@chris-wilson.co.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 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 8272b50b8349..6a8564566375 100644
--- a/sound/pci/hda/hda_bind.c
+++ b/sound/pci/hda/hda_bind.c
@@ -43,6 +43,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 cf53fbd872ee..7304a92559a3 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1382,8 +1382,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.16.4

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-10-28 11:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-28  8:10 [alsa-devel] [PATCH] Revert "ALSA: hda: Flush interrupts on disabling" Takashi Iwai
2019-10-28  8:21 ` Chris Wilson
2019-10-28  8:24   ` Takashi Iwai
2019-10-28 11:09     ` Takashi Iwai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).