lkml.org 
[lkml]   [2015]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH kernel v12 29/34] powerpc/powernv/ioda2: Use new helpers to do proper cleanup on PE release
    Date
    The existing code programmed TVT#0 with some address and then
    immediately released that memory.

    This makes use of pnv_pci_ioda2_unset_window() and
    pnv_pci_ioda2_set_bypass() which do correct resource release and
    TVT update.

    Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
    Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
    ---
    arch/powerpc/platforms/powernv/pci-ioda.c | 25 ++++++-------------------
    1 file changed, 6 insertions(+), 19 deletions(-)

    diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
    index ace0302..612ab23 100644
    --- a/arch/powerpc/platforms/powernv/pci-ioda.c
    +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
    @@ -1288,34 +1288,21 @@ m64_failed:
    return -EBUSY;
    }

    +static long pnv_pci_ioda2_unset_window(struct iommu_table_group *table_group,
    + int num);
    +static void pnv_pci_ioda2_set_bypass(struct pnv_ioda_pe *pe, bool enable);
    +
    static void pnv_pci_ioda2_release_dma_pe(struct pci_dev *dev, struct pnv_ioda_pe *pe)
    {
    - struct pci_bus *bus;
    - struct pci_controller *hose;
    - struct pnv_phb *phb;
    struct iommu_table *tbl;
    - unsigned long addr;
    int64_t rc;

    - bus = dev->bus;
    - hose = pci_bus_to_host(bus);
    - phb = hose->private_data;
    tbl = pe->table_group.tables[0];
    - addr = tbl->it_base;
    -
    - opal_pci_map_pe_dma_window(phb->opal_id, pe->pe_number,
    - pe->pe_number << 1, 1, __pa(addr),
    - 0, 0x1000);
    -
    - rc = opal_pci_map_pe_dma_window_real(pe->phb->opal_id,
    - pe->pe_number,
    - (pe->pe_number << 1) + 1,
    - pe->tce_bypass_base,
    - 0);
    + rc = pnv_pci_ioda2_unset_window(&pe->table_group, 0);
    if (rc)
    pe_warn(pe, "OPAL error %ld release DMA window\n", rc);

    - pnv_pci_unlink_table_and_group(tbl, &pe->table_group);
    + pnv_pci_ioda2_set_bypass(pe, false);
    if (pe->table_group.group) {
    iommu_group_put(pe->table_group.group);
    BUG_ON(pe->table_group.group);
    --
    2.4.0.rc3.8.gfb3e7d5


    \
     
     \ /
      Last update: 2015-06-05 09:01    [W:4.206 / U:0.744 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site