Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'x86-dma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 dma mapping updates from Ingo Molnar:
"This tree, by Christoph Hellwig, switches over the x86 architecture to
the generic dma-direct and swiotlb code, and also unifies more of the
dma-direct code between architectures. The now unused x86-only
primitives are removed"

* 'x86-dma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
dma-mapping: Don't clear GFP_ZERO in dma_alloc_attrs
swiotlb: Make swiotlb_{alloc,free}_buffer depend on CONFIG_DMA_DIRECT_OPS
dma/swiotlb: Remove swiotlb_{alloc,free}_coherent()
dma/direct: Handle force decryption for DMA coherent buffers in common code
dma/direct: Handle the memory encryption bit in common code
dma/swiotlb: Remove swiotlb_set_mem_attributes()
set_memory.h: Provide set_memory_{en,de}crypted() stubs
x86/dma: Remove dma_alloc_coherent_gfp_flags()
iommu/intel-iommu: Enable CONFIG_DMA_DIRECT_OPS=y and clean up intel_{alloc,free}_coherent()
iommu/amd_iommu: Use CONFIG_DMA_DIRECT_OPS=y and dma_direct_{alloc,free}()
x86/dma/amd_gart: Use dma_direct_{alloc,free}()
x86/dma/amd_gart: Look at dev->coherent_dma_mask instead of GFP_DMA
x86/dma: Use generic swiotlb_ops
x86/dma: Use DMA-direct (CONFIG_DMA_DIRECT_OPS=y)
x86/dma: Remove dma_alloc_coherent_mask()

