Pull dma-mapping fixes from Christoph Hellwig: "Fix various regressions: - force unencrypted dma-coherent buffers if encryption bit can't fit into the dma coherent mask (Tom Lendacky) - avoid limiting request size if swiotlb is not used (me) - fix swiotlb handling in dma_direct_sync_sg_for_cpu/device (Fugang Duan)" * tag 'dma-mapping-5.3-1' of git://git.infradead.org/users/hch/dma-mapping: dma-direct: correct the physical addr in dma_direct_sync_sg_for_cpu/device dma-direct: only limit the mapping size if swiotlb could be used dma-mapping: add a dma_addressing_limited helper dma-direct: Force unencrypted DMA under SME for certain DMA masks
Showing the changes to include/linux (2 of 8 files). Show all
Unified · Split
| @@ -32,6 +32,15 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) · 31 unmodified lines | |||
| 32 | } | 32 | } |
| 33 | #endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */ | 33 | #endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */ |
| 34 | 34 | ||
| 35 | #ifdef CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED | ||
| 36 | bool force_dma_unencrypted(struct device *dev); | ||
| 37 | #else | ||
| 38 | static inline bool force_dma_unencrypted(struct device *dev) | ||
| 39 | { | ||
| 40 | return false; | ||
| 41 | } | ||
| 42 | #endif /* CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED */ | ||
| 43 | |||
| 35 | /* | 44 | /* |
| 36 | * If memory encryption is supported, phys_to_dma will set the memory encryption | 45 | * If memory encryption is supported, phys_to_dma will set the memory encryption |
| 37 | * bit in the DMA address, and dma_to_phys will clear it. The raw __phys_to_dma | 46 | * bit in the DMA address, and dma_to_phys will clear it. The raw __phys_to_dma |
| @@ -679,6 +679,20 @@ static inline int dma_coerce_mask_and_coherent(struct device *dev, u64 mask) · 678 unmodified lines | |||
| 679 | return dma_set_mask_and_coherent(dev, mask); | 679 | return dma_set_mask_and_coherent(dev, mask); |
| 680 | } | 680 | } |
| 681 | 681 | ||
| 682 | /** | ||
| 683 | * dma_addressing_limited - return if the device is addressing limited | ||
| 684 | * @dev: device to check | ||
| 685 | * | ||
| 686 | * Return %true if the devices DMA mask is too small to address all memory in | ||
| 687 | * the system, else %false. Lack of addressing bits is the prime reason for | ||
| 688 | * bounce buffering, but might not be the only one. | ||
| 689 | */ | ||
| 690 | static inline bool dma_addressing_limited(struct device *dev) | ||
| 691 | { | ||
| 692 | return min_not_zero(*dev->dma_mask, dev->bus_dma_mask) < | ||
| 693 | dma_get_required_mask(dev); | ||
| 694 | } | ||
| 695 | |||
| 682 | #ifdef CONFIG_ARCH_HAS_SETUP_DMA_OPS | 696 | #ifdef CONFIG_ARCH_HAS_SETUP_DMA_OPS |
| 683 | void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, | 697 | void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, |
| 684 | const struct iommu_ops *iommu, bool coherent); | 698 | const struct iommu_ops *iommu, bool coherent); |