diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-12-24 20:08:26 (GMT) |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-24 20:08:26 (GMT) |
commit | db8862eafe8a5d030a3b02e81b8bb47447c315e3 (patch) | |
tree | 073ea7b46809bf804134cbf008a593413c02a99c /crypto/async_tx/async_xor.c | |
parent | c5dee6177f4bd2095aab7d9be9f6ebdddd6deee9 (diff) | |
parent | c20137fc5329eaf24093fc48c52608dc66be8e5c (diff) | |
download | linux-fsl-qoriq-db8862eafe8a5d030a3b02e81b8bb47447c315e3.tar.xz |
Merge branch 'linus' into tracing/hw-branch-tracing
Diffstat (limited to 'crypto/async_tx/async_xor.c')
-rw-r--r-- | crypto/async_tx/async_xor.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c index c029d3e..595b786 100644 --- a/crypto/async_tx/async_xor.c +++ b/crypto/async_tx/async_xor.c @@ -53,10 +53,17 @@ do_async_xor(struct dma_chan *chan, struct page *dest, struct page **src_list, int xor_src_cnt; dma_addr_t dma_dest; - dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_FROM_DEVICE); - for (i = 0; i < src_cnt; i++) + /* map the dest bidrectional in case it is re-used as a source */ + dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_BIDIRECTIONAL); + for (i = 0; i < src_cnt; i++) { + /* only map the dest once */ + if (unlikely(src_list[i] == dest)) { + dma_src[i] = dma_dest; + continue; + } dma_src[i] = dma_map_page(dma->dev, src_list[i], offset, len, DMA_TO_DEVICE); + } while (src_cnt) { async_flags = flags; |