Skip to content

Commit

Permalink
Blackfin: dma-mapping: fix thinko in constant optimization
Browse files Browse the repository at this point in the history
Make sure the non-constant version of the dma_sync functions actually
complete instead of recursively calling itself forever.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
  • Loading branch information
Sonic Zhang authored and Mike Frysinger committed Mar 9, 2010
1 parent 0c27080 commit a3a6a59
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
15 changes: 9 additions & 6 deletions arch/blackfin/include/asm/dma-mapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,8 @@ dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
extern void
__dma_sync(dma_addr_t addr, size_t size, enum dma_data_direction dir);
static inline void
_dma_sync(dma_addr_t addr, size_t size, enum dma_data_direction dir)
__dma_sync_inline(dma_addr_t addr, size_t size, enum dma_data_direction dir)
{
if (!__builtin_constant_p(dir)) {
__dma_sync(addr, size, dir);
return;
}

switch (dir) {
case DMA_NONE:
BUG();
Expand All @@ -64,6 +59,14 @@ _dma_sync(dma_addr_t addr, size_t size, enum dma_data_direction dir)
break;
}
}
static inline void
_dma_sync(dma_addr_t addr, size_t size, enum dma_data_direction dir)
{
if (__builtin_constant_p(dir))
__dma_sync_inline(addr, size, dir);
else
__dma_sync(addr, size, dir);
}

/*
* Map a single buffer of the indicated size for DMA in streaming mode.
Expand Down
2 changes: 1 addition & 1 deletion arch/blackfin/kernel/dma-mapping.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ EXPORT_SYMBOL(dma_free_coherent);
void __dma_sync(dma_addr_t addr, size_t size,
enum dma_data_direction dir)
{
_dma_sync(addr, size, dir);
__dma_sync_inline(addr, size, dir);
}
EXPORT_SYMBOL(__dma_sync);

Expand Down

0 comments on commit a3a6a59

Please sign in to comment.