+181 -557
+2 -2
arch/arm/include/asm/dma-direct.h
··· 2 2 #ifndef ASM_ARM_DMA_DIRECT_H 3 3 #define ASM_ARM_DMA_DIRECT_H 1 4 4 5 - static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 5 + static inline dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 6 6 { 7 7 unsigned int offset = paddr & ~PAGE_MASK; 8 8 return pfn_to_dma(dev, __phys_to_pfn(paddr)) + offset; 9 9 } 10 10 11 - static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t dev_addr) 11 + static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dev_addr) 12 12 { 13 13 unsigned int offset = dev_addr & ~PAGE_MASK; 14 14 return __pfn_to_phys(dma_to_pfn(dev, dev_addr)) + offset;
+5 -5
arch/mips/cavium-octeon/dma-octeon.c
··· 10 10 * IP32 changes by Ilya. 11 11 * Copyright (C) 2010 Cavium Networks, Inc. 12 12 */ 13 - #include <linux/dma-mapping.h> 13 + #include <linux/dma-direct.h> 14 14 #include <linux/scatterlist.h> 15 15 #include <linux/bootmem.h> 16 16 #include <linux/export.h> ··· 182 182 phys_addr_t (*dma_to_phys)(struct device *dev, dma_addr_t daddr); 183 183 }; 184 184 185 - dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 185 + dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 186 186 { 187 187 struct octeon_dma_map_ops *ops = container_of(get_dma_ops(dev), 188 188 struct octeon_dma_map_ops, ··· 190 190 191 191 return ops->phys_to_dma(dev, paddr); 192 192 } 193 - EXPORT_SYMBOL(phys_to_dma); 193 + EXPORT_SYMBOL(__phys_to_dma); 194 194 195 - phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 195 + phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr) 196 196 { 197 197 struct octeon_dma_map_ops *ops = container_of(get_dma_ops(dev), 198 198 struct octeon_dma_map_ops, ··· 200 200 201 201 return ops->dma_to_phys(dev, daddr); 202 202 } 203 - EXPORT_SYMBOL(dma_to_phys); 203 + EXPORT_SYMBOL(__dma_to_phys); 204 204 205 205 static struct octeon_dma_map_ops octeon_linear_dma_map_ops = { 206 206 .dma_map_ops = {
+2 -2
arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
··· 69 69 return addr + size - 1 <= *dev->dma_mask; 70 70 } 71 71 72 - dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr); 73 - phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr); 72 + dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr); 73 + phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr); 74 74 75 75 struct dma_map_ops; 76 76 extern const struct dma_map_ops *octeon_pci_dma_map_ops;
+5 -5
arch/mips/include/asm/mach-loongson64/dma-coherence.h
··· 25 25 return addr + size - 1 <= *dev->dma_mask; 26 26 } 27 27 28 - extern dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr); 29 - extern phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr); 28 + extern dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr); 29 + extern phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr); 30 30 static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr, 31 31 size_t size) 32 32 { 33 33 #ifdef CONFIG_CPU_LOONGSON3 34 - return phys_to_dma(dev, virt_to_phys(addr)); 34 + return __phys_to_dma(dev, virt_to_phys(addr)); 35 35 #else 36 36 return virt_to_phys(addr) | 0x80000000; 37 37 #endif ··· 41 41 struct page *page) 42 42 { 43 43 #ifdef CONFIG_CPU_LOONGSON3 44 - return phys_to_dma(dev, page_to_phys(page)); 44 + return __phys_to_dma(dev, page_to_phys(page)); 45 45 #else 46 46 return page_to_phys(page) | 0x80000000; 47 47 #endif ··· 51 51 dma_addr_t dma_addr) 52 52 { 53 53 #if defined(CONFIG_CPU_LOONGSON3) && defined(CONFIG_64BIT) 54 - return dma_to_phys(dev, dma_addr); 54 + return __dma_to_phys(dev, dma_addr); 55 55 #elif defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT) 56 56 return (dma_addr > 0x8fffffff) ? dma_addr : (dma_addr & 0x0fffffff); 57 57 #else
+2 -2
arch/mips/loongson64/common/dma-swiotlb.c
··· 63 63 return swiotlb_dma_supported(dev, mask); 64 64 } 65 65 66 - dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 66 + dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 67 67 { 68 68 long nid; 69 69 #ifdef CONFIG_PHYS48_TO_HT40 ··· 75 75 return paddr; 76 76 } 77 77 78 - phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 78 + phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr) 79 79 { 80 80 long nid; 81 81 #ifdef CONFIG_PHYS48_TO_HT40
+2 -2
arch/powerpc/include/asm/dma-direct.h
··· 17 17 return addr + size - 1 <= *dev->dma_mask; 18 18 } 19 19 20 - static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 20 + static inline dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 21 21 { 22 22 return paddr + get_dma_offset(dev); 23 23 } 24 24 25 - static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 25 + static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr) 26 26 { 27 27 return daddr - get_dma_offset(dev); 28 28 }
+2 -1
arch/x86/Kconfig
··· 54 54 select ARCH_HAS_FORTIFY_SOURCE 55 55 select ARCH_HAS_GCOV_PROFILE_ALL 56 56 select ARCH_HAS_KCOV if X86_64 57 - select ARCH_HAS_PHYS_TO_DMA 58 57 select ARCH_HAS_MEMBARRIER_SYNC_CORE 59 58 select ARCH_HAS_PMEM_API if X86_64 60 59 select ARCH_HAS_REFCOUNT ··· 82 83 select CLOCKSOURCE_VALIDATE_LAST_CYCLE 83 84 select CLOCKSOURCE_WATCHDOG 84 85 select DCACHE_WORD_ACCESS 86 + select DMA_DIRECT_OPS 85 87 select EDAC_ATOMIC_SCRUB 86 88 select EDAC_SUPPORT 87 89 select GENERIC_CLOCKEVENTS ··· 680 680 config STA2X11 681 681 bool "STA2X11 Companion Chip Support" 682 682 depends on X86_32_NON_STANDARD && PCI 683 + select ARCH_HAS_PHYS_TO_DMA 683 684 select X86_DEV_DMA_OPS 684 685 select X86_DMA_REMAP 685 686 select SWIOTLB
+3
arch/x86/include/asm/device.h
··· 6 6 #if defined(CONFIG_INTEL_IOMMU) || defined(CONFIG_AMD_IOMMU) 7 7 void *iommu; /* hook for IOMMU specific extension */ 8 8 #endif 9 + #ifdef CONFIG_STA2X11 10 + bool is_sta2x11; 11 + #endif 9 12 }; 10 13 11 14 #if defined(CONFIG_X86_DEV_DMA_OPS) && defined(CONFIG_PCI_DOMAINS)
+2 -23
arch/x86/include/asm/dma-direct.h
··· 2 2 #ifndef ASM_X86_DMA_DIRECT_H 3 3 #define ASM_X86_DMA_DIRECT_H 1 4 4 5 - #include <linux/mem_encrypt.h> 6 - 7 - #ifdef CONFIG_X86_DMA_REMAP /* Platform code defines bridge-specific code */ 8 5 bool dma_capable(struct device *dev, dma_addr_t addr, size_t size); 9 - dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr); 10 - phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr); 11 - #else 12 - static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) 13 - { 14 - if (!dev->dma_mask) 15 - return 0; 6 + dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr); 7 + phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr); 16 8 17 - return addr + size - 1 <= *dev->dma_mask; 18 - } 19 - 20 - static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 21 - { 22 - return __sme_set(paddr); 23 - } 24 - 25 - static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 26 - { 27 - return __sme_clr(daddr); 28 - } 29 - #endif /* CONFIG_X86_DMA_REMAP */ 30 9 #endif /* ASM_X86_DMA_DIRECT_H */
-33
arch/x86/include/asm/dma-mapping.h
··· 36 36 bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); 37 37 #define arch_dma_alloc_attrs arch_dma_alloc_attrs 38 38 39 - extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, 40 - dma_addr_t *dma_addr, gfp_t flag, 41 - unsigned long attrs); 42 - 43 - extern void dma_generic_free_coherent(struct device *dev, size_t size, 44 - void *vaddr, dma_addr_t dma_addr, 45 - unsigned long attrs); 46 - 47 - static inline unsigned long dma_alloc_coherent_mask(struct device *dev, 48 - gfp_t gfp) 49 - { 50 - unsigned long dma_mask = 0; 51 - 52 - dma_mask = dev->coherent_dma_mask; 53 - if (!dma_mask) 54 - dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) : DMA_BIT_MASK(32); 55 - 56 - return dma_mask; 57 - } 58 - 59 - static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp) 60 - { 61 - unsigned long dma_mask = dma_alloc_coherent_mask(dev, gfp); 62 - 63 - if (dma_mask <= DMA_BIT_MASK(24)) 64 - gfp |= GFP_DMA; 65 - #ifdef CONFIG_X86_64 66 - if (dma_mask <= DMA_BIT_MASK(32) && !(gfp & GFP_DMA)) 67 - gfp |= GFP_DMA32; 68 - #endif 69 - return gfp; 70 - } 71 - 72 39 #endif
-3
arch/x86/include/asm/iommu.h
··· 2 2 #ifndef _ASM_X86_IOMMU_H 3 3 #define _ASM_X86_IOMMU_H 4 4 5 - extern const struct dma_map_ops nommu_dma_ops; 6 5 extern int force_iommu, no_iommu; 7 6 extern int iommu_detected; 8 7 extern int iommu_pass_through; 9 - 10 - int x86_dma_supported(struct device *dev, u64 mask); 11 8 12 9 /* 10 seconds */ 13 10 #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)
-2
arch/x86/include/asm/mem_encrypt.h
··· 49 49 /* Architecture __weak replacement functions */ 50 50 void __init mem_encrypt_init(void); 51 51 52 - void swiotlb_set_mem_attributes(void *vaddr, unsigned long size); 53 - 54 52 bool sme_active(void); 55 53 bool sev_active(void); 56 54
-8
arch/x86/include/asm/swiotlb.h
··· 27 27 { 28 28 } 29 29 #endif 30 - 31 - extern void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, 32 - dma_addr_t *dma_handle, gfp_t flags, 33 - unsigned long attrs); 34 - extern void x86_swiotlb_free_coherent(struct device *dev, size_t size, 35 - void *vaddr, dma_addr_t dma_addr, 36 - unsigned long attrs); 37 - 38 30 #endif /* _ASM_X86_SWIOTLB_H */
+1 -1
arch/x86/kernel/Makefile
··· 57 57 obj-$(CONFIG_SYSFS) += ksysfs.o 58 58 obj-y += bootflag.o e820.o 59 59 obj-y += pci-dma.o quirks.o topology.o kdebugfs.o 60 - obj-y += alternative.o i8253.o pci-nommu.o hw_breakpoint.o 60 + obj-y += alternative.o i8253.o hw_breakpoint.o 61 61 obj-y += tsc.o tsc_msr.o io_delay.o rtc.o 62 62 obj-y += pci-iommu_table.o 63 63 obj-y += resource.o
+15 -24
arch/x86/kernel/amd_gart_64.c
··· 480 480 gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, 481 481 gfp_t flag, unsigned long attrs) 482 482 { 483 - dma_addr_t paddr; 484 - unsigned long align_mask; 485 - struct page *page; 483 + void *vaddr; 486 484 487 - if (force_iommu && !(flag & GFP_DMA)) { 488 - flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); 489 - page = alloc_pages(flag | __GFP_ZERO, get_order(size)); 490 - if (!page) 491 - return NULL; 485 + vaddr = dma_direct_alloc(dev, size, dma_addr, flag, attrs); 486 + if (!vaddr || 487 + !force_iommu || dev->coherent_dma_mask <= DMA_BIT_MASK(24)) 488 + return vaddr; 492 489 493 - align_mask = (1UL << get_order(size)) - 1; 494 - paddr = dma_map_area(dev, page_to_phys(page), size, 495 - DMA_BIDIRECTIONAL, align_mask); 496 - 497 - flush_gart(); 498 - if (paddr != bad_dma_addr) { 499 - *dma_addr = paddr; 500 - return page_address(page); 501 - } 502 - __free_pages(page, get_order(size)); 503 - } else 504 - return dma_generic_alloc_coherent(dev, size, dma_addr, flag, 505 - attrs); 506 - 490 + *dma_addr = dma_map_area(dev, virt_to_phys(vaddr), size, 491 + DMA_BIDIRECTIONAL, (1UL << get_order(size)) - 1); 492 + flush_gart(); 493 + if (unlikely(*dma_addr == bad_dma_addr)) 494 + goto out_free; 495 + return vaddr; 496 + out_free: 497 + dma_direct_free(dev, size, vaddr, *dma_addr, attrs); 507 498 return NULL; 508 499 } 509 500 ··· 504 513 dma_addr_t dma_addr, unsigned long attrs) 505 514 { 506 515 gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, 0); 507 - dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); 516 + dma_direct_free(dev, size, vaddr, dma_addr, attrs); 508 517 } 509 518 510 519 static int gart_mapping_error(struct device *dev, dma_addr_t dma_addr) ··· 696 705 .alloc = gart_alloc_coherent, 697 706 .free = gart_free_coherent, 698 707 .mapping_error = gart_mapping_error, 699 - .dma_supported = x86_dma_supported, 708 + .dma_supported = dma_direct_supported, 700 709 }; 701 710 702 711 static void gart_iommu_shutdown(void)
+2 -3
arch/x86/kernel/pci-calgary_64.c
··· 33 33 #include <linux/string.h> 34 34 #include <linux/crash_dump.h> 35 35 #include <linux/dma-mapping.h> 36 + #include <linux/dma-direct.h> 36 37 #include <linux/bitmap.h> 37 38 #include <linux/pci_ids.h> 38 39 #include <linux/pci.h> ··· 446 445 npages = size >> PAGE_SHIFT; 447 446 order = get_order(size); 448 447 449 - flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); 450 - 451 448 /* alloc enough pages (and possibly more) */ 452 449 ret = (void *)__get_free_pages(flag, order); 453 450 if (!ret) ··· 492 493 .map_page = calgary_map_page, 493 494 .unmap_page = calgary_unmap_page, 494 495 .mapping_error = calgary_mapping_error, 495 - .dma_supported = x86_dma_supported, 496 + .dma_supported = dma_direct_supported, 496 497 }; 497 498 498 499 static inline void __iomem * busno_to_bbar(unsigned char num)
+1 -69
arch/x86/kernel/pci-dma.c
··· 18 18 19 19 static int forbid_dac __read_mostly; 20 20 21 - const struct dma_map_ops *dma_ops = &nommu_dma_ops; 21 + const struct dma_map_ops *dma_ops = &dma_direct_ops; 22 22 EXPORT_SYMBOL(dma_ops); 23 23 24 24 static int iommu_sac_force __read_mostly; ··· 76 76 } 77 77 } 78 78 } 79 - void *dma_generic_alloc_coherent(struct device *dev, size_t size, 80 - dma_addr_t *dma_addr, gfp_t flag, 81 - unsigned long attrs) 82 - { 83 - unsigned long dma_mask; 84 - struct page *page; 85 - unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; 86 - dma_addr_t addr; 87 - 88 - dma_mask = dma_alloc_coherent_mask(dev, flag); 89 - 90 - again: 91 - page = NULL; 92 - /* CMA can be used only in the context which permits sleeping */ 93 - if (gfpflags_allow_blocking(flag)) { 94 - page = dma_alloc_from_contiguous(dev, count, get_order(size), 95 - flag); 96 - if (page) { 97 - addr = phys_to_dma(dev, page_to_phys(page)); 98 - if (addr + size > dma_mask) { 99 - dma_release_from_contiguous(dev, page, count); 100 - page = NULL; 101 - } 102 - } 103 - } 104 - /* fallback */ 105 - if (!page) 106 - page = alloc_pages_node(dev_to_node(dev), flag, get_order(size)); 107 - if (!page) 108 - return NULL; 109 - 110 - addr = phys_to_dma(dev, page_to_phys(page)); 111 - if (addr + size > dma_mask) { 112 - __free_pages(page, get_order(size)); 113 - 114 - if (dma_mask < DMA_BIT_MASK(32) && !(flag & GFP_DMA)) { 115 - flag = (flag & ~GFP_DMA32) | GFP_DMA; 116 - goto again; 117 - } 118 - 119 - return NULL; 120 - } 121 - memset(page_address(page), 0, size); 122 - *dma_addr = addr; 123 - return page_address(page); 124 - } 125 - 126 - void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr, 127 - dma_addr_t dma_addr, unsigned long attrs) 128 - { 129 - unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; 130 - struct page *page = virt_to_page(vaddr); 131 - 132 - if (!dma_release_from_contiguous(dev, page, count)) 133 - free_pages((unsigned long)vaddr, get_order(size)); 134 - } 135 79 136 80 bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp) 137 81 { 138 82 if (!*dev) 139 83 *dev = &x86_dma_fallback_dev; 140 - 141 - *gfp = dma_alloc_coherent_gfp_flags(*dev, *gfp); 142 84 143 85 if (!is_device_dma_capable(*dev)) 144 86 return false; ··· 186 244 return 1; 187 245 } 188 246 EXPORT_SYMBOL(arch_dma_supported); 189 - 190 - int x86_dma_supported(struct device *dev, u64 mask) 191 - { 192 - /* Copied from i386. Doesn't make much sense, because it will 193 - only work for pci_alloc_coherent. 194 - The caller just has to use GFP_DMA in this case. */ 195 - if (mask < DMA_BIT_MASK(24)) 196 - return 0; 197 - return 1; 198 - } 199 247 200 248 static int __init pci_iommu_init(void) 201 249 {
+1 -47
arch/x86/kernel/pci-swiotlb.c
··· 17 17 18 18 int swiotlb __read_mostly; 19 19 20 - void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, 21 - dma_addr_t *dma_handle, gfp_t flags, 22 - unsigned long attrs) 23 - { 24 - void *vaddr; 25 - 26 - /* 27 - * Don't print a warning when the first allocation attempt fails. 28 - * swiotlb_alloc_coherent() will print a warning when the DMA 29 - * memory allocation ultimately failed. 30 - */ 31 - flags |= __GFP_NOWARN; 32 - 33 - vaddr = dma_generic_alloc_coherent(hwdev, size, dma_handle, flags, 34 - attrs); 35 - if (vaddr) 36 - return vaddr; 37 - 38 - return swiotlb_alloc_coherent(hwdev, size, dma_handle, flags); 39 - } 40 - 41 - void x86_swiotlb_free_coherent(struct device *dev, size_t size, 42 - void *vaddr, dma_addr_t dma_addr, 43 - unsigned long attrs) 44 - { 45 - if (is_swiotlb_buffer(dma_to_phys(dev, dma_addr))) 46 - swiotlb_free_coherent(dev, size, vaddr, dma_addr); 47 - else 48 - dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); 49 - } 50 - 51 - static const struct dma_map_ops x86_swiotlb_dma_ops = { 52 - .mapping_error = swiotlb_dma_mapping_error, 53 - .alloc = x86_swiotlb_alloc_coherent, 54 - .free = x86_swiotlb_free_coherent, 55 - .sync_single_for_cpu = swiotlb_sync_single_for_cpu, 56 - .sync_single_for_device = swiotlb_sync_single_for_device, 57 - .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 58 - .sync_sg_for_device = swiotlb_sync_sg_for_device, 59 - .map_sg = swiotlb_map_sg_attrs, 60 - .unmap_sg = swiotlb_unmap_sg_attrs, 61 - .map_page = swiotlb_map_page, 62 - .unmap_page = swiotlb_unmap_page, 63 - .dma_supported = NULL, 64 - }; 65 - 66 20 /* 67 21 * pci_swiotlb_detect_override - set swiotlb to 1 if necessary 68 22 * ··· 66 112 { 67 113 if (swiotlb) { 68 114 swiotlb_init(0); 69 - dma_ops = &x86_swiotlb_dma_ops; 115 + dma_ops = &swiotlb_dma_ops; 70 116 } 71 117 } 72 118
+3 -87
arch/x86/mm/mem_encrypt.c
··· 195 195 swiotlb_force = SWIOTLB_FORCE; 196 196 } 197 197 198 - static void *sev_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, 199 - gfp_t gfp, unsigned long attrs) 200 - { 201 - unsigned long dma_mask; 202 - unsigned int order; 203 - struct page *page; 204 - void *vaddr = NULL; 205 - 206 - dma_mask = dma_alloc_coherent_mask(dev, gfp); 207 - order = get_order(size); 208 - 209 - /* 210 - * Memory will be memset to zero after marking decrypted, so don't 211 - * bother clearing it before. 212 - */ 213 - gfp &= ~__GFP_ZERO; 214 - 215 - page = alloc_pages_node(dev_to_node(dev), gfp, order); 216 - if (page) { 217 - dma_addr_t addr; 218 - 219 - /* 220 - * Since we will be clearing the encryption bit, check the 221 - * mask with it already cleared. 222 - */ 223 - addr = __sme_clr(phys_to_dma(dev, page_to_phys(page))); 224 - if ((addr + size) > dma_mask) { 225 - __free_pages(page, get_order(size)); 226 - } else { 227 - vaddr = page_address(page); 228 - *dma_handle = addr; 229 - } 230 - } 231 - 232 - if (!vaddr) 233 - vaddr = swiotlb_alloc_coherent(dev, size, dma_handle, gfp); 234 - 235 - if (!vaddr) 236 - return NULL; 237 - 238 - /* Clear the SME encryption bit for DMA use if not swiotlb area */ 239 - if (!is_swiotlb_buffer(dma_to_phys(dev, *dma_handle))) { 240 - set_memory_decrypted((unsigned long)vaddr, 1 << order); 241 - memset(vaddr, 0, PAGE_SIZE << order); 242 - *dma_handle = __sme_clr(*dma_handle); 243 - } 244 - 245 - return vaddr; 246 - } 247 - 248 - static void sev_free(struct device *dev, size_t size, void *vaddr, 249 - dma_addr_t dma_handle, unsigned long attrs) 250 - { 251 - /* Set the SME encryption bit for re-use if not swiotlb area */ 252 - if (!is_swiotlb_buffer(dma_to_phys(dev, dma_handle))) 253 - set_memory_encrypted((unsigned long)vaddr, 254 - 1 << get_order(size)); 255 - 256 - swiotlb_free_coherent(dev, size, vaddr, dma_handle); 257 - } 258 - 259 198 static void __init __set_clr_pte_enc(pte_t *kpte, int level, bool enc) 260 199 { 261 200 pgprot_t old_prot, new_prot; ··· 347 408 } 348 409 EXPORT_SYMBOL(sev_active); 349 410 350 - static const struct dma_map_ops sev_dma_ops = { 351 - .alloc = sev_alloc, 352 - .free = sev_free, 353 - .map_page = swiotlb_map_page, 354 - .unmap_page = swiotlb_unmap_page, 355 - .map_sg = swiotlb_map_sg_attrs, 356 - .unmap_sg = swiotlb_unmap_sg_attrs, 357 - .sync_single_for_cpu = swiotlb_sync_single_for_cpu, 358 - .sync_single_for_device = swiotlb_sync_single_for_device, 359 - .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 360 - .sync_sg_for_device = swiotlb_sync_sg_for_device, 361 - .mapping_error = swiotlb_dma_mapping_error, 362 - }; 363 - 364 411 /* Architecture __weak replacement functions */ 365 412 void __init mem_encrypt_init(void) 366 413 { ··· 357 432 swiotlb_update_mem_attributes(); 358 433 359 434 /* 360 - * With SEV, DMA operations cannot use encryption. New DMA ops 361 - * are required in order to mark the DMA areas as decrypted or 362 - * to use bounce buffers. 435 + * With SEV, DMA operations cannot use encryption, we need to use 436 + * SWIOTLB to bounce buffer DMA operation. 363 437 */ 364 438 if (sev_active()) 365 - dma_ops = &sev_dma_ops; 439 + dma_ops = &swiotlb_dma_ops; 366 440 367 441 /* 368 442 * With SEV, we need to unroll the rep string I/O instructions. ··· 374 450 : "Secure Memory Encryption (SME)"); 375 451 } 376 452 377 - void swiotlb_set_mem_attributes(void *vaddr, unsigned long size) 378 - { 379 - WARN(PAGE_ALIGN(size) != size, 380 - "size is not page-aligned (%#lx)\n", size); 381 - 382 - /* Make the SWIOTLB buffer area decrypted */ 383 - set_memory_decrypted((unsigned long)vaddr, size >> PAGE_SHIFT); 384 - }
+8 -44
arch/x86/pci/sta2x11-fixup.c
··· 159 159 return p; 160 160 } 161 161 162 - /** 163 - * sta2x11_swiotlb_alloc_coherent - Allocate swiotlb bounce buffers 164 - * returns virtual address. This is the only "special" function here. 165 - * @dev: PCI device 166 - * @size: Size of the buffer 167 - * @dma_handle: DMA address 168 - * @flags: memory flags 169 - */ 170 - static void *sta2x11_swiotlb_alloc_coherent(struct device *dev, 171 - size_t size, 172 - dma_addr_t *dma_handle, 173 - gfp_t flags, 174 - unsigned long attrs) 175 - { 176 - void *vaddr; 177 - 178 - vaddr = x86_swiotlb_alloc_coherent(dev, size, dma_handle, flags, attrs); 179 - *dma_handle = p2a(*dma_handle, to_pci_dev(dev)); 180 - return vaddr; 181 - } 182 - 183 - /* We have our own dma_ops: the same as swiotlb but from alloc (above) */ 184 - static const struct dma_map_ops sta2x11_dma_ops = { 185 - .alloc = sta2x11_swiotlb_alloc_coherent, 186 - .free = x86_swiotlb_free_coherent, 187 - .map_page = swiotlb_map_page, 188 - .unmap_page = swiotlb_unmap_page, 189 - .map_sg = swiotlb_map_sg_attrs, 190 - .unmap_sg = swiotlb_unmap_sg_attrs, 191 - .sync_single_for_cpu = swiotlb_sync_single_for_cpu, 192 - .sync_single_for_device = swiotlb_sync_single_for_device, 193 - .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 194 - .sync_sg_for_device = swiotlb_sync_sg_for_device, 195 - .mapping_error = swiotlb_dma_mapping_error, 196 - .dma_supported = x86_dma_supported, 197 - }; 198 - 199 162 /* At setup time, we use our own ops if the device is a ConneXt one */ 200 163 static void sta2x11_setup_pdev(struct pci_dev *pdev) 201 164 { ··· 168 205 return; 169 206 pci_set_consistent_dma_mask(pdev, STA2X11_AMBA_SIZE - 1); 170 207 pci_set_dma_mask(pdev, STA2X11_AMBA_SIZE - 1); 171 - pdev->dev.dma_ops = &sta2x11_dma_ops; 208 + pdev->dev.dma_ops = &swiotlb_dma_ops; 209 + pdev->dev.archdata.is_sta2x11 = true; 172 210 173 211 /* We must enable all devices as master, for audio DMA to work */ 174 212 pci_set_master(pdev); ··· 189 225 { 190 226 struct sta2x11_mapping *map; 191 227 192 - if (dev->dma_ops != &sta2x11_dma_ops) { 228 + if (!dev->archdata.is_sta2x11) { 193 229 if (!dev->dma_mask) 194 230 return false; 195 231 return addr + size - 1 <= *dev->dma_mask; ··· 207 243 } 208 244 209 245 /** 210 - * phys_to_dma - Return the DMA AMBA address used for this STA2x11 device 246 + * __phys_to_dma - Return the DMA AMBA address used for this STA2x11 device 211 247 * @dev: device for a PCI device 212 248 * @paddr: Physical address 213 249 */ 214 - dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 250 + dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 215 251 { 216 - if (dev->dma_ops != &sta2x11_dma_ops) 252 + if (!dev->archdata.is_sta2x11) 217 253 return paddr; 218 254 return p2a(paddr, to_pci_dev(dev)); 219 255 } ··· 223 259 * @dev: device for a PCI device 224 260 * @daddr: STA2x11 AMBA DMA address 225 261 */ 226 - phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 262 + phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr) 227 263 { 228 - if (dev->dma_ops != &sta2x11_dma_ops) 264 + if (!dev->archdata.is_sta2x11) 229 265 return daddr; 230 266 return a2p(daddr, to_pci_dev(dev)); 231 267 }
+2
drivers/iommu/Kconfig
··· 107 107 # AMD IOMMU support 108 108 config AMD_IOMMU 109 109 bool "AMD IOMMU support" 110 + select DMA_DIRECT_OPS 110 111 select SWIOTLB 111 112 select PCI_MSI 112 113 select PCI_ATS ··· 143 142 config INTEL_IOMMU 144 143 bool "Support for Intel IOMMU using DMA Remapping Devices" 145 144 depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC) 145 + select DMA_DIRECT_OPS 146 146 select IOMMU_API 147 147 select IOMMU_IOVA 148 148 select DMAR_TABLE
+25 -50
drivers/iommu/amd_iommu.c
··· 28 28 #include <linux/debugfs.h> 29 29 #include <linux/scatterlist.h> 30 30 #include <linux/dma-mapping.h> 31 + #include <linux/dma-direct.h> 31 32 #include <linux/iommu-helper.h> 32 33 #include <linux/iommu.h> 33 34 #include <linux/delay.h> ··· 2194 2193 dev_name(dev)); 2195 2194 2196 2195 iommu_ignore_device(dev); 2197 - dev->dma_ops = &nommu_dma_ops; 2196 + dev->dma_ops = &dma_direct_ops; 2198 2197 goto out; 2199 2198 } 2200 2199 init_iommu_group(dev); ··· 2600 2599 unsigned long attrs) 2601 2600 { 2602 2601 u64 dma_mask = dev->coherent_dma_mask; 2603 - struct protection_domain *domain; 2604 - struct dma_ops_domain *dma_dom; 2605 - struct page *page; 2602 + struct protection_domain *domain = get_domain(dev); 2603 + bool is_direct = false; 2604 + void *virt_addr; 2606 2605 2607 - domain = get_domain(dev); 2608 - if (PTR_ERR(domain) == -EINVAL) { 2609 - page = alloc_pages(flag, get_order(size)); 2610 - *dma_addr = page_to_phys(page); 2611 - return page_address(page); 2612 - } else if (IS_ERR(domain)) 2613 - return NULL; 2614 - 2615 - dma_dom = to_dma_ops_domain(domain); 2616 - size = PAGE_ALIGN(size); 2617 - dma_mask = dev->coherent_dma_mask; 2618 - flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); 2619 - flag |= __GFP_ZERO; 2620 - 2621 - page = alloc_pages(flag | __GFP_NOWARN, get_order(size)); 2622 - if (!page) { 2623 - if (!gfpflags_allow_blocking(flag)) 2606 + if (IS_ERR(domain)) { 2607 + if (PTR_ERR(domain) != -EINVAL) 2624 2608 return NULL; 2625 - 2626 - page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT, 2627 - get_order(size), flag); 2628 - if (!page) 2629 - return NULL; 2609 + is_direct = true; 2630 2610 } 2611 + 2612 + virt_addr = dma_direct_alloc(dev, size, dma_addr, flag, attrs); 2613 + if (!virt_addr || is_direct) 2614 + return virt_addr; 2631 2615 2632 2616 if (!dma_mask) 2633 2617 dma_mask = *dev->dma_mask; 2634 2618 2635 - *dma_addr = __map_single(dev, dma_dom, page_to_phys(page), 2636 - size, DMA_BIDIRECTIONAL, dma_mask); 2637 - 2619 + *dma_addr = __map_single(dev, to_dma_ops_domain(domain), 2620 + virt_to_phys(virt_addr), PAGE_ALIGN(size), 2621 + DMA_BIDIRECTIONAL, dma_mask); 2638 2622 if (*dma_addr == AMD_IOMMU_MAPPING_ERROR) 2639 2623 goto out_free; 2640 - 2641 - return page_address(page); 2624 + return virt_addr; 2642 2625 2643 2626 out_free: 2644 - 2645 - if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT)) 2646 - __free_pages(page, get_order(size)); 2647 - 2627 + dma_direct_free(dev, size, virt_addr, *dma_addr, attrs); 2648 2628 return NULL; 2649 2629 } 2650 2630 ··· 2636 2654 void *virt_addr, dma_addr_t dma_addr, 2637 2655 unsigned long attrs) 2638 2656 { 2639 - struct protection_domain *domain; 2640 - struct dma_ops_domain *dma_dom; 2641 - struct page *page; 2657 + struct protection_domain *domain = get_domain(dev); 2642 2658 2643 - page = virt_to_page(virt_addr); 2644 2659 size = PAGE_ALIGN(size); 2645 2660 2646 - domain = get_domain(dev); 2647 - if (IS_ERR(domain)) 2648 - goto free_mem; 2661 + if (!IS_ERR(domain)) { 2662 + struct dma_ops_domain *dma_dom = to_dma_ops_domain(domain); 2649 2663 2650 - dma_dom = to_dma_ops_domain(domain); 2664 + __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL); 2665 + } 2651 2666 2652 - __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL); 2653 - 2654 - free_mem: 2655 - if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT)) 2656 - __free_pages(page, get_order(size)); 2667 + dma_direct_free(dev, size, virt_addr, dma_addr, attrs); 2657 2668 } 2658 2669 2659 2670 /* ··· 2655 2680 */ 2656 2681 static int amd_iommu_dma_supported(struct device *dev, u64 mask) 2657 2682 { 2658 - if (!x86_dma_supported(dev, mask)) 2683 + if (!dma_direct_supported(dev, mask)) 2659 2684 return 0; 2660 2685 return check_device(dev); 2661 2686 } ··· 2769 2794 * continue to be SWIOTLB. 2770 2795 */ 2771 2796 if (!swiotlb) 2772 - dma_ops = &nommu_dma_ops; 2797 + dma_ops = &dma_direct_ops; 2773 2798 2774 2799 if (amd_iommu_unmap_flush) 2775 2800 pr_info("AMD-Vi: IO/TLB flush on unmap enabled\n");
+18 -47
drivers/iommu/intel-iommu.c
··· 31 31 #include <linux/pci.h> 32 32 #include <linux/dmar.h> 33 33 #include <linux/dma-mapping.h> 34 + #include <linux/dma-direct.h> 34 35 #include <linux/mempool.h> 35 36 #include <linux/memory.h> 36 37 #include <linux/cpu.h> ··· 46 45 #include <linux/pci-ats.h> 47 46 #include <linux/memblock.h> 48 47 #include <linux/dma-contiguous.h> 48 + #include <linux/dma-direct.h> 49 49 #include <linux/crash_dump.h> 50 50 #include <asm/irq_remapping.h> 51 51 #include <asm/cacheflush.h> ··· 3709 3707 dma_addr_t *dma_handle, gfp_t flags, 3710 3708 unsigned long attrs) 3711 3709 { 3712 - struct page *page = NULL; 3713 - int order; 3710 + void *vaddr; 3714 3711 3715 - size = PAGE_ALIGN(size); 3716 - order = get_order(size); 3712 + vaddr = dma_direct_alloc(dev, size, dma_handle, flags, attrs); 3713 + if (iommu_no_mapping(dev) || !vaddr) 3714 + return vaddr; 3717 3715 3718 - if (!iommu_no_mapping(dev)) 3719 - flags &= ~(GFP_DMA | GFP_DMA32); 3720 - else if (dev->coherent_dma_mask < dma_get_required_mask(dev)) { 3721 - if (dev->coherent_dma_mask < DMA_BIT_MASK(32)) 3722 - flags |= GFP_DMA; 3723 - else 3724 - flags |= GFP_DMA32; 3725 - } 3716 + *dma_handle = __intel_map_single(dev, virt_to_phys(vaddr), 3717 + PAGE_ALIGN(size), DMA_BIDIRECTIONAL, 3718 + dev->coherent_dma_mask); 3719 + if (!*dma_handle) 3720 + goto out_free_pages; 3721 + return vaddr; 3726 3722 3727 - if (gfpflags_allow_blocking(flags)) { 3728 - unsigned int count = size >> PAGE_SHIFT; 3729 - 3730 - page = dma_alloc_from_contiguous(dev, count, order, flags); 3731 - if (page && iommu_no_mapping(dev) && 3732 - page_to_phys(page) + size > dev->coherent_dma_mask) { 3733 - dma_release_from_contiguous(dev, page, count); 3734 - page = NULL; 3735 - } 3736 - } 3737 - 3738 - if (!page) 3739 - page = alloc_pages(flags, order); 3740 - if (!page) 3741 - return NULL; 3742 - memset(page_address(page), 0, size); 3743 - 3744 - *dma_handle = __intel_map_single(dev, page_to_phys(page), size, 3745 - DMA_BIDIRECTIONAL, 3746 - dev->coherent_dma_mask); 3747 - if (*dma_handle) 3748 - return page_address(page); 3749 - if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT)) 3750 - __free_pages(page, order); 3751 - 3723 + out_free_pages: 3724 + dma_direct_free(dev, size, vaddr, *dma_handle, attrs); 3752 3725 return NULL; 3753 3726 } 3754 3727 3755 3728 static void intel_free_coherent(struct device *dev, size_t size, void *vaddr, 3756 3729 dma_addr_t dma_handle, unsigned long attrs) 3757 3730 { 3758 - int order; 3759 - struct page *page = virt_to_page(vaddr); 3760 - 3761 - size = PAGE_ALIGN(size); 3762 - order = get_order(size); 3763 - 3764 - intel_unmap(dev, dma_handle, size); 3765 - if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT)) 3766 - __free_pages(page, order); 3731 + if (!iommu_no_mapping(dev)) 3732 + intel_unmap(dev, dma_handle, PAGE_ALIGN(size)); 3733 + dma_direct_free(dev, size, vaddr, dma_handle, attrs); 3767 3734 } 3768 3735 3769 3736 static void intel_unmap_sg(struct device *dev, struct scatterlist *sglist, ··· 3842 3871 .unmap_page = intel_unmap_page, 3843 3872 .mapping_error = intel_mapping_error, 3844 3873 #ifdef CONFIG_X86 3845 - .dma_supported = x86_dma_supported, 3874 + .dma_supported = dma_direct_supported, 3846 3875 #endif 3847 3876 }; 3848 3877
+1 -15
drivers/xen/swiotlb-xen.c
··· 53 53 * API. 54 54 */ 55 55 56 - #ifndef CONFIG_X86 57 - static unsigned long dma_alloc_coherent_mask(struct device *dev, 58 - gfp_t gfp) 59 - { 60 - unsigned long dma_mask = 0; 61 - 62 - dma_mask = dev->coherent_dma_mask; 63 - if (!dma_mask) 64 - dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) : DMA_BIT_MASK(32); 65 - 66 - return dma_mask; 67 - } 68 - #endif 69 - 70 56 #define XEN_SWIOTLB_ERROR_CODE (~(dma_addr_t)0x0) 71 57 72 58 static char *xen_io_tlb_start, *xen_io_tlb_end; ··· 314 328 return ret; 315 329 316 330 if (hwdev && hwdev->coherent_dma_mask) 317 - dma_mask = dma_alloc_coherent_mask(hwdev, flags); 331 + dma_mask = hwdev->coherent_dma_mask; 318 332 319 333 /* At this point dma_handle is the physical address, next we are 320 334 * going to set it to the machine address.
+19 -2
include/linux/dma-direct.h
··· 3 3 #define _LINUX_DMA_DIRECT_H 1 4 4 5 5 #include <linux/dma-mapping.h> 6 + #include <linux/mem_encrypt.h> 6 7 7 8 #ifdef CONFIG_ARCH_HAS_PHYS_TO_DMA 8 9 #include <asm/dma-direct.h> 9 10 #else 10 - static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 11 + static inline dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) 11 12 { 12 13 dma_addr_t dev_addr = (dma_addr_t)paddr; 13 14 14 15 return dev_addr - ((dma_addr_t)dev->dma_pfn_offset << PAGE_SHIFT); 15 16 } 16 17 17 - static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t dev_addr) 18 + static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dev_addr) 18 19 { 19 20 phys_addr_t paddr = (phys_addr_t)dev_addr; 20 21 ··· 30 29 return addr + size - 1 <= *dev->dma_mask; 31 30 } 32 31 #endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */ 32 + 33 + /* 34 + * If memory encryption is supported, phys_to_dma will set the memory encryption 35 + * bit in the DMA address, and dma_to_phys will clear it. The raw __phys_to_dma 36 + * and __dma_to_phys versions should only be used on non-encrypted memory for 37 + * special occasions like DMA coherent buffers. 38 + */ 39 + static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 40 + { 41 + return __sme_set(__phys_to_dma(dev, paddr)); 42 + } 43 + 44 + static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 45 + { 46 + return __sme_clr(__dma_to_phys(dev, daddr)); 47 + } 33 48 34 49 #ifdef CONFIG_ARCH_HAS_DMA_MARK_CLEAN 35 50 void dma_mark_clean(void *addr, size_t size);
+2 -6
include/linux/dma-mapping.h
··· 518 518 if (dma_alloc_from_dev_coherent(dev, size, dma_handle, &cpu_addr)) 519 519 return cpu_addr; 520 520 521 - /* 522 - * Let the implementation decide on the zone to allocate from, and 523 - * decide on the way of zeroing the memory given that the memory 524 - * returned should always be zeroed. 525 - */ 526 - flag &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM | __GFP_ZERO); 521 + /* let the implementation decide on the zone to allocate from: */ 522 + flag &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM); 527 523 528 524 if (!arch_dma_alloc_attrs(&dev, &flag)) 529 525 return NULL;
+12
include/linux/set_memory.h
··· 17 17 static inline int set_memory_nx(unsigned long addr, int numpages) { return 0; } 18 18 #endif 19 19 20 + #ifndef CONFIG_ARCH_HAS_MEM_ENCRYPT 21 + static inline int set_memory_encrypted(unsigned long addr, int numpages) 22 + { 23 + return 0; 24 + } 25 + 26 + static inline int set_memory_decrypted(unsigned long addr, int numpages) 27 + { 28 + return 0; 29 + } 30 + #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */ 31 + 20 32 #endif /* _LINUX_SET_MEMORY_H_ */
-8
include/linux/swiotlb.h
··· 72 72 void swiotlb_free(struct device *dev, size_t size, void *vaddr, 73 73 dma_addr_t dma_addr, unsigned long attrs); 74 74 75 - extern void 76 - *swiotlb_alloc_coherent(struct device *hwdev, size_t size, 77 - dma_addr_t *dma_handle, gfp_t flags); 78 - 79 - extern void 80 - swiotlb_free_coherent(struct device *hwdev, size_t size, 81 - void *vaddr, dma_addr_t dma_handle); 82 - 83 75 extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, 84 76 unsigned long offset, size_t size, 85 77 enum dma_data_direction dir,
+29 -6
lib/dma-direct.c
··· 9 9 #include <linux/scatterlist.h> 10 10 #include <linux/dma-contiguous.h> 11 11 #include <linux/pfn.h> 12 + #include <linux/set_memory.h> 12 13 13 14 #define DIRECT_MAPPING_ERROR 0 14 15 ··· 20 19 #ifndef ARCH_ZONE_DMA_BITS 21 20 #define ARCH_ZONE_DMA_BITS 24 22 21 #endif 22 + 23 + /* 24 + * For AMD SEV all DMA must be to unencrypted addresses. 25 + */ 26 + static inline bool force_dma_unencrypted(void) 27 + { 28 + return sev_active(); 29 + } 23 30 24 31 static bool 25 32 check_addr(struct device *dev, dma_addr_t dma_addr, size_t size, ··· 46 37 47 38 static bool dma_coherent_ok(struct device *dev, phys_addr_t phys, size_t size) 48 39 { 49 - return phys_to_dma(dev, phys) + size - 1 <= dev->coherent_dma_mask; 40 + dma_addr_t addr = force_dma_unencrypted() ? 41 + __phys_to_dma(dev, phys) : phys_to_dma(dev, phys); 42 + return addr + size - 1 <= dev->coherent_dma_mask; 50 43 } 51 44 52 45 void *dma_direct_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, ··· 57 46 unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; 58 47 int page_order = get_order(size); 59 48 struct page *page = NULL; 49 + void *ret; 50 + 51 + /* we always manually zero the memory once we are done: */ 52 + gfp &= ~__GFP_ZERO; 60 53 61 54 /* GFP_DMA32 and GFP_DMA are no ops without the corresponding zones: */ 62 55 if (dev->coherent_dma_mask <= DMA_BIT_MASK(ARCH_ZONE_DMA_BITS)) ··· 93 78 94 79 if (!page) 95 80 return NULL; 96 - 97 - *dma_handle = phys_to_dma(dev, page_to_phys(page)); 98 - memset(page_address(page), 0, size); 99 - return page_address(page); 81 + ret = page_address(page); 82 + if (force_dma_unencrypted()) { 83 + set_memory_decrypted((unsigned long)ret, 1 << page_order); 84 + *dma_handle = __phys_to_dma(dev, page_to_phys(page)); 85 + } else { 86 + *dma_handle = phys_to_dma(dev, page_to_phys(page)); 87 + } 88 + memset(ret, 0, size); 89 + return ret; 100 90 } 101 91 102 92 /* ··· 112 92 dma_addr_t dma_addr, unsigned long attrs) 113 93 { 114 94 unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; 95 + unsigned int page_order = get_order(size); 115 96 97 + if (force_dma_unencrypted()) 98 + set_memory_encrypted((unsigned long)cpu_addr, 1 << page_order); 116 99 if (!dma_release_from_contiguous(dev, virt_to_page(cpu_addr), count)) 117 - free_pages((unsigned long)cpu_addr, get_order(size)); 100 + free_pages((unsigned long)cpu_addr, page_order); 118 101 } 119 102 120 103 static dma_addr_t dma_direct_map_page(struct device *dev, struct page *page,
+17 -60
lib/swiotlb.c
··· 31 31 #include <linux/gfp.h> 32 32 #include <linux/scatterlist.h> 33 33 #include <linux/mem_encrypt.h> 34 + #include <linux/set_memory.h> 34 35 35 36 #include <asm/io.h> 36 37 #include <asm/dma.h> ··· 157 156 return size ? size : (IO_TLB_DEFAULT_SIZE); 158 157 } 159 158 160 - void __weak swiotlb_set_mem_attributes(void *vaddr, unsigned long size) { } 161 - 162 - /* For swiotlb, clear memory encryption mask from dma addresses */ 163 - static dma_addr_t swiotlb_phys_to_dma(struct device *hwdev, 164 - phys_addr_t address) 165 - { 166 - return __sme_clr(phys_to_dma(hwdev, address)); 167 - } 168 - 169 - /* Note that this doesn't work with highmem page */ 170 - static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev, 171 - volatile void *address) 172 - { 173 - return phys_to_dma(hwdev, virt_to_phys(address)); 174 - } 175 - 176 159 static bool no_iotlb_memory; 177 160 178 161 void swiotlb_print_info(void) ··· 194 209 195 210 vaddr = phys_to_virt(io_tlb_start); 196 211 bytes = PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT); 197 - swiotlb_set_mem_attributes(vaddr, bytes); 212 + set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT); 198 213 memset(vaddr, 0, bytes); 199 214 200 215 vaddr = phys_to_virt(io_tlb_overflow_buffer); 201 216 bytes = PAGE_ALIGN(io_tlb_overflow); 202 - swiotlb_set_mem_attributes(vaddr, bytes); 217 + set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT); 203 218 memset(vaddr, 0, bytes); 204 219 } 205 220 ··· 340 355 io_tlb_start = virt_to_phys(tlb); 341 356 io_tlb_end = io_tlb_start + bytes; 342 357 343 - swiotlb_set_mem_attributes(tlb, bytes); 358 + set_memory_decrypted((unsigned long)tlb, bytes >> PAGE_SHIFT); 344 359 memset(tlb, 0, bytes); 345 360 346 361 /* ··· 351 366 if (!v_overflow_buffer) 352 367 goto cleanup2; 353 368 354 - swiotlb_set_mem_attributes(v_overflow_buffer, io_tlb_overflow); 369 + set_memory_decrypted((unsigned long)v_overflow_buffer, 370 + io_tlb_overflow >> PAGE_SHIFT); 355 371 memset(v_overflow_buffer, 0, io_tlb_overflow); 356 372 io_tlb_overflow_buffer = virt_to_phys(v_overflow_buffer); 357 373 ··· 608 622 return SWIOTLB_MAP_ERROR; 609 623 } 610 624 611 - start_dma_addr = swiotlb_phys_to_dma(hwdev, io_tlb_start); 625 + start_dma_addr = __phys_to_dma(hwdev, io_tlb_start); 612 626 return swiotlb_tbl_map_single(hwdev, start_dma_addr, phys, size, 613 627 dir, attrs); 614 628 } ··· 692 706 } 693 707 } 694 708 709 + #ifdef CONFIG_DMA_DIRECT_OPS 695 710 static inline bool dma_coherent_ok(struct device *dev, dma_addr_t addr, 696 711 size_t size) 697 712 { ··· 713 726 goto out_warn; 714 727 715 728 phys_addr = swiotlb_tbl_map_single(dev, 716 - swiotlb_phys_to_dma(dev, io_tlb_start), 729 + __phys_to_dma(dev, io_tlb_start), 717 730 0, size, DMA_FROM_DEVICE, 0); 718 731 if (phys_addr == SWIOTLB_MAP_ERROR) 719 732 goto out_warn; 720 733 721 - *dma_handle = swiotlb_phys_to_dma(dev, phys_addr); 734 + *dma_handle = __phys_to_dma(dev, phys_addr); 722 735 if (dma_coherent_ok(dev, *dma_handle, size)) 723 736 goto out_unmap; 724 737 ··· 746 759 return NULL; 747 760 } 748 761 749 - void * 750 - swiotlb_alloc_coherent(struct device *hwdev, size_t size, 751 - dma_addr_t *dma_handle, gfp_t flags) 752 - { 753 - int order = get_order(size); 754 - unsigned long attrs = (flags & __GFP_NOWARN) ? DMA_ATTR_NO_WARN : 0; 755 - void *ret; 756 - 757 - ret = (void *)__get_free_pages(flags, order); 758 - if (ret) { 759 - *dma_handle = swiotlb_virt_to_bus(hwdev, ret); 760 - if (dma_coherent_ok(hwdev, *dma_handle, size)) { 761 - memset(ret, 0, size); 762 - return ret; 763 - } 764 - free_pages((unsigned long)ret, order); 765 - } 766 - 767 - return swiotlb_alloc_buffer(hwdev, size, dma_handle, attrs); 768 - } 769 - EXPORT_SYMBOL(swiotlb_alloc_coherent); 770 - 771 762 static bool swiotlb_free_buffer(struct device *dev, size_t size, 772 763 dma_addr_t dma_addr) 773 764 { ··· 764 799 DMA_ATTR_SKIP_CPU_SYNC); 765 800 return true; 766 801 } 767 - 768 - void 769 - swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr, 770 - dma_addr_t dev_addr) 771 - { 772 - if (!swiotlb_free_buffer(hwdev, size, dev_addr)) 773 - free_pages((unsigned long)vaddr, get_order(size)); 774 - } 775 - EXPORT_SYMBOL(swiotlb_free_coherent); 802 + #endif 776 803 777 804 static void 778 805 swiotlb_full(struct device *dev, size_t size, enum dma_data_direction dir, ··· 824 867 map = map_single(dev, phys, size, dir, attrs); 825 868 if (map == SWIOTLB_MAP_ERROR) { 826 869 swiotlb_full(dev, size, dir, 1); 827 - return swiotlb_phys_to_dma(dev, io_tlb_overflow_buffer); 870 + return __phys_to_dma(dev, io_tlb_overflow_buffer); 828 871 } 829 872 830 - dev_addr = swiotlb_phys_to_dma(dev, map); 873 + dev_addr = __phys_to_dma(dev, map); 831 874 832 875 /* Ensure that the address returned is DMA'ble */ 833 876 if (dma_capable(dev, dev_addr, size)) ··· 836 879 attrs |= DMA_ATTR_SKIP_CPU_SYNC; 837 880 swiotlb_tbl_unmap_single(dev, map, size, dir, attrs); 838 881 839 - return swiotlb_phys_to_dma(dev, io_tlb_overflow_buffer); 882 + return __phys_to_dma(dev, io_tlb_overflow_buffer); 840 883 } 841 884 842 885 /* ··· 966 1009 sg_dma_len(sgl) = 0; 967 1010 return 0; 968 1011 } 969 - sg->dma_address = swiotlb_phys_to_dma(hwdev, map); 1012 + sg->dma_address = __phys_to_dma(hwdev, map); 970 1013 } else 971 1014 sg->dma_address = dev_addr; 972 1015 sg_dma_len(sg) = sg->length; ··· 1030 1073 int 1031 1074 swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr) 1032 1075 { 1033 - return (dma_addr == swiotlb_phys_to_dma(hwdev, io_tlb_overflow_buffer)); 1076 + return (dma_addr == __phys_to_dma(hwdev, io_tlb_overflow_buffer)); 1034 1077 } 1035 1078 1036 1079 /* ··· 1042 1085 int 1043 1086 swiotlb_dma_supported(struct device *hwdev, u64 mask) 1044 1087 { 1045 - return swiotlb_phys_to_dma(hwdev, io_tlb_end - 1) <= mask; 1088 + return __phys_to_dma(hwdev, io_tlb_end - 1) <= mask; 1046 1089 } 1047 1090 1048 1091 #ifdef CONFIG_DMA_DIRECT_OPS