[PATCH v3 00/14] Asynchronous raid6 acceleration (part 1 of 3)

From: Dan Williams
Date: Sat Aug 29 2009 - 22:30:21 EST

Extend the async_tx api to include routines for offloading raid6 operations to
hardware. This is part1, part2 contains raid6 extensions to the iop-adma
driver, and part3 contains the changes to make the md/raid6 driver

The combined series is available at:

git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git raid6

The changes since v2 [1] are:
1/ Moved various stripe handling resources to a percpu allocation.
Specifically the 'scribble' buffer (for passing and converting address
lists) and the raid6 spare page have been moved.

2/ Added 4-disk and 5-disk special cases to the raid6 recovery code as
they are special with respect to offload engines. The recovery
algorithms use a zero page in the place of the dead data pages. When
the async_tx api sees the raid6_empty_zero_page as a source it simply
drops it in the asynchronous path. This can result, for example, in a
PQ operation with a source count of zero in the case of recovering 2
data disks in a 4-disk array. This does not map to hardware so the
recovery code refactors the operation in these special cases. The
raid6test module has been updated to hit these cases.

I can carry this in async_tx.git/next, or let me know if you would
rather pull this into md.git/for-next.


[1]: http://marc.info/?l=linux-raid&m=124269482227272&w=2

Note, I know that "md/raid6: release spare page at ->stop()" is already
upstream, but I have not rebased the tree to preserve the testing that
has gone into this series to date.


Dan Williams (14):
async_tx: rename zero_sum to val
async_tx: kill ASYNC_TX_DEP_ACK flag
async_tx: structify submission arguments, add scribble
async_xor: permit callers to pass in a 'dma/page scribble' region
md/raid6: release spare page at ->stop()
md/raid6: move the spare page to a percpu allocation
md/raid5,6: add percpu scribble region for buffer lists
async_tx: add sum check flags
async_tx: kill needless module_{init|exit}
async_tx: remove walk of tx->parent chain in dma_wait_for_async_tx
async_tx: add support for asynchronous GF multiplication
async_tx: add support for asynchronous RAID6 recovery operations
dmatest: add pq support
async_tx: raid6 recovery self test

Documentation/crypto/async-tx-api.txt | 75 +++-
arch/arm/include/asm/hardware/iop3xx-adma.h | 5
arch/arm/mach-iop13xx/include/mach/adma.h | 12 -
arch/arm/mach-iop13xx/setup.c | 10 -
arch/arm/plat-iop/adma.c | 2
crypto/async_tx/Kconfig | 9 +
crypto/async_tx/Makefile | 3
crypto/async_tx/async_memcpy.c | 39 +-
crypto/async_tx/async_memset.c | 38 +-
crypto/async_tx/async_pq.c | 388 +++++++++++++++++++++++
crypto/async_tx/async_raid6_recov.c | 448 +++++++++++++++++++++++++++
crypto/async_tx/async_tx.c | 83 ++---
crypto/async_tx/async_xor.c | 199 ++++++------
crypto/async_tx/raid6test.c | 241 ++++++++++++++
drivers/dma/Kconfig | 2
drivers/dma/dmaengine.c | 53 +--
drivers/dma/dmatest.c | 26 ++
drivers/dma/iop-adma.c | 40 +-
drivers/md/Kconfig | 13 +
drivers/md/raid5.c | 452 ++++++++++++++++++---------
drivers/md/raid5.h | 22 +
include/linux/async_tx.h | 126 ++++++--
include/linux/dmaengine.h | 116 ++++++-
23 files changed, 1907 insertions(+), 495 deletions(-)
create mode 100644 crypto/async_tx/async_pq.c
create mode 100644 crypto/async_tx/async_raid6_recov.c
create mode 100644 crypto/async_tx/raid6test.c
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/