diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-28 14:12:21 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-28 14:12:21 -0800 | 
| commit | af7ddd8a627c62a835524b3f5b471edbbbcce025 (patch) | |
| tree | af9777ddef6d394c7cc01fca599328b584ca2bc1 /arch/s390 | |
| parent | fe2b0cdabcd9e6aeca66a104bc03576946e5fee2 (diff) | |
| parent | 8b1cce9f5832a8eda17d37a3c49fb7dd2d650f46 (diff) | |
| download | linux-af7ddd8a627c62a835524b3f5b471edbbbcce025.tar.bz2 | |
Merge tag 'dma-mapping-4.21' of git://git.infradead.org/users/hch/dma-mapping
Pull DMA mapping updates from Christoph Hellwig:
 "A huge update this time, but a lot of that is just consolidating or
  removing code:
   - provide a common DMA_MAPPING_ERROR definition and avoid indirect
     calls for dma_map_* error checking
   - use direct calls for the DMA direct mapping case, avoiding huge
     retpoline overhead for high performance workloads
   - merge the swiotlb dma_map_ops into dma-direct
   - provide a generic remapping DMA consistent allocator for
     architectures that have devices that perform DMA that is not cache
     coherent. Based on the existing arm64 implementation and also used
     for csky now.
   - improve the dma-debug infrastructure, including dynamic allocation
     of entries (Robin Murphy)
   - default to providing chaining scatterlist everywhere, with opt-outs
     for the few architectures (alpha, parisc, most arm32 variants) that
     can't cope with it
   - misc sparc32 dma-related cleanups
   - remove the dma_mark_clean arch hook used by swiotlb on ia64 and
     replace it with the generic noncoherent infrastructure
   - fix the return type of dma_set_max_seg_size (Niklas Söderlund)
   - move the dummy dma ops for not DMA capable devices from arm64 to
     common code (Robin Murphy)
   - ensure dma_alloc_coherent returns zeroed memory to avoid kernel
     data leaks through userspace. We already did this for most common
     architectures, but this ensures we do it everywhere.
     dma_zalloc_coherent has been deprecated and can hopefully be
     removed after -rc1 with a coccinelle script"
* tag 'dma-mapping-4.21' of git://git.infradead.org/users/hch/dma-mapping: (73 commits)
  dma-mapping: fix inverted logic in dma_supported
  dma-mapping: deprecate dma_zalloc_coherent
  dma-mapping: zero memory returned from dma_alloc_*
  sparc/iommu: fix ->map_sg return value
  sparc/io-unit: fix ->map_sg return value
  arm64: default to the direct mapping in get_arch_dma_ops
  PCI: Remove unused attr variable in pci_dma_configure
  ia64: only select ARCH_HAS_DMA_COHERENT_TO_PFN if swiotlb is enabled
  dma-mapping: bypass indirect calls for dma-direct
  vmd: use the proper dma_* APIs instead of direct methods calls
  dma-direct: merge swiotlb_dma_ops into the dma_direct code
  dma-direct: use dma_direct_map_page to implement dma_direct_map_sg
  dma-direct: improve addressability error reporting
  swiotlb: remove dma_mark_clean
  swiotlb: remove SWIOTLB_MAP_ERROR
  ACPI / scan: Refactor _CCA enforcement
  dma-mapping: factor out dummy DMA ops
  dma-mapping: always build the direct mapping code
  dma-mapping: move dma_cache_sync out of line
  dma-mapping: move various slow path functions out of line
  ...
