diff options
| -rw-r--r-- | crypto/async_tx/async_memcpy.c | 15 | ||||
| -rw-r--r-- | crypto/async_tx/async_memset.c | 8 | ||||
| -rw-r--r-- | crypto/async_tx/async_xor.c | 22 | ||||
| -rw-r--r-- | include/linux/async_tx.h | 2 |
4 files changed, 14 insertions, 33 deletions
diff --git a/crypto/async_tx/async_memcpy.c b/crypto/async_tx/async_memcpy.c index 047e533fcc5b..e8c8956ef1dd 100644 --- a/crypto/async_tx/async_memcpy.c +++ b/crypto/async_tx/async_memcpy.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | * @src: src page | 35 | * @src: src page |
| 36 | * @offset: offset in pages to start transaction | 36 | * @offset: offset in pages to start transaction |
| 37 | * @len: length in bytes | 37 | * @len: length in bytes |
| 38 | * @flags: ASYNC_TX_ASSUME_COHERENT, ASYNC_TX_ACK, ASYNC_TX_DEP_ACK, | 38 | * @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK, |
| 39 | * @depend_tx: memcpy depends on the result of this transaction | 39 | * @depend_tx: memcpy depends on the result of this transaction |
| 40 | * @cb_fn: function to call when the memcpy completes | 40 | * @cb_fn: function to call when the memcpy completes |
| 41 | * @cb_param: parameter to pass to the callback routine | 41 | * @cb_param: parameter to pass to the callback routine |
| @@ -55,20 +55,15 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, | |||
| 55 | 55 | ||
| 56 | if (tx) { /* run the memcpy asynchronously */ | 56 | if (tx) { /* run the memcpy asynchronously */ |
| 57 | dma_addr_t addr; | 57 | dma_addr_t addr; |
| 58 | enum dma_data_direction dir; | ||
| 59 | 58 | ||
| 60 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); | 59 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); |
| 61 | 60 | ||
| 62 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | 61 | addr = dma_map_page(device->dev, dest, dest_offset, len, |
| 63 | DMA_NONE : DMA_FROM_DEVICE; | 62 | DMA_FROM_DEVICE); |
| 64 | |||
| 65 | addr = dma_map_page(device->dev, dest, dest_offset, len, dir); | ||
| 66 | tx->tx_set_dest(addr, tx, 0); | 63 | tx->tx_set_dest(addr, tx, 0); |
| 67 | 64 | ||
| 68 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | 65 | addr = dma_map_page(device->dev, src, src_offset, len, |
| 69 | DMA_NONE : DMA_TO_DEVICE; | 66 | DMA_TO_DEVICE); |
| 70 | |||
| 71 | addr = dma_map_page(device->dev, src, src_offset, len, dir); | ||
| 72 | tx->tx_set_src(addr, tx, 0); | 67 | tx->tx_set_src(addr, tx, 0); |
| 73 | 68 | ||
| 74 | async_tx_submit(chan, tx, flags, depend_tx, cb_fn, cb_param); | 69 | async_tx_submit(chan, tx, flags, depend_tx, cb_fn, cb_param); |
diff --git a/crypto/async_tx/async_memset.c b/crypto/async_tx/async_memset.c index 66ef6351202e..760972803958 100644 --- a/crypto/async_tx/async_memset.c +++ b/crypto/async_tx/async_memset.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | * @val: fill value | 35 | * @val: fill value |
| 36 | * @offset: offset in pages to start transaction | 36 | * @offset: offset in pages to start transaction |
| 37 | * @len: length in bytes | 37 | * @len: length in bytes |
| 38 | * @flags: ASYNC_TX_ASSUME_COHERENT, ASYNC_TX_ACK, ASYNC_TX_DEP_ACK | 38 | * @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK |
| 39 | * @depend_tx: memset depends on the result of this transaction | 39 | * @depend_tx: memset depends on the result of this transaction |
| 40 | * @cb_fn: function to call when the memcpy completes | 40 | * @cb_fn: function to call when the memcpy completes |
| 41 | * @cb_param: parameter to pass to the callback routine | 41 | * @cb_param: parameter to pass to the callback routine |
| @@ -55,13 +55,11 @@ async_memset(struct page *dest, int val, unsigned int offset, | |||
| 55 | 55 | ||
| 56 | if (tx) { /* run the memset asynchronously */ | 56 | if (tx) { /* run the memset asynchronously */ |
| 57 | dma_addr_t dma_addr; | 57 | dma_addr_t dma_addr; |
| 58 | enum dma_data_direction dir; | ||
| 59 | 58 | ||
| 60 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); | 59 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); |
| 61 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | ||
| 62 | DMA_NONE : DMA_FROM_DEVICE; | ||
| 63 | 60 | ||
| 64 | dma_addr = dma_map_page(device->dev, dest, offset, len, dir); | 61 | dma_addr = dma_map_page(device->dev, dest, offset, len, |
| 62 | DMA_FROM_DEVICE); | ||
| 65 | tx->tx_set_dest(dma_addr, tx, 0); | 63 | tx->tx_set_dest(dma_addr, tx, 0); |
| 66 | 64 | ||
| 67 | async_tx_submit(chan, tx, flags, depend_tx, cb_fn, cb_param); | 65 | async_tx_submit(chan, tx, flags, depend_tx, cb_fn, cb_param); |
diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c index 716885a87f07..cb41e6bbbc4d 100644 --- a/crypto/async_tx/async_xor.c +++ b/crypto/async_tx/async_xor.c | |||
| @@ -42,23 +42,17 @@ do_async_xor(struct dma_async_tx_descriptor *tx, struct dma_device *device, | |||
| 42 | dma_async_tx_callback cb_fn, void *cb_param) | 42 | dma_async_tx_callback cb_fn, void *cb_param) |
| 43 | { | 43 | { |
| 44 | dma_addr_t dma_addr; | 44 | dma_addr_t dma_addr; |
| 45 | enum dma_data_direction dir; | ||
| 46 | int i; | 45 | int i; |
| 47 | 46 | ||
| 48 | pr_debug("%s: len: %zu\n", __FUNCTION__, len); | 47 | pr_debug("%s: len: %zu\n", __FUNCTION__, len); |
| 49 | 48 | ||
| 50 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | 49 | dma_addr = dma_map_page(device->dev, dest, offset, len, |
| 51 | DMA_NONE : DMA_FROM_DEVICE; | 50 | DMA_FROM_DEVICE); |
| 52 | |||
| 53 | dma_addr = dma_map_page(device->dev, dest, offset, len, dir); | ||
| 54 | tx->tx_set_dest(dma_addr, tx, 0); | 51 | tx->tx_set_dest(dma_addr, tx, 0); |
| 55 | 52 | ||
| 56 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | ||
| 57 | DMA_NONE : DMA_TO_DEVICE; | ||
| 58 | |||
| 59 | for (i = 0; i < src_cnt; i++) { | 53 | for (i = 0; i < src_cnt; i++) { |
| 60 | dma_addr = dma_map_page(device->dev, src_list[i], | 54 | dma_addr = dma_map_page(device->dev, src_list[i], |
| 61 | offset, len, dir); | 55 | offset, len, DMA_TO_DEVICE); |
| 62 | tx->tx_set_src(dma_addr, tx, i); | 56 | tx->tx_set_src(dma_addr, tx, i); |
| 63 | } | 57 | } |
| 64 | 58 | ||
| @@ -106,7 +100,7 @@ do_sync_xor(struct page *dest, struct page **src_list, unsigned int offset, | |||
| 106 | * @src_cnt: number of source pages | 100 | * @src_cnt: number of source pages |
| 107 | * @len: length in bytes | 101 | * @len: length in bytes |
| 108 | * @flags: ASYNC_TX_XOR_ZERO_DST, ASYNC_TX_XOR_DROP_DEST, | 102 | * @flags: ASYNC_TX_XOR_ZERO_DST, ASYNC_TX_XOR_DROP_DEST, |
| 109 | * ASYNC_TX_ASSUME_COHERENT, ASYNC_TX_ACK, ASYNC_TX_DEP_ACK | 103 | * ASYNC_TX_ACK, ASYNC_TX_DEP_ACK |
| 110 | * @depend_tx: xor depends on the result of this transaction. | 104 | * @depend_tx: xor depends on the result of this transaction. |
| 111 | * @cb_fn: function to call when the xor completes | 105 | * @cb_fn: function to call when the xor completes |
| 112 | * @cb_param: parameter to pass to the callback routine | 106 | * @cb_param: parameter to pass to the callback routine |
| @@ -246,7 +240,7 @@ static int page_is_zero(struct page *p, unsigned int offset, size_t len) | |||
| 246 | * @src_cnt: number of source pages | 240 | * @src_cnt: number of source pages |
| 247 | * @len: length in bytes | 241 | * @len: length in bytes |
| 248 | * @result: 0 if sum == 0 else non-zero | 242 | * @result: 0 if sum == 0 else non-zero |
| 249 | * @flags: ASYNC_TX_ASSUME_COHERENT, ASYNC_TX_ACK, ASYNC_TX_DEP_ACK | 243 | * @flags: ASYNC_TX_ACK, ASYNC_TX_DEP_ACK |
| 250 | * @depend_tx: xor depends on the result of this transaction. | 244 | * @depend_tx: xor depends on the result of this transaction. |
| 251 | * @cb_fn: function to call when the xor completes | 245 | * @cb_fn: function to call when the xor completes |
| 252 | * @cb_param: parameter to pass to the callback routine | 246 | * @cb_param: parameter to pass to the callback routine |
| @@ -270,16 +264,12 @@ async_xor_zero_sum(struct page *dest, struct page **src_list, | |||
| 270 | 264 | ||
| 271 | if (tx) { | 265 | if (tx) { |
| 272 | dma_addr_t dma_addr; | 266 | dma_addr_t dma_addr; |
| 273 | enum dma_data_direction dir; | ||
| 274 | 267 | ||
| 275 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); | 268 | pr_debug("%s: (async) len: %zu\n", __FUNCTION__, len); |
| 276 | 269 | ||
| 277 | dir = (flags & ASYNC_TX_ASSUME_COHERENT) ? | ||
| 278 | DMA_NONE : DMA_TO_DEVICE; | ||
| 279 | |||
| 280 | for (i = 0; i < src_cnt; i++) { | 270 | for (i = 0; i < src_cnt; i++) { |
| 281 | dma_addr = dma_map_page(device->dev, src_list[i], | 271 | dma_addr = dma_map_page(device->dev, src_list[i], |
| 282 | offset, len, dir); | 272 | offset, len, DMA_TO_DEVICE); |
| 283 | tx->tx_set_src(dma_addr, tx, i); | 273 | tx->tx_set_src(dma_addr, tx, i); |
| 284 | } | 274 | } |
| 285 | 275 | ||
diff --git a/include/linux/async_tx.h b/include/linux/async_tx.h index bdca3f1b3213..3d59d371dd32 100644 --- a/include/linux/async_tx.h +++ b/include/linux/async_tx.h | |||
| @@ -47,7 +47,6 @@ struct dma_chan_ref { | |||
| 47 | * address is an implied source, whereas the asynchronous case it must be listed | 47 | * address is an implied source, whereas the asynchronous case it must be listed |
| 48 | * as a source. The destination address must be the first address in the source | 48 | * as a source. The destination address must be the first address in the source |
| 49 | * array. | 49 | * array. |
| 50 | * @ASYNC_TX_ASSUME_COHERENT: skip cache maintenance operations | ||
| 51 | * @ASYNC_TX_ACK: immediately ack the descriptor, precludes setting up a | 50 | * @ASYNC_TX_ACK: immediately ack the descriptor, precludes setting up a |
| 52 | * dependency chain | 51 | * dependency chain |
| 53 | * @ASYNC_TX_DEP_ACK: ack the dependency descriptor. Useful for chaining. | 52 | * @ASYNC_TX_DEP_ACK: ack the dependency descriptor. Useful for chaining. |
| @@ -55,7 +54,6 @@ struct dma_chan_ref { | |||
| 55 | enum async_tx_flags { | 54 | enum async_tx_flags { |
| 56 | ASYNC_TX_XOR_ZERO_DST = (1 << 0), | 55 | ASYNC_TX_XOR_ZERO_DST = (1 << 0), |
| 57 | ASYNC_TX_XOR_DROP_DST = (1 << 1), | 56 | ASYNC_TX_XOR_DROP_DST = (1 << 1), |
| 58 | ASYNC_TX_ASSUME_COHERENT = (1 << 2), | ||
| 59 | ASYNC_TX_ACK = (1 << 3), | 57 | ASYNC_TX_ACK = (1 << 3), |
| 60 | ASYNC_TX_DEP_ACK = (1 << 4), | 58 | ASYNC_TX_DEP_ACK = (1 << 4), |
| 61 | }; | 59 | }; |
