• Alexey Kardashevskiy's avatar
    powerpc/iommu: Fix IOMMU ownership control functions · b82c75bf
    Alexey Kardashevskiy authored
    This adds missing locks in iommu_take_ownership()/
    iommu_release_ownership().
    
    This marks all pages busy in iommu_table::it_map in order to catch
    errors if there is an attempt to use this table while ownership over it
    is taken.
    
    This only clears TCE content if there is no page marked busy in it_map.
    Clearing must be done outside of the table locks as iommu_clear_tce()
    called from iommu_clear_tces_and_put_pages() does this.
    
    In order to use bitmap_empty(), the existing code clears bit#0 which
    is set even in an empty table if it is bus-mapped at 0 as
    iommu_init_table() reserves page#0 to prevent buggy drivers
    from crashing when allocated page is bus-mapped at zero
    (which is correct). This restores the bit in the case of failure
    to bring the it_map to the state it was in when we called
    iommu_take_ownership().
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    b82c75bf
iommu.c 29.6 KB