Merge tag 'dma-mapping-5.3' of git://git.infradead.org/users/hch/dma-mapping
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 12 Jul 2019 22:13:55 +0000 (15:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 12 Jul 2019 22:13:55 +0000 (15:13 -0700)
Pull dma-mapping updates from Christoph Hellwig:

 - move the USB special case that bounced DMA through a device bar into
   the USB code instead of handling it in the common DMA code (Laurentiu
   Tudor and Fredrik Noring)

 - don't dip into the global CMA pool for single page allocations
   (Nicolin Chen)

 - fix a crash when allocating memory for the atomic pool failed during
   boot (Florian Fainelli)

 - move support for MIPS-style uncached segments to the common code and
   use that for MIPS and nios2 (me)

 - make support for DMA_ATTR_NON_CONSISTENT and
   DMA_ATTR_NO_KERNEL_MAPPING generic (me)

 - convert nds32 to the generic remapping allocator (me)

* tag 'dma-mapping-5.3' of git://git.infradead.org/users/hch/dma-mapping: (29 commits)
  dma-mapping: mark dma_alloc_need_uncached as __always_inline
  MIPS: only select ARCH_HAS_UNCACHED_SEGMENT for non-coherent platforms
  usb: host: Fix excessive alignment restriction for local memory allocations
  lib/genalloc.c: Add algorithm, align and zeroed family of DMA allocators
  nios2: use the generic uncached segment support in dma-direct
  nds32: use the generic remapping allocator for coherent DMA allocations
  arc: use the generic remapping allocator for coherent DMA allocations
  dma-direct: handle DMA_ATTR_NO_KERNEL_MAPPING in common code
  dma-direct: handle DMA_ATTR_NON_CONSISTENT in common code
  dma-mapping: add a dma_alloc_need_uncached helper
  openrisc: remove the partial DMA_ATTR_NON_CONSISTENT support
  arc: remove the partial DMA_ATTR_NON_CONSISTENT support
  arm-nommu: remove the partial DMA_ATTR_NON_CONSISTENT support
  ARM: dma-mapping: allow larger DMA mask than supported
  dma-mapping: truncate dma masks to what dma_addr_t can hold
  iommu/dma: Apply dma_{alloc,free}_contiguous functions
  dma-remap: Avoid de-referencing NULL atomic_pool
  MIPS: use the generic uncached segment support in dma-direct
  dma-direct: provide generic support for uncached kernel segments
  au1100fb: fix DMA API abuse
  ...

14 files changed:
1  2 
arch/arc/Kconfig
arch/arc/mm/dma.c
arch/arm/mm/dma-mapping-nommu.c
arch/arm/mm/dma-mapping.c
arch/mips/Kconfig
arch/mips/include/asm/page.h
arch/nds32/Kconfig
arch/openrisc/kernel/dma.c
arch/xtensa/kernel/pci-dma.c
drivers/iommu/dma-iommu.c
drivers/usb/Kconfig
drivers/usb/host/fotg210-hcd.c
include/linux/genalloc.h
lib/genalloc.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 205f62b8d2916b8d3ad9c92ebdfd3ed00aee06fb,ed641337df8775a73d227682bacde2d488056d02..4bd583bd6934ea87e0b178b07f69a5c480d1fa48
@@@ -122,47 -116,21 +122,56 @@@ static inline int gen_pool_add(struct g
        return gen_pool_add_virt(pool, addr, -1, size, nid);
  }
  extern void gen_pool_destroy(struct gen_pool *);
 -extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
 -extern unsigned long gen_pool_alloc_algo(struct gen_pool *, size_t,
 -              genpool_algo_t algo, void *data);
 +unsigned long gen_pool_alloc_algo_owner(struct gen_pool *pool, size_t size,
 +              genpool_algo_t algo, void *data, void **owner);
 +
 +static inline unsigned long gen_pool_alloc_owner(struct gen_pool *pool,
 +              size_t size, void **owner)
 +{
 +      return gen_pool_alloc_algo_owner(pool, size, pool->algo, pool->data,
 +                      owner);
 +}
 +
 +static inline unsigned long gen_pool_alloc_algo(struct gen_pool *pool,
 +              size_t size, genpool_algo_t algo, void *data)
 +{
 +      return gen_pool_alloc_algo_owner(pool, size, algo, data, NULL);
 +}
 +
 +/**
 + * gen_pool_alloc - allocate special memory from the pool
 + * @pool: pool to allocate from
 + * @size: number of bytes to allocate from the pool
 + *
 + * Allocate the requested number of bytes from the specified pool.
 + * Uses the pool allocation function (with first-fit algorithm by default).
 + * Can not be used in NMI handler on architectures without
 + * NMI-safe cmpxchg implementation.
 + */
 +static inline unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
 +{
 +      return gen_pool_alloc_algo(pool, size, pool->algo, pool->data);
 +}
 +
  extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
                dma_addr_t *dma);
 -extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
+ extern void *gen_pool_dma_alloc_algo(struct gen_pool *pool, size_t size,
+               dma_addr_t *dma, genpool_algo_t algo, void *data);
+ extern void *gen_pool_dma_alloc_align(struct gen_pool *pool, size_t size,
+               dma_addr_t *dma, int align);
+ extern void *gen_pool_dma_zalloc(struct gen_pool *pool, size_t size, dma_addr_t *dma);
+ extern void *gen_pool_dma_zalloc_algo(struct gen_pool *pool, size_t size,
+               dma_addr_t *dma, genpool_algo_t algo, void *data);
+ extern void *gen_pool_dma_zalloc_align(struct gen_pool *pool, size_t size,
+               dma_addr_t *dma, int align);
 +extern void gen_pool_free_owner(struct gen_pool *pool, unsigned long addr,
 +              size_t size, void **owner);
 +static inline void gen_pool_free(struct gen_pool *pool, unsigned long addr,
 +                size_t size)
 +{
 +      gen_pool_free_owner(pool, addr, size, NULL);
 +}
 +
  extern void gen_pool_for_each_chunk(struct gen_pool *,
        void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
  extern size_t gen_pool_avail(struct gen_pool *);
diff --cc lib/genalloc.c
Simple merge