• Nadav Amit's avatar
    iommu/amd: Use only natural aligned flushes in a VM · a270be1b
    Nadav Amit authored
    When running on an AMD vIOMMU, it is better to avoid TLB flushes
    of unmodified PTEs. vIOMMUs require the hypervisor to synchronize the
    virtualized IOMMU's PTEs with the physical ones. This process induce
    overheads.
    
    AMD IOMMU allows us to flush any range that is aligned to the power of
    2. So when running on top of a vIOMMU, break the range into sub-ranges
    that are naturally aligned, and flush each one separately. This apporach
    is better when running with a vIOMMU, but on physical IOMMUs, the
    penalty of IOTLB misses due to unnecessary flushed entries is likely to
    be low.
    
    Repurpose (i.e., keeping the name, changing the logic)
    domain_flush_pages() so it is used to choose whether to perform one
    flush of the whole range or multiple ones to avoid flushing unnecessary
    ranges. Use NpCache, as usual, to infer whether the IOMMU is physical or
    virtual.
    
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: Jiajun Cao <caojiajun@vmware.com>
    Cc: Lu Baolu <baolu.lu@linux.intel.com>
    Cc: iommu@lists.linux-foundation.org
    Cc: linux-kernel@vger.kernel.org
    Suggested-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Link: https://lore.kernel.org/r/20210723093209.714328-8-namit@vmware.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    a270be1b
iommu.c 85.4 KB