crypto: omap-sham - set sw fallback to 240 bytes
authorBin Liu <b-liu@ti.com>
Wed, 22 Jun 2016 13:23:37 +0000 (16:23 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 24 Jun 2016 13:24:58 +0000 (21:24 +0800)
Adds software fallback support for small crypto requests. In these cases,
it is undesirable to use DMA, as setting it up itself is rather heavy
operation. Gives about 40% extra performance in ipsec usecase.

Signed-off-by: Bin Liu <b-liu@ti.com>
[t-kristo@ti.com: dropped the extra traces, updated some comments
 on the code]
Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/omap-sham.c

index 3321f003f4655ed1c14e3cf6073137d69535d7ed..ae6f841f81ffa68fddf44a3e64f309df654d8198 100644 (file)
@@ -1095,7 +1095,7 @@ static int omap_sham_update(struct ahash_request *req)
        ctx->offset = 0;
 
        if (ctx->flags & BIT(FLAGS_FINUP)) {
-               if ((ctx->digcnt + ctx->bufcnt + ctx->total) < 9) {
+               if ((ctx->digcnt + ctx->bufcnt + ctx->total) < 240) {
                        /*
                        * OMAP HW accel works only with buffers >= 9
                        * will switch to bypass in final()
@@ -1151,9 +1151,13 @@ static int omap_sham_final(struct ahash_request *req)
        if (ctx->flags & BIT(FLAGS_ERROR))
                return 0; /* uncompleted hash is not needed */
 
-       /* OMAP HW accel works only with buffers >= 9 */
-       /* HMAC is always >= 9 because ipad == block size */
-       if ((ctx->digcnt + ctx->bufcnt) < 9)
+       /*
+        * OMAP HW accel works only with buffers >= 9.
+        * HMAC is always >= 9 because ipad == block size.
+        * If buffersize is less than 240, we use fallback SW encoding,
+        * as using DMA + HW in this case doesn't provide any benefit.
+        */
+       if ((ctx->digcnt + ctx->bufcnt) < 240)
                return omap_sham_final_shash(req);
        else if (ctx->bufcnt)
                return omap_sham_enqueue(req, OP_FINAL);