• Niklas Schnelle's avatar
    s390/pci: fix leak of PCI device structure · 0b13525c
    Niklas Schnelle authored
    In commit 05bc1be6 ("s390/pci: create zPCI bus") we removed the
    pci_dev_put() call matching the earlier pci_get_slot() done as part of
    __zpci_event_availability(). This was based on the wrong understanding
    that the device_put() done as part of pci_destroy_device() would counter
    the pci_get_slot() when it only counters the initial reference. This
    same understanding and existing bad example also lead to not doing
    a pci_dev_put() in zpci_remove_device().
    
    Since releasing the PCI devices, unlike releasing the PCI slot, does not
    print any debug message for testing I added one in pci_release_dev().
    This revealed that we are indeed leaking the PCI device on PCI
    hotunplug. Further testing also revealed another missing pci_dev_put() in
    disable_slot().
    
    Fix this by adding the missing pci_dev_put() in disable_slot() and fix
    zpci_remove_device() with the correct pci_dev_put() calls. Also instead
    of calling pci_get_slot() in __zpci_event_availability() to determine if
    a ...
    0b13525c
pci_event.c 3.8 KB