If we look at the list of places where IOMMU_CAP_CACHE_COHERENCY is set: drivers/iommu/intel/iommu.c Must have IOMMU_CACHE set/clear to control no-snoop blocking drivers/iommu/amd/iommu.c Always sets its no-snoop block, inconsistent with Intel drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c drivers/iommu/arm/arm-smmu/arm-smmu.c drivers/iommu/arm/arm-smmu/qcom_iommu.c Must have IOMMU_CACHE set, ARM arch has no kvm_arch_register_noncoherent_dma() From what I could tell in the manuals and the prior discussion SMMU doesn't block no-snoop. ie ARM lies about IOMMU_CAP_CACHE_COHERENCY because it needs IOMM_CACHE set to work. drivers/iommu/fsl_pamu_domain.c drivers/iommu/s390-iommu.c Ignore IOMM_CACHE, arch has no kvm_arch_register_noncoherent_dma() No idea if the HW blocks no-snoop or not, but it doesn't matter. So other than AMD, it is OK to change the sense and makes it clearer for future driver authors what they are expected to do with this. Thanks, Jason