diff options
| author | Nagadheeraj Rottela <rnagadheeraj@marvell.com> | 2019-01-14 08:52:24 -0500 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-01-25 05:37:58 -0500 |
| commit | 356690d029e10f1aadebc49819d3908d5f6389fb (patch) | |
| tree | 0cb4118ed75200054ed8aa0f03d8dbd7feda3fee | |
| parent | d45a90cb5d061fa7d411b974b950fe0b8bc5f265 (diff) | |
crypto: cavium/nitrox - Invoke callback after DMA unmap
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>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
| -rw-r--r-- | drivers/crypto/cavium/nitrox/nitrox_reqmgr.c | 10 |
1 files changed, 6 insertions, 4 deletions
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) | |||
| 537 | struct nitrox_device *ndev = cmdq->ndev; | 537 | struct nitrox_device *ndev = cmdq->ndev; |
| 538 | struct nitrox_softreq *sr; | 538 | struct nitrox_softreq *sr; |
| 539 | int req_completed = 0, err = 0, budget; | 539 | int req_completed = 0, err = 0, budget; |
| 540 | completion_t callback; | ||
| 541 | void *cb_arg; | ||
| 540 | 542 | ||
| 541 | /* check all pending requests */ | 543 | /* check all pending requests */ |
| 542 | budget = atomic_read(&cmdq->pending_count); | 544 | budget = atomic_read(&cmdq->pending_count); |
| @@ -564,13 +566,13 @@ static void process_response_list(struct nitrox_cmdq *cmdq) | |||
| 564 | smp_mb__after_atomic(); | 566 | smp_mb__after_atomic(); |
| 565 | /* remove from response list */ | 567 | /* remove from response list */ |
| 566 | response_list_del(sr, cmdq); | 568 | response_list_del(sr, cmdq); |
| 567 | |||
| 568 | /* ORH error code */ | 569 | /* ORH error code */ |
| 569 | err = READ_ONCE(*sr->resp.orh) & 0xff; | 570 | err = READ_ONCE(*sr->resp.orh) & 0xff; |
| 570 | 571 | callback = sr->callback; | |
| 571 | if (sr->callback) | 572 | cb_arg = sr->cb_arg; |
| 572 | sr->callback(sr->cb_arg, err); | ||
| 573 | softreq_destroy(sr); | 573 | softreq_destroy(sr); |
| 574 | if (callback) | ||
| 575 | callback(cb_arg, err); | ||
| 574 | 576 | ||
| 575 | req_completed++; | 577 | req_completed++; |
| 576 | } | 578 | } |
