mirror of https://gitee.com/openkylin/linux.git
drivers: dma-coherent: simplify dma_init_coherent_memory return value
Since only dma_declare_coherent_memory cares about dma_init_coherent_memory returning part of flags as it return value, move the condition to the former and simplify the latter. This in turn makes rmem_dma_device_init less confusing. Reported-by: Fugang Duan <B38611@freescale.com> Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Acked-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
92aed5d6ba
commit
9e5b3d6f7f
|
@ -17,9 +17,9 @@ struct dma_coherent_mem {
|
|||
spinlock_t spinlock;
|
||||
};
|
||||
|
||||
static int dma_init_coherent_memory(phys_addr_t phys_addr, dma_addr_t device_addr,
|
||||
size_t size, int flags,
|
||||
struct dma_coherent_mem **mem)
|
||||
static bool dma_init_coherent_memory(
|
||||
phys_addr_t phys_addr, dma_addr_t device_addr, size_t size, int flags,
|
||||
struct dma_coherent_mem **mem)
|
||||
{
|
||||
struct dma_coherent_mem *dma_mem = NULL;
|
||||
void __iomem *mem_base = NULL;
|
||||
|
@ -50,17 +50,13 @@ static int dma_init_coherent_memory(phys_addr_t phys_addr, dma_addr_t device_add
|
|||
spin_lock_init(&dma_mem->spinlock);
|
||||
|
||||
*mem = dma_mem;
|
||||
|
||||
if (flags & DMA_MEMORY_MAP)
|
||||
return DMA_MEMORY_MAP;
|
||||
|
||||
return DMA_MEMORY_IO;
|
||||
return true;
|
||||
|
||||
out:
|
||||
kfree(dma_mem);
|
||||
if (mem_base)
|
||||
iounmap(mem_base);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void dma_release_coherent_memory(struct dma_coherent_mem *mem)
|
||||
|
@ -88,15 +84,13 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
|
|||
dma_addr_t device_addr, size_t size, int flags)
|
||||
{
|
||||
struct dma_coherent_mem *mem;
|
||||
int ret;
|
||||
|
||||
ret = dma_init_coherent_memory(phys_addr, device_addr, size, flags,
|
||||
&mem);
|
||||
if (ret == 0)
|
||||
if (!dma_init_coherent_memory(phys_addr, device_addr, size, flags,
|
||||
&mem))
|
||||
return 0;
|
||||
|
||||
if (dma_assign_coherent_memory(dev, mem) == 0)
|
||||
return ret;
|
||||
return flags & DMA_MEMORY_MAP ? DMA_MEMORY_MAP : DMA_MEMORY_IO;
|
||||
|
||||
dma_release_coherent_memory(mem);
|
||||
return 0;
|
||||
|
@ -281,9 +275,9 @@ static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev)
|
|||
struct dma_coherent_mem *mem = rmem->priv;
|
||||
|
||||
if (!mem &&
|
||||
dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE,
|
||||
&mem) != DMA_MEMORY_MAP) {
|
||||
!dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE,
|
||||
&mem)) {
|
||||
pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n",
|
||||
&rmem->base, (unsigned long)rmem->size / SZ_1M);
|
||||
return -ENODEV;
|
||||
|
|
Loading…
Reference in New Issue