• Niklas Schnelle's avatar
    iommu/s390: Disable deferred flush for ISM devices · 53f8e9ad
    Niklas Schnelle authored
    ISM devices are virtual PCI devices used for cross-LPAR communication.
    Unlike real PCI devices ISM devices do not use the hardware IOMMU but
    inspects IOMMU translation tables directly on IOTLB flush (s390 RPCIT
    instruction).
    
    ISM devices keep their DMA allocations static and only very rarely DMA
    unmap at all. For each IOTLB flush that occurs after unmap the ISM
    devices will however inspect the area of the IOVA space indicated by the
    flush. This means that for the global IOTLB flushes used by the flush
    queue mechanism the entire IOVA space would be inspected. In principle
    this would be fine, albeit potentially unnecessarily slow, it turns out
    however that ISM devices are sensitive to seeing IOVA addresses that are
    currently in use in the IOVA range being flushed. Seeing such in-use
    IOVA addresses will cause the ISM device to enter an error state and
    become unusable.
    
    Fix this by claiming IOMMU_CAP_DEFERRED_FLUSH only for non-ISM devices.
    This makes sure IOTLB flushes only cover IOVAs that have been unmapped
    and also restricts the range of the IOTLB flush potentially reducing
    latency spikes.
    Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Reviewed-by: default avatarMatthew Rosato <mjrosato@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230928-dma_iommu-v13-4-9e5fc4dacc36@linux.ibm.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    53f8e9ad
s390-iommu.c 18.8 KB