From: Roland Dreier Date: Wed, 14 Feb 2007 08:32:53 +0000 (-0800) Subject: [PATCH] ia64: fix noncoherent DMA API so devres builds X-Git-Tag: v2.6.21-rc1~272 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=b7de8e7e3c7b79a72c20c7fd58bd65df3d146b13;p=linux-2.6-omap-h63xx.git [PATCH] ia64: fix noncoherent DMA API so devres builds On ia64, drivers/base/dma-mapping.c doesn't build because it calls dma_alloc_noncoherent() and dma_free_noncoherent(), which appear to be terminally broken; the calls end up generating errors like drivers/base/dma-mapping.c: In function 'dmam_noncoherent_release': drivers/base/dma-mapping.c:32: error: 'struct ia64_machine_vector' has no member named 'platform_dma_free_coherent' because the multiple levels of macro expansion in and end up turning a call to dma_free_noncoherent() into ia64_mv.platform_dma_free_coherent (instead of the intended ia64_mv.dma_free_coherent). This patch fixes this by converting dma_{alloc,free}_noncoherent() into inline functions that call the corresponding coherent functions, instead of trying to do this with macros. Signed-off-by: Roland Dreier Acked-by: Tony Luck Cc: Al Viro Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/include/asm-ia64/dma-mapping.h b/include/asm-ia64/dma-mapping.h index ebd5887f4b1..6299b51575b 100644 --- a/include/asm-ia64/dma-mapping.h +++ b/include/asm-ia64/dma-mapping.h @@ -8,9 +8,20 @@ #include #define dma_alloc_coherent platform_dma_alloc_coherent -#define dma_alloc_noncoherent platform_dma_alloc_coherent /* coherent mem. is cheap */ +/* coherent mem. is cheap */ +static inline void * +dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + gfp_t flag) +{ + return dma_alloc_coherent(dev, size, dma_handle, flag); +} #define dma_free_coherent platform_dma_free_coherent -#define dma_free_noncoherent platform_dma_free_coherent +static inline void +dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr, + dma_addr_t dma_handle) +{ + dma_free_coherent(dev, size, cpu_addr, dma_handle); +} #define dma_map_single platform_dma_map_single #define dma_map_sg platform_dma_map_sg #define dma_unmap_single platform_dma_unmap_single