Diffstat (limited to 'arch/s390')
| -rw-r--r-- | arch/s390/Kconfig | 2 | ||||
| -rw-r--r-- | arch/s390/pci/pci_dma.c | 20 | 
2 files changed, 6 insertions, 16 deletions
| diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 5173366af8f3..21d271d04ca6 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -73,7 +73,6 @@ config S390  	select ARCH_HAS_KCOV  	select ARCH_HAS_PTE_SPECIAL  	select ARCH_HAS_SET_MEMORY -	select ARCH_HAS_SG_CHAIN  	select ARCH_HAS_STRICT_KERNEL_RWX  	select ARCH_HAS_STRICT_MODULE_RWX  	select ARCH_HAS_UBSAN_SANITIZE_ALL @@ -140,7 +139,6 @@ config S390  	select HAVE_COPY_THREAD_TLS  	select HAVE_DEBUG_KMEMLEAK  	select HAVE_DMA_CONTIGUOUS -	select DMA_DIRECT_OPS  	select HAVE_DYNAMIC_FTRACE  	select HAVE_DYNAMIC_FTRACE_WITH_REGS  	select HAVE_EFFICIENT_UNALIGNED_ACCESS diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c index d387a0fbdd7e..9e52d1527f71 100644 --- a/arch/s390/pci/pci_dma.c +++ b/arch/s390/pci/pci_dma.c @@ -15,8 +15,6 @@  #include <linux/pci.h>  #include <asm/pci_dma.h> -#define S390_MAPPING_ERROR		(~(dma_addr_t) 0x0) -  static struct kmem_cache *dma_region_table_cache;  static struct kmem_cache *dma_page_table_cache;  static int s390_iommu_strict; @@ -301,7 +299,7 @@ static dma_addr_t dma_alloc_address(struct device *dev, int size)  out_error:  	spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags); -	return S390_MAPPING_ERROR; +	return DMA_MAPPING_ERROR;  }  static void dma_free_address(struct device *dev, dma_addr_t dma_addr, int size) @@ -349,7 +347,7 @@ static dma_addr_t s390_dma_map_pages(struct device *dev, struct page *page,  	/* This rounds up number of pages based on size and offset */  	nr_pages = iommu_num_pages(pa, size, PAGE_SIZE);  	dma_addr = dma_alloc_address(dev, nr_pages); -	if (dma_addr == S390_MAPPING_ERROR) { +	if (dma_addr == DMA_MAPPING_ERROR) {  		ret = -ENOSPC;  		goto out_err;  	} @@ -372,7 +370,7 @@ out_free:  out_err:  	zpci_err("map error:\n");  	zpci_err_dma(ret, pa); -	return S390_MAPPING_ERROR; +	return DMA_MAPPING_ERROR;  }  static void s390_dma_unmap_pages(struct device *dev, dma_addr_t dma_addr, @@ -406,7 +404,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size,  	dma_addr_t map;  	size = PAGE_ALIGN(size); -	page = alloc_pages(flag, get_order(size)); +	page = alloc_pages(flag | __GFP_ZERO, get_order(size));  	if (!page)  		return NULL; @@ -449,7 +447,7 @@ static int __s390_dma_map_sg(struct device *dev, struct scatterlist *sg,  	int ret;  	dma_addr_base = dma_alloc_address(dev, nr_pages); -	if (dma_addr_base == S390_MAPPING_ERROR) +	if (dma_addr_base == DMA_MAPPING_ERROR)  		return -ENOMEM;  	dma_addr = dma_addr_base; @@ -496,7 +494,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,  	for (i = 1; i < nr_elements; i++) {  		s = sg_next(s); -		s->dma_address = S390_MAPPING_ERROR; +		s->dma_address = DMA_MAPPING_ERROR;  		s->dma_length = 0;  		if (s->offset || (size & ~PAGE_MASK) || @@ -546,11 +544,6 @@ static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,  	}  } -static int s390_mapping_error(struct device *dev, dma_addr_t dma_addr) -{ -	return dma_addr == S390_MAPPING_ERROR; -} -  int zpci_dma_init_device(struct zpci_dev *zdev)  {  	int rc; @@ -675,7 +668,6 @@ const struct dma_map_ops s390_pci_dma_ops = {  	.unmap_sg	= s390_dma_unmap_sg,  	.map_page	= s390_dma_map_pages,  	.unmap_page	= s390_dma_unmap_pages, -	.mapping_error	= s390_mapping_error,  	/* dma_supported is unconditionally true without a callback */  };  EXPORT_SYMBOL_GPL(s390_pci_dma_ops); |