• Frederic Barrat's avatar
    powerpc/powernv/ioda: Fix ref count for devices with their own PE · 05dd7da7
    Frederic Barrat authored
    The pci_dn structure used to store a pointer to the struct pci_dev, so
    taking a reference on the device was required. However, the pci_dev
    pointer was later removed from the pci_dn structure, but the reference
    was kept for the npu device.
    See commit 902bdc57 ("powerpc/powernv/idoa: Remove unnecessary
    pcidev from pci_dn").
    
    We don't need to take a reference on the device when assigning the PE
    as the struct pnv_ioda_pe is cleaned up at the same time as
    the (physical) device is released. Doing so prevents the device from
    being released, which is a problem for opencapi devices, since we want
    to be able to remove them through PCI hotplug.
    
    Now the ugly part: nvlink npu devices are not meant to be
    released. Because of the above, we've always leaked a reference and
    simply removing it now is dangerous and would likely require more
    work. There's currently no release device callback for nvlink devices
    for example. So to be safe, this patch leaks a reference on the npu
    device, but only for nvlink and not opencapi.
    Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
    Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20191121134918.7155-2-fbarrat@linux.ibm.com
    05dd7da7
pci-ioda.c 107 KB