• Wei Yang's avatar
    powerpc/powernv: Allocate struct pnv_ioda_pe iommu_table dynamically · 9e8d4a19
    Wei Yang authored
    Previously the iommu_table had the same lifetime as a struct pnv_ioda_pe
    and was embedded in it. The pnv_ioda_pe was assigned to a PE on the bootup
    stage. Since PEs are based on the hardware layout which is static in the
    system, they will never get released. This means the iommu_table in the
    pnv_ioda_pe will never get released either.
    
    This no longer works for VF PE. VF PEs are created and released dynamically
    when VFs are created and released. So we need to assign pnv_ioda_pe to VF
    PEs respectively when VFs are enabled and clean up those resources for VF
    PE when VFs are disabled. And iommu_table is one of the resources we need
    to handle dynamically.
    
    Current iommu_table is a static field in pnv_ioda_pe, which will face a
    problem when freeing it. During the disabling of a VF,
    pnv_pci_ioda2_release_dma_pe will call iommu_free_table to release the
    iommu_table for this PE. A static iommu_table will fail in
    iommu_free_table.
    
    According to these requirement, this patch allocates iommu_table
    dynamically.
    Signed-off-by: default avatarWei Yang <weiyang@linux.vnet.ibm.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    9e8d4a19
pci-ioda.c 56.3 KB