summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-03-19 05:23:59 +0100
committerDan Williams <dan.j.williams@intel.com>2008-03-19 01:01:00 +0100
commit8d8002f642886ae256a3c5d70fe8aff4faf3631a (patch)
tree81a3df533e7a0ad2d268b28fba1507e770df0f55
parentfsldma: Fix the DMA halt when using DMA_INTERRUPT async_tx transfer. (diff)
downloadlinux-8d8002f642886ae256a3c5d70fe8aff4faf3631a.tar.xz
linux-8d8002f642886ae256a3c5d70fe8aff4faf3631a.zip
async_tx: avoid the async xor_zero_sum path when src_cnt > device->max_xor
If the channel cannot perform the operation in one call to ->device_prep_dma_zero_sum, then fallback to the xor+page_is_zero path. This only affects users with arrays larger than 16 devices on iop13xx or 32 devices on iop3xx. Cc: <stable@kernel.org> Cc: Neil Brown <neilb@suse.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--crypto/async_tx/async_xor.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c
index 7a9db353f198..1c445c7bdab7 100644
--- a/crypto/async_tx/async_xor.c
+++ b/crypto/async_tx/async_xor.c
@@ -271,7 +271,7 @@ async_xor_zero_sum(struct page *dest, struct page **src_list,
BUG_ON(src_cnt <= 1);
- if (device) {
+ if (device && src_cnt <= device->max_xor) {
dma_addr_t *dma_src = (dma_addr_t *) src_list;
unsigned long dma_prep_flags = cb_fn ? DMA_PREP_INTERRUPT : 0;
int i;