Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165779
b: refs/heads/master
c: 88ba2aa
h: refs/heads/master
i:
  165777: d1692e8
  165775: f0dfd4d
v: v3
  • Loading branch information
Dan Williams committed Jun 3, 2009
1 parent b8065c0 commit 0341656
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 31 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 099f53cb50e45ef617a9f1d63ceec799e489418b
refs/heads/master: 88ba2aa586c874681c072101287e15d40de7e6e2
9 changes: 4 additions & 5 deletions trunk/Documentation/crypto/async-tx-api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ acknowledged by the application before the offload engine driver is allowed to
recycle (or free) the descriptor. A descriptor can be acked by one of the
following methods:
1/ setting the ASYNC_TX_ACK flag if no child operations are to be submitted
2/ setting the ASYNC_TX_DEP_ACK flag to acknowledge the parent
descriptor of a new operation.
2/ submitting an unacknowledged descriptor as a dependency to another
async_tx call will implicitly set the acknowledged state.
3/ calling async_tx_ack() on the descriptor.

3.4 When does the operation execute?
Expand Down Expand Up @@ -136,10 +136,9 @@ int run_xor_copy_xor(struct page **xor_srcs,

tx = async_xor(xor_dest, xor_srcs, 0, xor_src_cnt, xor_len,
ASYNC_TX_XOR_DROP_DST, NULL, NULL, NULL);
tx = async_memcpy(copy_dest, copy_src, 0, 0, copy_len,
ASYNC_TX_DEP_ACK, tx, NULL, NULL);
tx = async_memcpy(copy_dest, copy_src, 0, 0, copy_len, tx, NULL, NULL);
tx = async_xor(xor_dest, xor_srcs, 0, xor_src_cnt, xor_len,
ASYNC_TX_XOR_DROP_DST | ASYNC_TX_DEP_ACK | ASYNC_TX_ACK,
ASYNC_TX_XOR_DROP_DST | ASYNC_TX_ACK,
tx, complete_xor_copy_xor, NULL);

async_tx_issue_pending_all();
Expand Down
2 changes: 1 addition & 1 deletion trunk/crypto/async_tx/async_memcpy.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
* @src: src page
* @offset: offset in pages to start transaction
* @len: length in bytes
* @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK,
* @flags: ASYNC_TX_ACK
* @depend_tx: memcpy depends on the result of this transaction
* @cb_fn: function to call when the memcpy completes
* @cb_param: parameter to pass to the callback routine
Expand Down
2 changes: 1 addition & 1 deletion trunk/crypto/async_tx/async_memset.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
* @val: fill value
* @offset: offset in pages to start transaction
* @len: length in bytes
* @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK
* @flags: ASYNC_TX_ACK
* @depend_tx: memset depends on the result of this transaction
* @cb_fn: function to call when the memcpy completes
* @cb_param: parameter to pass to the callback routine
Expand Down
4 changes: 2 additions & 2 deletions trunk/crypto/async_tx/async_tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,15 +223,15 @@ async_tx_submit(struct dma_chan *chan, struct dma_async_tx_descriptor *tx,
if (flags & ASYNC_TX_ACK)
async_tx_ack(tx);

if (depend_tx && (flags & ASYNC_TX_DEP_ACK))
if (depend_tx)
async_tx_ack(depend_tx);
}
EXPORT_SYMBOL_GPL(async_tx_submit);

/**
* async_trigger_callback - schedules the callback function to be run after
* any dependent operations have been completed.
* @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK
* @flags: ASYNC_TX_ACK
* @depend_tx: 'callback' requires the completion of this transaction
* @cb_fn: function to call after depend_tx completes
* @cb_param: parameter to pass to the callback routine
Expand Down
6 changes: 2 additions & 4 deletions trunk/crypto/async_tx/async_xor.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ do_async_xor(struct dma_chan *chan, struct page *dest, struct page **src_list,
_cb_param);

depend_tx = tx;
flags |= ASYNC_TX_DEP_ACK;

if (src_cnt > xor_src_cnt) {
/* drop completed sources */
Expand Down Expand Up @@ -168,8 +167,7 @@ do_sync_xor(struct page *dest, struct page **src_list, unsigned int offset,
* @offset: offset in pages to start transaction
* @src_cnt: number of source pages
* @len: length in bytes
* @flags: ASYNC_TX_XOR_ZERO_DST, ASYNC_TX_XOR_DROP_DEST,
* ASYNC_TX_ACK, ASYNC_TX_DEP_ACK
* @flags: ASYNC_TX_XOR_ZERO_DST, ASYNC_TX_XOR_DROP_DEST, ASYNC_TX_ACK
* @depend_tx: xor depends on the result of this transaction.
* @cb_fn: function to call when the xor completes
* @cb_param: parameter to pass to the callback routine
Expand Down Expand Up @@ -230,7 +228,7 @@ static int page_is_zero(struct page *p, unsigned int offset, size_t len)
* @src_cnt: number of source pages
* @len: length in bytes
* @result: 0 if sum == 0 else non-zero
* @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK
* @flags: ASYNC_TX_ACK
* @depend_tx: xor depends on the result of this transaction.
* @cb_fn: function to call when the xor completes
* @cb_param: parameter to pass to the callback routine
Expand Down
25 changes: 11 additions & 14 deletions trunk/drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -525,14 +525,12 @@ async_copy_data(int frombio, struct bio *bio, struct page *page,
bio_page = bio_iovec_idx(bio, i)->bv_page;
if (frombio)
tx = async_memcpy(page, bio_page, page_offset,
b_offset, clen,
ASYNC_TX_DEP_ACK,
tx, NULL, NULL);
b_offset, clen, 0,
tx, NULL, NULL);
else
tx = async_memcpy(bio_page, page, b_offset,
page_offset, clen,
ASYNC_TX_DEP_ACK,
tx, NULL, NULL);
page_offset, clen, 0,
tx, NULL, NULL);
}
if (clen < len) /* hit end of page */
break;
Expand Down Expand Up @@ -615,8 +613,7 @@ static void ops_run_biofill(struct stripe_head *sh)
}

