• Gavin Shan's avatar
    powerpc/powernv: Dynamically release PE · c5f7700b
    Gavin Shan authored
    This supports releasing PEs dynamically. A reference count is
    introduced to PE representing number of PCI devices associated
    with the PE. The reference count is increased when PCI device
    joins the PE and decreased when PCI device leaves the PE in
    pnv_pci_release_device(). When the count becomes zero, the PE
    and its consumed resources are released. Note that the count
    is accessed concurrently. So a counter with "int" type is enough
    here.
    
    In order to release the sources consumed by the PE, couple of
    helper functions are introduced as below:
    
       * pnv_pci_ioda1_unset_window() - Unset IODA1 DMA32 window
       * pnv_pci_ioda1_release_dma_pe() - Release IODA1 DMA32 segments
       * pnv_pci_ioda2_release_dma_pe() - Release IODA2 DMA resource
       * pnv_ioda_release_pe_seg() - Unmap IO/M32/M64 segments
    Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    c5f7700b
pci-ioda.c 103 KB