15 Jul, 2007

6 commits


14 Jul, 2007

26 commits


13 Jul, 2007

8 commits

  • Cc: John Magolan
    Signed-off-by: Shannon Nelson
    Signed-off-by: Dan Williams

    Dan Williams
     
  • Cc: Russell King
    Signed-off-by: Dan Williams

    Dan Williams
     
  • Adds the platform device definitions and the architecture specific support
    routines (i.e. register initialization and descriptor formats) for the
    iop-adma driver.

    Changelog:
    * add support for > 1k zero sum buffer sizes
    * added dma/aau platform devices to iq80321 and iq80332 setup
    * fixed the calculation in iop_desc_is_aligned
    * support xor buffer sizes larger than 16MB
    * fix places where software descriptors are assumed to be contiguous, only
    hardware descriptors are contiguous for up to a PAGE_SIZE buffer size
    * convert to async_tx
    * add interrupt support
    * add platform devices for 80219 boards
    * do not call platform register macros in driver code
    * remove switch() statements for compatible register offsets/layouts
    * change over to bitmap based capabilities
    * remove unnecessary ARM assembly statement
    * checkpatch.pl fixes
    * gpl v2 only correction
    * phys move to dma_async_tx_descriptor

    Cc: Russell King
    Signed-off-by: Dan Williams

    Dan Williams
     
  • Adds the platform device definitions and the architecture specific
    support routines (i.e. register initialization and descriptor formats) for the
    iop-adma driver.

    Changelog:
    * added 'descriptor pool size' to the platform data
    * add base support for buffer sizes larger than 16MB (hw max)
    * build error fix from Kirill A. Shutemov
    * rebase for async_tx changes
    * add interrupt support
    * do not call platform register macros in driver code
    * remove unnecessary ARM assembly statement
    * checkpatch.pl fixes
    * gpl v2 only correction

    Cc: Russell King
    Signed-off-by: Dan Williams

    Dan Williams
     
  • The Intel(R) IOP series of i/o processors integrate an Xscale core with
    raid acceleration engines. The capabilities per platform are:

    iop219:
    (2) copy engines
    iop321:
    (2) copy engines
    (1) xor and block fill engine
    iop33x:
    (2) copy and crc32c engines
    (1) xor, xor zero sum, pq, pq zero sum, and block fill engine
    iop34x (iop13xx):
    (2) copy, crc32c, xor, xor zero sum, and block fill engines
    (1) copy, crc32c, xor, xor zero sum, pq, pq zero sum, and block fill engine

    The driver supports the features of the async_tx api:
    * asynchronous notification of operation completion
    * implicit (interupt triggered) handling of inter-channel transaction
    dependencies

    The driver adapts to the platform it is running by two methods.
    1/ #include which defines the hardware specific
    iop_chan_* and iop_desc_* routines as a series of static inline
    functions
    2/ The private platform data attached to the platform_device defines the
    capabilities of the channels

    20070626: Callbacks are run in a tasklet. Given the recent discussion on
    LKML about killing tasklets in favor of workqueues I did a quick conversion
    of the driver. Raid5 resync performance dropped from 50MB/s to 30MB/s, so
    the tasklet implementation remains until a generic softirq interface is
    available.

    Changelog:
    * fixed a slot allocation bug in do_iop13xx_adma_xor that caused too few
    slots to be requested eventually leading to data corruption
    * enabled the slot allocation routine to attempt to free slots before
    returning -ENOMEM
    * switched the cleanup routine to solely use the software chain and the
    status register to determine if a descriptor is complete. This is
    necessary to support other IOP engines that do not have status writeback
    capability
    * make the driver iop generic
    * modified the allocation routines to understand allocating a group of
    slots for a single operation
    * added a null xor initialization operation for the xor only channel on
    iop3xx
    * support xor operations on buffers larger than the hardware maximum
    * split the do_* routines into separate prep, src/dest set, submit stages
    * added async_tx support (dependent operations initiation at cleanup time)
    * simplified group handling
    * added interrupt support (callbacks via tasklets)
    * brought the pending depth inline with ioat (i.e. 4 descriptors)
    * drop dma mapping methods, suggested by Chris Leech
    * don't use inline in C files, Adrian Bunk
    * remove static tasklet declarations
    * make iop_adma_alloc_slots easier to read and remove chances for a
    corrupted descriptor chain
    * fix locking bug in iop_adma_alloc_chan_resources, Benjamin Herrenschmidt
    * convert capabilities over to dma_cap_mask_t
    * fixup sparse warnings
    * add descriptor flush before iop_chan_enable
    * checkpatch.pl fixes
    * gpl v2 only correction
    * move set_src, set_dest, submit to async_tx methods
    * move group_list and phys to async_tx

    Cc: Russell King
    Signed-off-by: Dan Williams

    Dan Williams
     
  • replaced by raid5_run_ops

    Signed-off-by: Dan Williams
    Acked-By: NeilBrown

    Dan Williams
     
  • I/O submission requests were already handled outside of the stripe lock in
    handle_stripe. Now that handle_stripe is only tasked with finding work,
    this logic belongs in raid5_run_ops.

    Signed-off-by: Dan Williams
    Acked-By: NeilBrown

    Dan Williams
     
  • When a stripe is being expanded bulk copying takes place to move the data
    from the old stripe to the new. Since raid5_run_ops only operates on one
    stripe at a time these bulk copies are handled in-line under the stripe
    lock. In the dma offload case we poll for the completion of the operation.

    After the data has been copied into the new stripe the parity needs to be
    recalculated across the new disks. We reuse the existing postxor
    functionality to carry out this calculation. By setting STRIPE_OP_POSTXOR
    without setting STRIPE_OP_BIODRAIN the completion path in handle stripe
    can differentiate expand operations from normal write operations.

    Signed-off-by: Dan Williams
    Acked-By: NeilBrown

    Dan Williams