netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/29] ioatdma: towards raid support
@ 2009-09-04  2:30 Dan Williams
  2009-09-04  2:30 ` [PATCH 01/29] ioat: move to drivers/dma/ioat/ Dan Williams
                   ` (28 more replies)
  0 siblings, 29 replies; 39+ messages in thread
From: Dan Williams @ 2009-09-04  2:30 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-raid, netdev, maciej.sosnowski

The v3.2 version of the Intel(R) QuickData Technology specification adds
support for raid5 and raid6 offloads.  The v3.2 implementation, like v3,
reuses the same basic dma descriptor ring mechanism that was introduced
for v2 devices.  At the same time v3.2 breaks some assumptions of the
existing driver with the addition of mechanisms like extended
descriptors and interrupt-driven completion callbacks as specified by
the async_tx/raid-offload implementation.

The current driver blurs the lines between v1, v2, and v3 making it
difficult to append raid functionality without modifying legacy code
paths.  The primary goal of this patchset is to refactor and isolate the
legacy (v1/v2) code paths from feature additions going forward by
migrating hardware version specific code to hardware version specific
files.  It also takes the opportunity to perform some cleanups and
optimizations.  For example, the conversion from a linked list to a
ring-buffer for the v2/v3 descriptor ring makes the code more readable
and reduces the size of the software descriptor from 136-bytes to
88-bytes with all the fields needed for NET_DMA fitting into one
cacheline.

One robustness fix required by the raid code is the ability to poll for
a descriptor while the channel is experiencing an "out of descriptors"
condition.  This has been added for the v2/v3 ring implementation.

This cleanup is available via git at:

   git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git ioat-refactor

It will hit -next shortly.

The driver is used by net/ when CONFIG_NET_DMA=y, and will be used by
drivers/md/ (after the raid extensions) when CONFIG_ASYNC_TX_DMA=y.
Hence the Cc: of netdev and linux-raid.

Regards,
Dan

---

Dan Williams (29):
      ioat: move to drivers/dma/ioat/
      ioat: move definitions to dma.h
      ioat: convert ioat_probe to pcim/devm
      ioat: cleanup some long deref chains and 80 column collisions
      ioat: kill function prototype ifdef guards
      ioat: split ioat_dma_probe into core/version-specific routines
      ioat: fix type mismatch for ->dmacount
      ioat: define descriptor control bit-field
      ioat1: move descriptor allocation from submit to prep
      ioat: fix self test interrupts
      ioat: prepare the code for ioat[12]_dma_chan split
      ioat2,3: convert to a true ring buffer
      ioat1: kill unused unmap parameters
      ioat: add some dev_dbg() calls
      ioat: cleanup completion status reads
      ioat: ignore reserved bits for chancnt and xfercap
      ioat: preserve chanctrl bits when re-arming interrupts
      ioat: ___devinit annotate the initialization paths
      ioat1: trim ioat_dma_desc_sw
      ioat: switch watchdog and reset handler from workqueue to timer
      ioat2,3: dynamically resize descriptor ring
      net_dma: poll for a descriptor after allocation failure
      dw_dmac: implement a private tx_list
      fsldma: implement a private tx_list
      iop-adma: implement a private tx_list
      ioat: implement a private tx_list
      mv_xor: implement a private tx_list
      dmaengine: kill tx_list
      ioat2,3: cacheline align software descriptor allocations

 arch/arm/include/asm/hardware/iop_adma.h           |    2 +
 drivers/dma/Makefile                               |    3 +-
 drivers/dma/dmaengine.c                            |    1 -
 drivers/dma/dw_dmac.c                              |   19 +-
 drivers/dma/dw_dmac_regs.h                         |    1 +
 drivers/dma/fsldma.c                               |    7 +-
 drivers/dma/fsldma.h                               |    1 +
 drivers/dma/ioat/Makefile                          |    2 +
 drivers/dma/{ioat_dca.c => ioat/dca.c}             |   13 +-
 drivers/dma/ioat/dma.c                             | 1140 +++++++++++++
 drivers/dma/ioat/dma.h                             |  307 ++++
 drivers/dma/ioat/dma_v2.c                          |  883 ++++++++++
 drivers/dma/ioat/dma_v2.h                          |  147 ++
 drivers/dma/{ioatdma_hw.h => ioat/hw.h}            |   45 +-
 drivers/dma/{ioat.c => ioat/pci.c}                 |  163 +-
 .../dma/{ioatdma_registers.h => ioat/registers.h}  |   34 +-
 drivers/dma/ioat_dma.c                             | 1741 --------------------
 drivers/dma/ioatdma.h                              |  165 --
 drivers/dma/iop-adma.c                             |    9 +-
 drivers/dma/iovlock.c                              |   10 +
 drivers/dma/mv_xor.c                               |    7 +-
 drivers/dma/mv_xor.h                               |    4 +-
 include/linux/dmaengine.h                          |    3 -
 23 files changed, 2647 insertions(+), 2060 deletions(-)
 create mode 100644 drivers/dma/ioat/Makefile
 rename drivers/dma/{ioat_dca.c => ioat/dca.c} (98%)
 create mode 100644 drivers/dma/ioat/dma.c
 create mode 100644 drivers/dma/ioat/dma.h
 create mode 100644 drivers/dma/ioat/dma_v2.c
 create mode 100644 drivers/dma/ioat/dma_v2.h
 rename drivers/dma/{ioatdma_hw.h => ioat/hw.h} (67%)
 rename drivers/dma/{ioat.c => ioat/pci.c} (62%)
 rename drivers/dma/{ioatdma_registers.h => ioat/registers.h} (91%)
 delete mode 100644 drivers/dma/ioat_dma.c
 delete mode 100644 drivers/dma/ioatdma.h

