pci_get_class() will already unref the pci device passed as argument. So if it's unconditionally unref'ed, even if the loop is not stopped, there will be one too many unref for each device not matched.
Cc: Kai Vehmanen kai.vehmanen@linux.intel.com Cc: Takashi Iwai tiwai@suse.de Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/5701 Fixes: 0dc2696a4623 ("ALSA: hda/i915 - skip acomp init if no matching display") Signed-off-by: Lucas De Marchi lucas.demarchi@intel.com --- sound/hda/hdac_i915.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c index 1ce2cea137db..12dad5e9c45d 100644 --- a/sound/hda/hdac_i915.c +++ b/sound/hda/hdac_i915.c @@ -127,11 +127,10 @@ static int i915_gfx_present(struct pci_dev *hdac_pci) display_dev = pci_get_class(class, display_dev);
if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL && - connectivity_check(display_dev, hdac_pci)) + connectivity_check(display_dev, hdac_pci)) { + pci_dev_put(display_dev); match = true; - - pci_dev_put(display_dev); - + } } while (!match && display_dev);
return match;