• Nadav Amit's avatar
    iommu/amd: Page-specific invalidations for more than one page · 268aa454
    Nadav Amit authored
    Currently, IOMMU invalidations and device-IOTLB invalidations using
    AMD IOMMU fall back to full address-space invalidation if more than a
    single page need to be flushed.
    
    Full flushes are especially inefficient when the IOMMU is virtualized by
    a hypervisor, since it requires the hypervisor to synchronize the entire
    address-space.
    
    AMD IOMMUs allow to provide a mask to perform page-specific
    invalidations for multiple pages that match the address. The mask is
    encoded as part of the address, and the first zero bit in the address
    (in bits [51:12]) indicates the mask size.
    
    Use this hardware feature to perform selective IOMMU and IOTLB flushes.
    Combine the logic between both for better code reuse.
    
    The IOMMU invalidations passed a smoke-test. The device IOTLB
    invalidations are untested.
    
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: Jiajun Cao <caojiajun@vmware.com>
    Cc: iommu@lists.linux-foundation.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Link: https://lore.kernel.org/r/20210323210619.513069-1-namit@vmware.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    268aa454
iommu.c 83.2 KB