^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2009-09-15 23:07 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-04  2:30 [PATCH 00/29] ioatdma: towards raid support Dan Williams
2009-09-04  2:30 ` [PATCH 01/29] ioat: move to drivers/dma/ioat/ Dan Williams
2009-09-04  2:30 ` [PATCH 02/29] ioat: move definitions to dma.h Dan Williams
2009-09-04  2:30 ` [PATCH 03/29] ioat: convert ioat_probe to pcim/devm Dan Williams
2009-09-04  2:30 ` [PATCH 04/29] ioat: cleanup some long deref chains and 80 column collisions Dan Williams
2009-09-04  2:30 ` [PATCH 05/29] ioat: kill function prototype ifdef guards Dan Williams
2009-09-04  2:31 ` [PATCH 06/29] ioat: split ioat_dma_probe into core/version-specific routines Dan Williams
2009-09-04  2:31 ` [PATCH 07/29] ioat: fix type mismatch for ->dmacount Dan Williams
2009-09-04  2:31 ` [PATCH 08/29] ioat: define descriptor control bit-field Dan Williams
2009-09-04  2:31 ` [PATCH 09/29] ioat1: move descriptor allocation from submit to prep Dan Williams
2009-09-04  2:31 ` [PATCH 10/29] ioat: fix self test interrupts Dan Williams
2009-09-04  2:31 ` [PATCH 11/29] ioat: prepare the code for ioat[12]_dma_chan split Dan Williams
2009-09-04  2:31 ` [PATCH 12/29] ioat2,3: convert to a true ring buffer Dan Williams
2009-09-04  2:31 ` [PATCH 13/29] ioat1: kill unused unmap parameters Dan Williams
2009-09-04  2:31 ` [PATCH 14/29] ioat: add some dev_dbg() calls Dan Williams
2009-09-04  2:31 ` [PATCH 15/29] ioat: cleanup completion status reads Dan Williams
2009-09-04  2:31 ` [PATCH 16/29] ioat: ignore reserved bits for chancnt and xfercap Dan Williams
2009-09-04  2:31 ` [PATCH 17/29] ioat: preserve chanctrl bits when re-arming interrupts Dan Williams
2009-09-04  2:32 ` [PATCH 18/29] ioat: ___devinit annotate the initialization paths Dan Williams
2009-09-04  2:32 ` [PATCH 19/29] ioat1: trim ioat_dma_desc_sw Dan Williams
2009-09-14 14:55   ` Sosnowski, Maciej
2009-09-04  2:32 ` [PATCH 20/29] ioat: switch watchdog and reset handler from workqueue to timer Dan Williams
2009-09-14 14:59   ` Sosnowski, Maciej
2009-09-04  2:32 ` [PATCH 21/29] ioat2,3: dynamically resize descriptor ring Dan Williams
2009-09-14 15:00   ` Sosnowski, Maciej
2009-09-15 23:07     ` Dan Williams
2009-09-04  2:32 ` [PATCH 22/29] net_dma: poll for a descriptor after allocation failure Dan Williams
2009-09-14 15:00   ` Sosnowski, Maciej
2009-09-04  2:32 ` [PATCH 23/29] dw_dmac: implement a private tx_list Dan Williams
2009-09-04  2:32 ` [PATCH 24/29] fsldma: " Dan Williams
2009-09-04 19:42   ` Dan Williams
2009-09-04  2:32 ` [PATCH 25/29] iop-adma: " Dan Williams
2009-09-04  2:32 ` [PATCH 26/29] ioat: " Dan Williams
2009-09-14 15:01   ` Sosnowski, Maciej
2009-09-04  2:32 ` [PATCH 27/29] mv_xor: " Dan Williams
2009-09-04  2:32 ` [PATCH 28/29] dmaengine: kill tx_list Dan Williams
2009-09-14 15:01   ` Sosnowski, Maciej
2009-09-04  2:32 ` [PATCH 29/29] ioat2, 3: cacheline align software descriptor allocations Dan Williams
2009-09-14 15:02   ` Sosnowski, Maciej

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).