diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-18 12:05:53 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-18 12:05:53 -0800 |
commit | 1283bb52736a5f5006007550ba4dccc5eef63938 (patch) | |
tree | a4163208266313ba9e5bcdf941c48a0a2658f866 /crypto | |
parent | 6a304fa1d210442abc48b69b6925818097298b91 (diff) | |
parent | 9ae4a416cf931d24714e96de53cb5bd4a5c9414f (diff) | |
download | linux-crypto-1283bb52736a5f5006007550ba4dccc5eef63938.tar.gz linux-crypto-1283bb52736a5f5006007550ba4dccc5eef63938.zip |
Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx:
async_xor: dma_map destination DMA_BIDIRECTIONAL
dmaengine: protect 'id' from concurrent registrations
ioat: wait for self-test completion
Diffstat (limited to 'crypto')
-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 c029d3eb..595b7867 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; |