crypto: allwinner - Fix the parameter of dma_unmap_sg()
authorXiang Chen <chenxiang66@hisilicon.com>
Tue, 16 Mar 2021 01:55:26 +0000 (09:55 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 26 Mar 2021 09:02:34 +0000 (20:02 +1100)
For function dma_unmap_sg(), the <nents> parameter should be number of
elements in the scatterlist prior to the mapping, not after the mapping.
So fix this usage.

Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Acked-by: Corentin LABBE <clabbe.montjoie@gmail.com>
Tested-by: Corentin LABBE <clabbe.montjoie@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c
drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c
drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c

index 33707a2..54ae8d1 100644 (file)
@@ -240,11 +240,14 @@ static int sun8i_ce_cipher_prepare(struct crypto_engine *engine, void *async_req
 
 theend_sgs:
        if (areq->src == areq->dst) {
-               dma_unmap_sg(ce->dev, areq->src, nr_sgs, DMA_BIDIRECTIONAL);
+               dma_unmap_sg(ce->dev, areq->src, sg_nents(areq->src),
+                            DMA_BIDIRECTIONAL);
        } else {
                if (nr_sgs > 0)
-                       dma_unmap_sg(ce->dev, areq->src, nr_sgs, DMA_TO_DEVICE);
-               dma_unmap_sg(ce->dev, areq->dst, nr_sgd, DMA_FROM_DEVICE);
+                       dma_unmap_sg(ce->dev, areq->src, sg_nents(areq->src),
+                                    DMA_TO_DEVICE);
+               dma_unmap_sg(ce->dev, areq->dst, sg_nents(areq->dst),
+                            DMA_FROM_DEVICE);
        }
 
 theend_iv:
index 2f09a37..8819471 100644 (file)
@@ -405,7 +405,8 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, void *breq)
        err = sun8i_ce_run_task(ce, flow, crypto_tfm_alg_name(areq->base.tfm));
 
        dma_unmap_single(ce->dev, addr_pad, j * 4, DMA_TO_DEVICE);
-       dma_unmap_sg(ce->dev, areq->src, nr_sgs, DMA_TO_DEVICE);
+       dma_unmap_sg(ce->dev, areq->src, sg_nents(areq->src),
+                    DMA_TO_DEVICE);
        dma_unmap_single(ce->dev, addr_res, digestsize, DMA_FROM_DEVICE);
 
 
index ed2a69f..f945750 100644 (file)
@@ -232,10 +232,13 @@ sgd_next:
 
 theend_sgs:
        if (areq->src == areq->dst) {
-               dma_unmap_sg(ss->dev, areq->src, nr_sgs, DMA_BIDIRECTIONAL);
+               dma_unmap_sg(ss->dev, areq->src, sg_nents(areq->src),
+                            DMA_BIDIRECTIONAL);
        } else {
-               dma_unmap_sg(ss->dev, areq->src, nr_sgs, DMA_TO_DEVICE);
-               dma_unmap_sg(ss->dev, areq->dst, nr_sgd, DMA_FROM_DEVICE);
+               dma_unmap_sg(ss->dev, areq->src, sg_nents(areq->src),
+                            DMA_TO_DEVICE);
+               dma_unmap_sg(ss->dev, areq->dst, sg_nents(areq->dst),
+                            DMA_FROM_DEVICE);
        }
 
 theend_iv:
index 0b9aa24..7d1fc9a 100644 (file)
@@ -432,7 +432,8 @@ int sun8i_ss_hash_run(struct crypto_engine *engine, void *breq)
        err = sun8i_ss_run_hash_task(ss, rctx, crypto_tfm_alg_name(areq->base.tfm));
 
        dma_unmap_single(ss->dev, addr_pad, j * 4, DMA_TO_DEVICE);
-       dma_unmap_sg(ss->dev, areq->src, nr_sgs, DMA_TO_DEVICE);
+       dma_unmap_sg(ss->dev, areq->src, sg_nents(areq->src),
+                    DMA_TO_DEVICE);
        dma_unmap_single(ss->dev, addr_res, digestsize, DMA_FROM_DEVICE);
 
        kfree(pad);