diff options
Diffstat (limited to 'kernel/dma/coherent.c')
| -rw-r--r-- | kernel/dma/coherent.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 545e3869b0e3..551b0eb7028a 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -123,8 +123,9 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,  	return ret;  } -static void *__dma_alloc_from_coherent(struct dma_coherent_mem *mem, -		ssize_t size, dma_addr_t *dma_handle) +static void *__dma_alloc_from_coherent(struct device *dev, +				       struct dma_coherent_mem *mem, +				       ssize_t size, dma_addr_t *dma_handle)  {  	int order = get_order(size);  	unsigned long flags; @@ -143,7 +144,7 @@ static void *__dma_alloc_from_coherent(struct dma_coherent_mem *mem,  	/*  	 * Memory was found in the coherent area.  	 */ -	*dma_handle = mem->device_base + (pageno << PAGE_SHIFT); +	*dma_handle = dma_get_device_base(dev, mem) + (pageno << PAGE_SHIFT);  	ret = mem->virt_base + (pageno << PAGE_SHIFT);  	spin_unlock_irqrestore(&mem->spinlock, flags);  	memset(ret, 0, size); @@ -175,17 +176,18 @@ int dma_alloc_from_dev_coherent(struct device *dev, ssize_t size,  	if (!mem)  		return 0; -	*ret = __dma_alloc_from_coherent(mem, size, dma_handle); +	*ret = __dma_alloc_from_coherent(dev, mem, size, dma_handle);  	return 1;  } -void *dma_alloc_from_global_coherent(ssize_t size, dma_addr_t *dma_handle) +void *dma_alloc_from_global_coherent(struct device *dev, ssize_t size, +				     dma_addr_t *dma_handle)  {  	if (!dma_coherent_default_memory)  		return NULL; -	return __dma_alloc_from_coherent(dma_coherent_default_memory, size, -			dma_handle); +	return __dma_alloc_from_coherent(dev, dma_coherent_default_memory, size, +					 dma_handle);  }  static int __dma_release_from_coherent(struct dma_coherent_mem *mem,  |