Merge git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
[sfrench/cifs-2.6.git] / arch / avr32 / mm / dma-coherent.c
index b68d669f823de0a39f1f8bedebc3f5bd13429264..099212d4567c5d33d649c2c0988ec538dfb49803 100644 (file)
@@ -112,16 +112,21 @@ void dma_free_coherent(struct device *dev, size_t size,
 }
 EXPORT_SYMBOL(dma_free_coherent);
 
-#if 0
 void *dma_alloc_writecombine(struct device *dev, size_t size,
                             dma_addr_t *handle, gfp_t gfp)
 {
        struct page *page;
+       dma_addr_t phys;
 
        page = __dma_alloc(dev, size, handle, gfp);
+       if (!page)
+               return NULL;
+
+       phys = page_to_phys(page);
+       *handle = phys;
 
        /* Now, map the page into P3 with write-combining turned on */
-       return __ioremap(page_to_phys(page), size, _PAGE_BUFFER);
+       return __ioremap(phys, size, _PAGE_BUFFER);
 }
 EXPORT_SYMBOL(dma_alloc_writecombine);
 
@@ -132,8 +137,7 @@ void dma_free_writecombine(struct device *dev, size_t size,
 
        iounmap(cpu_addr);
 
-       page = bus_to_page(handle);
+       page = phys_to_page(handle);
        __dma_free(dev, size, page, handle);
 }
 EXPORT_SYMBOL(dma_free_writecombine);
-#endif