amdgpu_atpx_detect() uses pci_get_class() in two while loops to
iterate through VGA and OTHER display class PCI devices. Each call to
pci_get_class() increments the reference count of the returned PCI
device. However, after the loops complete, there are no corresponding
pci_dev_put() to decrement these reference counts.

Add pci_dev_put() after each while loop to release reference counts
held by the last devices found in each class.

Found by code review.

Cc: [email protected]
Fixes: 5d30ed3c2c74 ("Revert "drm/amdgpu: simplify ATPX detection"")
Signed-off-by: Ma Ke <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
index 3893e6fc2f03..9eb776a2e8bb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
@@ -617,6 +617,9 @@ static bool amdgpu_atpx_detect(void)
                amdgpu_atpx_get_quirks(pdev);
        }
 
+       pci_dev_put(pdev);
+       pdev = NULL;
+
        while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != 
NULL) {
                vga_count++;
 
@@ -627,6 +630,8 @@ static bool amdgpu_atpx_detect(void)
                amdgpu_atpx_get_quirks(pdev);
        }
 
+       pci_dev_put(pdev);
+
        if (has_atpx && vga_count == 2) {
                acpi_get_name(amdgpu_atpx_priv.atpx.handle, ACPI_FULL_PATHNAME, 
&buffer);
                pr_info("vga_switcheroo: detected switching method %s handle\n",
-- 
2.17.1

Reply via email to