atomic_inc(&sh->count);
async_trigger_callback(ASYNC_TX_DEP_ACK | ASYNC_TX_ACK, tx,
ops_complete_biofill, sh);
async_trigger_callback(ASYNC_TX_ACK, tx, ops_complete_biofill, sh);
}

static void ops_complete_compute5(void *stripe_head_ref)
Expand Down Expand Up @@ -701,8 +698,8 @@ ops_run_prexor(struct stripe_head *sh, struct dma_async_tx_descriptor *tx)
}

tx = async_xor(xor_dest, xor_srcs, 0, count, STRIPE_SIZE,
ASYNC_TX_DEP_ACK | ASYNC_TX_XOR_DROP_DST, tx,
ops_complete_prexor, sh);
ASYNC_TX_XOR_DROP_DST, tx,
ops_complete_prexor, sh);

return tx;
}
Expand Down Expand Up @@ -809,7 +806,7 @@ ops_run_postxor(struct stripe_head *sh, struct dma_async_tx_descriptor *tx)
* set ASYNC_TX_XOR_DROP_DST and ASYNC_TX_XOR_ZERO_DST
* for the synchronous xor case
*/
flags = ASYNC_TX_DEP_ACK | ASYNC_TX_ACK |
flags = ASYNC_TX_ACK |
(prexor ? ASYNC_TX_XOR_DROP_DST : ASYNC_TX_XOR_ZERO_DST);

atomic_inc(&sh->count);
Expand Down Expand Up @@ -858,7 +855,7 @@ static void ops_run_check(struct stripe_head *sh)
&sh->ops.zero_sum_result, 0, NULL, NULL, NULL);

atomic_inc(&sh->count);
tx = async_trigger_callback(ASYNC_TX_DEP_ACK | ASYNC_TX_ACK, tx,
tx = async_trigger_callback(ASYNC_TX_ACK, tx,
ops_complete_check, sh);
}

Expand Down Expand Up @@ -2687,8 +2684,8 @@ static void handle_stripe_expansion(raid5_conf_t *conf, struct stripe_head *sh,

/* place all the copies on one channel */
tx = async_memcpy(sh2->dev[dd_idx].page,
sh->dev[i].page, 0, 0, STRIPE_SIZE,
ASYNC_TX_DEP_ACK, tx, NULL, NULL);
sh->dev[i].page, 0, 0, STRIPE_SIZE,
0, tx, NULL, NULL);

set_bit(R5_Expanded, &sh2->dev[dd_idx].flags);
set_bit(R5_UPTODATE, &sh2->dev[dd_idx].flags);
Expand Down
4 changes: 1 addition & 3 deletions trunk/include/linux/async_tx.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,11 @@ struct dma_chan_ref {
* array.
* @ASYNC_TX_ACK: immediately ack the descriptor, precludes setting up a
* dependency chain
* @ASYNC_TX_DEP_ACK: ack the dependency descriptor. Useful for chaining.
*/
enum async_tx_flags {
ASYNC_TX_XOR_ZERO_DST = (1 << 0),
ASYNC_TX_XOR_DROP_DST = (1 << 1),
ASYNC_TX_ACK = (1 << 3),
ASYNC_TX_DEP_ACK = (1 << 4),
ASYNC_TX_ACK = (1 << 2),
};

#ifdef CONFIG_DMA_ENGINE
Expand Down

0 comments on commit 0341656

Please sign in to comment.