[2/4] ALSA: hda: Stop mangling PCI MSI
diff mbox series

Message ID 20201023102340.25494-2-kai.heng.feng@canonical.com
State New, archived
Headers show
Series
  • [1/4] ALSA: hda: Refactor codec PM to use direct-complete optimization
Related show

Commit Message

Kai-Heng Feng Oct. 23, 2020, 10:23 a.m. UTC
The code predates 2005, it should be unnecessary now as PCI core handles
MSI much better nowadays.

So stop PCI MSI mangling in suspend/resume callbacks.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 sound/pci/hda/hda_intel.c | 15 ---------------
 1 file changed, 15 deletions(-)

Comments

Takashi Iwai Oct. 23, 2020, 11:34 a.m. UTC | #1
On Fri, 23 Oct 2020 12:23:36 +0200,
Kai-Heng Feng wrote:
> 
> @@ -1038,14 +1036,6 @@ static int azx_suspend(struct device *dev)
>  		__azx_runtime_suspend(chip);
>  	else
>  		pm_runtime_force_suspend(dev);
> -	if (bus->irq >= 0) {
> -		free_irq(bus->irq, chip);
> -		bus->irq = -1;
> -		chip->card->sync_irq = -1;
> -	}

This release of irq has nothing to do with MSI.  There has been PCI
controllers that assign to a different IRQ line after the resume.

> -	if (azx_acquire_irq(chip, 1) < 0)
> -		return -EIO;

Ditto.


thanks,

Takashi
Kai-Heng Feng Oct. 23, 2020, 12:53 p.m. UTC | #2
> On Oct 23, 2020, at 19:34, Takashi Iwai <tiwai@suse.de> wrote:
> 
> On Fri, 23 Oct 2020 12:23:36 +0200,
> Kai-Heng Feng wrote:
>> 
>> @@ -1038,14 +1036,6 @@ static int azx_suspend(struct device *dev)
>> 		__azx_runtime_suspend(chip);
>> 	else
>> 		pm_runtime_force_suspend(dev);
>> -	if (bus->irq >= 0) {
>> -		free_irq(bus->irq, chip);
>> -		bus->irq = -1;
>> -		chip->card->sync_irq = -1;
>> -	}
> 
> This release of irq has nothing to do with MSI.  There has been PCI
> controllers that assign to a different IRQ line after the resume.

Can this issue happened before commit 41017f0cac925 ("[PATCH] PCI: MSI(X) save/restore for suspend/resume") was merged?

Kai-Heng

> 
>> -	if (azx_acquire_irq(chip, 1) < 0)
>> -		return -EIO;
> 
> Ditto.
> 
> 
> thanks,
> 
> Takashi
Takashi Iwai Oct. 23, 2020, 12:59 p.m. UTC | #3
On Fri, 23 Oct 2020 14:53:08 +0200,
Kai-Heng Feng wrote:
> 
> 
> 
> > On Oct 23, 2020, at 19:34, Takashi Iwai <tiwai@suse.de> wrote:
> > 
> > On Fri, 23 Oct 2020 12:23:36 +0200,
> > Kai-Heng Feng wrote:
> >> 
> >> @@ -1038,14 +1036,6 @@ static int azx_suspend(struct device *dev)
> >> 		__azx_runtime_suspend(chip);
> >> 	else
> >> 		pm_runtime_force_suspend(dev);
> >> -	if (bus->irq >= 0) {
> >> -		free_irq(bus->irq, chip);
> >> -		bus->irq = -1;
> >> -		chip->card->sync_irq = -1;
> >> -	}
> > 
> > This release of irq has nothing to do with MSI.  There has been PCI
> > controllers that assign to a different IRQ line after the resume.
> 
> Can this issue happened before commit 41017f0cac925 ("[PATCH] PCI: MSI(X) save/restore for suspend/resume") was merged?

It's not about MSI.  The IRQ number itself may change after the
resume.

But I guess it's hard to prove it; the system was tad old, and I don't
know who own it now.


Takashi

Patch
diff mbox series

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 749b88090970..b4aa1dcf1aae 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1022,13 +1022,11 @@  static int azx_suspend(struct device *dev)
 {
 	struct snd_card *card = dev_get_drvdata(dev);
 	struct azx *chip;
-	struct hdac_bus *bus;
 
 	if (!azx_is_pm_ready(card))
 		return 0;
 
 	chip = card->private_data;
-	bus = azx_bus(chip);
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
 	/* An ugly workaround: direct call of __azx_runtime_suspend() and
 	 * __azx_runtime_resume() for old Intel platforms that suffer from
@@ -1038,14 +1036,6 @@  static int azx_suspend(struct device *dev)
 		__azx_runtime_suspend(chip);
 	else
 		pm_runtime_force_suspend(dev);
-	if (bus->irq >= 0) {
-		free_irq(bus->irq, chip);
-		bus->irq = -1;
-		chip->card->sync_irq = -1;
-	}
-
-	if (chip->msi)
-		pci_disable_msi(chip->pci);
 
 	trace_azx_suspend(chip);
 	return 0;
@@ -1060,11 +1050,6 @@  static int azx_resume(struct device *dev)
 		return 0;
 
 	chip = card->private_data;
-	if (chip->msi)
-		if (pci_enable_msi(chip->pci) < 0)
-			chip->msi = 0;
-	if (azx_acquire_irq(chip, 1) < 0)
-		return -EIO;
 
 	if (chip->driver_caps & AZX_DCAPS_SUSPEND_SPURIOUS_WAKEUP)
 		__azx_runtime_resume(chip, false);