Commit 58953e15 authored by Russell King's avatar Russell King Committed by Herbert Xu

crypto: marvell/cesa - rearrange last request handling

Move the test for the last request out of mv_cesa_ahash_dma_last_req()
to its caller, and move the mv_cesa_dma_add_frag() down into this
function.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e41bbebd
...@@ -522,15 +522,21 @@ static struct mv_cesa_op_ctx * ...@@ -522,15 +522,21 @@ static struct mv_cesa_op_ctx *
mv_cesa_ahash_dma_last_req(struct mv_cesa_tdma_chain *chain, mv_cesa_ahash_dma_last_req(struct mv_cesa_tdma_chain *chain,
struct mv_cesa_ahash_dma_iter *dma_iter, struct mv_cesa_ahash_dma_iter *dma_iter,
struct mv_cesa_ahash_req *creq, struct mv_cesa_ahash_req *creq,
struct mv_cesa_op_ctx *op, unsigned int frag_len, gfp_t flags)
gfp_t flags)
{ {
struct mv_cesa_ahash_dma_req *ahashdreq = &creq->req.dma; struct mv_cesa_ahash_dma_req *ahashdreq = &creq->req.dma;
unsigned int len, trailerlen, padoff = 0; unsigned int len, trailerlen, padoff = 0;
struct mv_cesa_op_ctx *op;
int ret; int ret;
if (!creq->last_req) if (frag_len) {
return op; op = mv_cesa_dma_add_frag(chain, &creq->op_tmpl, frag_len,
flags);
if (IS_ERR(op))
return op;
} else {
op = NULL;
}
if (op && creq->len <= CESA_SA_DESC_MAC_SRC_TOTAL_LEN_MAX) { if (op && creq->len <= CESA_SA_DESC_MAC_SRC_TOTAL_LEN_MAX) {
u32 frag = CESA_SA_DESC_CFG_NOT_FRAG; u32 frag = CESA_SA_DESC_CFG_NOT_FRAG;
...@@ -657,16 +663,18 @@ static int mv_cesa_ahash_dma_req_init(struct ahash_request *req) ...@@ -657,16 +663,18 @@ static int mv_cesa_ahash_dma_req_init(struct ahash_request *req)
frag_len = iter.base.op_len; frag_len = iter.base.op_len;
} }
if (frag_len) { /*
* At this point, frag_len indicates whether we have any data
* outstanding which needs an operation. Queue up the final
* operation, which depends whether this is the final request.
*/
if (creq->last_req)
op = mv_cesa_ahash_dma_last_req(&chain, &iter, creq, frag_len,
flags);
else if (frag_len)
op = mv_cesa_dma_add_frag(&chain, &creq->op_tmpl, frag_len, op = mv_cesa_dma_add_frag(&chain, &creq->op_tmpl, frag_len,
flags); flags);
if (IS_ERR(op)) {
ret = PTR_ERR(op);
goto err_free_tdma;
}
}
op = mv_cesa_ahash_dma_last_req(&chain, &iter, creq, op, flags);
if (IS_ERR(op)) { if (IS_ERR(op)) {
ret = PTR_ERR(op); ret = PTR_ERR(op);
goto err_free_tdma; goto err_free_tdma;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment