ALSA: hda/i915: Fix one too many pci_dev_put()
authorLucas De Marchi <lucas.demarchi@intel.com>
Sat, 16 Apr 2022 06:44:18 +0000 (23:44 -0700)
committerTakashi Iwai <tiwai@suse.de>
Tue, 19 Apr 2022 06:59:14 +0000 (08:59 +0200)
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.

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/5701
Fixes: c9db8a30d9f0 ("ALSA: hda/i915 - skip acomp init if no matching display")
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20220416064418.2364582-1-lucas.demarchi@intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/hdac_i915.c

index 48b8ed752b69c594f91c82be86c714a5deb5da46..3f35972e1cf750fe8226e6093f5ec91303759b97 100644 (file)
@@ -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;