diff mbox series

crypto: cavium/nitrox - Invoke callback after DMA unmap

Message ID 20190114135204.20693-1-rnagadheeraj@marvell.com (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show
Series crypto: cavium/nitrox - Invoke callback after DMA unmap | expand

Commit Message

Nagadheeraj Rottela Jan. 14, 2019, 1:52 p.m. UTC
In process_response_list() invoke the callback handler after unmapping
the DMA buffers. It ensures DMA data is synced form device to cpu
before the client code access the data from callback handler.

Fixes: c9613335bf4f ("crypto: cavium/nitrox - Added AEAD cipher support")
Signed-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>
---
 drivers/crypto/cavium/nitrox/nitrox_reqmgr.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Herbert Xu Jan. 25, 2019, 10:45 a.m. UTC | #1
On Mon, Jan 14, 2019 at 01:52:24PM +0000, Nagadheeraj Rottela wrote:
> In process_response_list() invoke the callback handler after unmapping
> the DMA buffers. It ensures DMA data is synced form device to cpu
> before the client code access the data from callback handler.
> 
> Fixes: c9613335bf4f ("crypto: cavium/nitrox - Added AEAD cipher support")
> Signed-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>
> ---
>  drivers/crypto/cavium/nitrox/nitrox_reqmgr.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)

Patch applied.  Thanks.
diff mbox series

Patch

diff --git a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
index fe070d75c842..4c97478d44bd 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
@@ -537,6 +537,8 @@  static void process_response_list(struct nitrox_cmdq *cmdq)
 	struct nitrox_device *ndev = cmdq->ndev;
 	struct nitrox_softreq *sr;
 	int req_completed = 0, err = 0, budget;
+	completion_t callback;
+	void *cb_arg;
 
 	/* check all pending requests */
 	budget = atomic_read(&cmdq->pending_count);
@@ -564,13 +566,13 @@  static void process_response_list(struct nitrox_cmdq *cmdq)
 		smp_mb__after_atomic();
 		/* remove from response list */
 		response_list_del(sr, cmdq);
-
 		/* ORH error code */
 		err = READ_ONCE(*sr->resp.orh) & 0xff;
-
-		if (sr->callback)
-			sr->callback(sr->cb_arg, err);
+		callback = sr->callback;
+		cb_arg = sr->cb_arg;
 		softreq_destroy(sr);
+		if (callback)
+			callback(cb_arg, err);
 
 		req_completed++;
 	}