Hi,
On Thu, 11 Nov 2021, Takashi Iwai wrote:
A potential problem with the current code is that it doesn't disable the runtime PM at the release procedure. Could you try the patch below? You can put WARN_ON(!chip) at azx_runtime_idle(), too, for catching the invalid runtime call.
[...]
--- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1347,8 +1347,13 @@ static void azx_free(struct azx *chip) if (hda->freed) return;
- if (azx_has_pm_runtime(chip) && chip->running)
- if (azx_has_pm_runtime(chip) && chip->running) { pm_runtime_get_noresume(&pci->dev);
pm_runtime_forbid(&pci->dev);
pm_runtime_dont_use_autosuspend(&pci->dev);
pm_runtime_disable(&pci->dev);
- }
- chip->running = 0;
Tested with next-20211019 (first next tag where I've seen test failures) and your patch, and this seems to do the trick. I didn't have my drvdata patch included when I ran the test. No rpm_idle() calls anymore after azx_remove(), so the bug is not hit.
azx_del_card_list(chip); @@ -2320,6 +2325,7 @@ static int azx_probe_continue(struct azx *chip) set_default_power_save(chip);
if (azx_has_pm_runtime(chip)) {
pm_runtime_use_autosuspend(&pci->dev);pm_runtime_enable(&pci->dev);
This does generate warnings [ 13.495059] snd_hda_intel 0000:00:1f.3: Unbalanced pm_runtime_enable!
And later [ 54.770701] Enabling runtime PM for inactive device (0000:00:1f.3) with active children [ 54.770718] WARNING: CPU: 0 PID: 10 at drivers/base/power/runtime.c:1439 pm_runtime_enable+0x98/0xb0
Adding a "pm_runtime_set_active(&pci->dev)" to both azx_free() and azx_probe_continue() seems to help and fix still works.
Br, Kai