Le 21/09/2017 à 09:19, Christophe Leroy a écrit :
Use kzalloc() to zeroize the extended descriptor at allocation and
further zeorising

This patch significantly degrades performances.
I will submit a new serie soon.

Christophe


Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
---
  drivers/crypto/talitos.c | 23 +----------------------
  drivers/crypto/talitos.h |  2 --
  2 files changed, 1 insertion(+), 24 deletions(-)

diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index cd8a37e60259..a5b608b54c74 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -75,7 +75,6 @@ static void to_talitos_ptr_len(struct talitos_ptr *ptr, 
unsigned int len,
                               bool is_sec1)
  {
        if (is_sec1) {
-               ptr->res = 0;
                ptr->len1 = cpu_to_be16(len);
        } else {
                ptr->len = cpu_to_be16(len);
@@ -118,7 +117,6 @@ static void map_single_talitos_ptr(struct device *dev,
to_talitos_ptr_len(ptr, len, is_sec1);
        to_talitos_ptr(ptr, dma_addr, is_sec1);
-       to_talitos_ptr_ext_set(ptr, 0, is_sec1);
  }
/*
@@ -287,7 +285,6 @@ int talitos_submit(struct device *dev, int ch, struct 
talitos_desc *desc,
        /* map descriptor and save caller data */
        if (is_sec1) {
                desc->hdr1 = desc->hdr;
-               desc->next_desc = 0;
                request->dma_desc = dma_map_single(dev, &desc->hdr1,
                                                   TALITOS_DESC_SIZE,
                                                   DMA_BIDIRECTIONAL);
@@ -1099,7 +1096,6 @@ static int sg_to_link_tbl_offset(struct scatterlist *sg, 
int sg_count,
                to_talitos_ptr(link_tbl_ptr + count,
                               sg_dma_address(sg) + offset, 0);
                to_talitos_ptr_len(link_tbl_ptr + count, len, 0);
-               to_talitos_ptr_ext_set(link_tbl_ptr + count, 0, 0);
                count++;
                cryptlen -= len;
                offset = 0;
@@ -1125,7 +1121,6 @@ int talitos_sg_map(struct device *dev, struct scatterlist 
*src,
        bool is_sec1 = has_ftr_sec1(priv);
to_talitos_ptr_len(ptr, len, is_sec1);
-       to_talitos_ptr_ext_set(ptr, 0, is_sec1);
if (sg_count == 1) {
                to_talitos_ptr(ptr, sg_dma_address(src) + offset, is_sec1);
@@ -1197,11 +1192,9 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct 
aead_request *areq,
        if (desc->hdr & DESC_HDR_TYPE_IPSEC_ESP) {
                to_talitos_ptr(&desc->ptr[2], edesc->iv_dma, is_sec1);
                to_talitos_ptr_len(&desc->ptr[2], ivsize, is_sec1);
-               to_talitos_ptr_ext_set(&desc->ptr[2], 0, is_sec1);
        } else {
                to_talitos_ptr(&desc->ptr[3], edesc->iv_dma, is_sec1);
                to_talitos_ptr_len(&desc->ptr[3], ivsize, is_sec1);
-               to_talitos_ptr_ext_set(&desc->ptr[3], 0, is_sec1);
        }
/* cipher key */
@@ -1221,7 +1214,6 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct 
aead_request *areq,
         * typically 12 for ipsec
         */
        to_talitos_ptr_len(&desc->ptr[4], cryptlen, is_sec1);
-       to_talitos_ptr_ext_set(&desc->ptr[4], 0, is_sec1);
sg_link_tbl_len = cryptlen; @@ -1275,8 +1267,6 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
                        to_talitos_ptr(tbl_ptr, edesc->dma_link_tbl + offset,
                                       is_sec1);
                }
-       } else {
-               edesc->icv_ool = false;
        }
/* ICV data */
@@ -1386,7 +1376,7 @@ static struct talitos_edesc *talitos_edesc_alloc(struct 
device *dev,
                alloc_len += icv_stashing ? authsize : 0;
        }
- edesc = kmalloc(alloc_len, GFP_DMA | flags);
+       edesc = kzalloc(alloc_len, GFP_DMA | flags);
        if (!edesc) {
                dev_err(dev, "could not allocate edescriptor\n");
                err = ERR_PTR(-ENOMEM);
@@ -1467,7 +1457,6 @@ static int aead_decrypt(struct aead_request *req)
                                  DESC_HDR_MODE1_MDEU_CICV;
/* reset integrity check result bits */
-               edesc->desc.hdr_lo = 0;
return ipsec_esp(edesc, req, ipsec_esp_decrypt_hwauth_done);
        }
@@ -1554,12 +1543,10 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
        bool is_sec1 = has_ftr_sec1(priv);
/* first DWORD empty */
-       desc->ptr[0] = zero_entry;
/* cipher iv */
        to_talitos_ptr(&desc->ptr[1], edesc->iv_dma, is_sec1);
        to_talitos_ptr_len(&desc->ptr[1], ivsize, is_sec1);
-       to_talitos_ptr_ext_set(&desc->ptr[1], 0, is_sec1);
/* cipher key */
        map_single_talitos_ptr(dev, &desc->ptr[2], ctx->keylen,
@@ -1598,7 +1585,6 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
                               DMA_FROM_DEVICE);
/* last DWORD empty */
-       desc->ptr[6] = zero_entry;
if (sync_needed)
                dma_sync_single_for_device(dev, edesc->dma_link_tbl,
@@ -1744,7 +1730,6 @@ static int common_nonsnoop_hash(struct talitos_edesc 
*edesc,
        int sg_count;
/* first DWORD empty */
-       desc->ptr[0] = zero_entry;
/* hash context in */
        if (!req_ctx->first || req_ctx->swinit) {
@@ -1753,8 +1738,6 @@ static int common_nonsnoop_hash(struct talitos_edesc 
*edesc,
                                       (char *)req_ctx->hw_context,
                                       DMA_TO_DEVICE);
                req_ctx->swinit = 0;
-       } else {
-               desc->ptr[1] = zero_entry;
        }
        /* Indicate next op is not the first. */
        req_ctx->first = 0;
@@ -1763,8 +1746,6 @@ static int common_nonsnoop_hash(struct talitos_edesc 
*edesc,
        if (ctx->keylen)
                map_single_talitos_ptr(dev, &desc->ptr[2], ctx->keylen,
                                       (char *)&ctx->key, DMA_TO_DEVICE);
-       else
-               desc->ptr[2] = zero_entry;
sg_count = edesc->src_nents ?: 1;
        if (is_sec1 && sg_count > 1)
@@ -1781,7 +1762,6 @@ static int common_nonsnoop_hash(struct talitos_edesc 
*edesc,
                sync_needed = true;
/* fifth DWORD empty */
-       desc->ptr[4] = zero_entry;
/* hash/HMAC out -or- hash context out */
        if (req_ctx->last)
@@ -1794,7 +1774,6 @@ static int common_nonsnoop_hash(struct talitos_edesc 
*edesc,
                                       req_ctx->hw_context, DMA_FROM_DEVICE);
/* last DWORD empty */
-       desc->ptr[6] = zero_entry;
if (is_sec1 && from_talitos_ptr_len(&desc->ptr[3], true) == 0)
                talitos_handle_buggy_hash(ctx, edesc, &desc->ptr[3]);
diff --git a/drivers/crypto/talitos.h b/drivers/crypto/talitos.h
index 8dd8f40e2771..6112ff1fc334 100644
--- a/drivers/crypto/talitos.h
+++ b/drivers/crypto/talitos.h
@@ -52,8 +52,6 @@ struct talitos_ptr {
        __be32 ptr;     /* address */
  };
-static const struct talitos_ptr zero_entry;
-
  /* descriptor */
  struct talitos_desc {
        __be32 hdr;                     /* header high bits */

Reply via email to