• Robin Murphy's avatar
    iommu/io-pgtable: Introduce explicit coherency · 81b3c252
    Robin Murphy authored
    Once we remove the serialising spinlock, a potential race opens up for
    non-coherent IOMMUs whereby a caller of .map() can be sure that cache
    maintenance has been performed on their new PTE, but will have no
    guarantee that such maintenance for table entries above it has actually
    completed (e.g. if another CPU took an interrupt immediately after
    writing the table entry, but before initiating the DMA sync).
    
    Handling this race safely will add some potentially non-trivial overhead
    to installing a table entry, which we would much rather avoid on
    coherent systems where it will be unnecessary, and where we are stirivng
    to minimise latency by removing the locking in the first place.
    
    To that end, let's introduce an explicit notion of cache-coherency to
    io-pgtable, such that we will be able to avoid penalising IOMMUs which
    know enough to know when they are coherent.
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    81b3c252
io-pgtable.h 6.89 KB