• Robin Murphy's avatar
    thunderbolt: Make iommu_dma_protection more accurate · 86eaf4a5
    Robin Murphy authored
    Between me trying to get rid of iommu_present() and Mario wanting to
    support the AMD equivalent of DMAR_PLATFORM_OPT_IN, scrutiny has shown
    that the iommu_dma_protection attribute is being far too optimistic.
    Even if an IOMMU might be present for some PCI segment in the system,
    that doesn't necessarily mean it provides translation for the device(s)
    we care about. Furthermore, all that DMAR_PLATFORM_OPT_IN really does
    is tell us that memory was protected before the kernel was loaded, and
    prevent the user from disabling the intel-iommu driver entirely. While
    that lets us assume kernel integrity, what matters for actual runtime
    DMA protection is whether we trust individual devices, based on the
    "external facing" property that we expect firmware to describe for
    Thunderbolt ports.
    
    It's proven challenging to determine the appropriate ports accurately
    given the variety of possible topologies, so while still not getting a
    perfect answer, by putting enough faith in firmware we can at least get
    a good bit closer. If we can see that any device near a Thunderbolt NHI
    has all the requisites for Kernel DMA Protection, chances are that it
    *is* a relevant port, but moreover that implies that firmware is playing
    the game overall, so we'll use that to assume that all Thunderbolt ports
    should be correctly marked and thus will end up fully protected.
    
    CC: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Link: https://lore.kernel.org/r/b153f208bc9eafab5105bad0358b77366509d2d4.1650878781.git.robin.murphy@arm.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    86eaf4a5
nhi.c 36.2 KB