aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/async_tx/async_memcpy.c15
-rw-r--r--crypto/async_tx/async_memset.c8
-rw-r--r--crypto/async_tx/async_xor.c22
-rw-r--r--include/linux/async_tx.h2
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 {
55enum async_tx_flags { 54enum 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};