diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-12-23 15:24:15 (GMT) |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-23 15:24:15 (GMT) |
commit | bf8bd66d0580f296f257d371ee41a0a137b541c7 (patch) | |
tree | 4c7f7471005b4436d40ba52edd51214d12331f25 /drivers/dma/mv_xor.c | |
parent | 8ae936690972dfcad73d0dde1095b9f32af5ee95 (diff) | |
parent | 1ccedb7cdba6886939dd8b4c8f965a826f696e56 (diff) | |
download | linux-fsl-qoriq-bf8bd66d0580f296f257d371ee41a0a137b541c7.tar.xz |
Merge branch 'x86/apic' into x86/irq
Conflicts:
arch/x86/kernel/apic.c
Diffstat (limited to 'drivers/dma/mv_xor.c')
-rw-r--r-- | drivers/dma/mv_xor.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c index 0328da0..bcda174 100644 --- a/drivers/dma/mv_xor.c +++ b/drivers/dma/mv_xor.c @@ -311,17 +311,26 @@ mv_xor_run_tx_complete_actions(struct mv_xor_desc_slot *desc, enum dma_ctrl_flags flags = desc->async_tx.flags; u32 src_cnt; dma_addr_t addr; + dma_addr_t dest; + src_cnt = unmap->unmap_src_cnt; + dest = mv_desc_get_dest_addr(unmap); if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) { - addr = mv_desc_get_dest_addr(unmap); - dma_unmap_page(dev, addr, len, DMA_FROM_DEVICE); + enum dma_data_direction dir; + + if (src_cnt > 1) /* is xor ? */ + dir = DMA_BIDIRECTIONAL; + else + dir = DMA_FROM_DEVICE; + dma_unmap_page(dev, dest, len, dir); } if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) { - src_cnt = unmap->unmap_src_cnt; while (src_cnt--) { addr = mv_desc_get_src_addr(unmap, src_cnt); + if (addr == dest) + continue; dma_unmap_page(dev, addr, len, DMA_TO_DEVICE); } |