Re: [PATCH 2/6] chcr: Remove malloc/free

2016-10-26 Thread Harsh Jain


On 21-10-2016 07:50, Herbert Xu wrote:
> On Thu, Oct 13, 2016 at 04:39:35PM +0530, Harsh Jain wrote:
>> Remove malloc/free in crypto operation and allocate memory via cra_ctxsize.
>> Added new structure chcr_wr to populate Work Request Header.
>> Fixes: 324429d74127 (chcr: Support for Chelsio's Crypto Hardware)
> Do you mean the reqsize as opposed to ctxsize since the latter is
> shared by all tfm users?
It's reqsize for hash algos (chcr_ahash_req_ctx struct ) and ctxsize for Cipher 
algos(ablk_ctx struct),As rrkey(reverse round key) is also same for all tfm.
>
> In any case, your patch doesn't seem to change the size setting?
Added new variables in old structure. Size setting related code is unchanged.
In v2  will break the patch to smaller one.
>
> Cheers,

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/6] chcr: Remove malloc/free

2016-10-20 Thread Herbert Xu
On Thu, Oct 13, 2016 at 04:39:35PM +0530, Harsh Jain wrote:
> Remove malloc/free in crypto operation and allocate memory via cra_ctxsize.
> Added new structure chcr_wr to populate Work Request Header.
> Fixes: 324429d74127 (chcr: Support for Chelsio's Crypto Hardware)

Do you mean the reqsize as opposed to ctxsize since the latter is
shared by all tfm users?

In any case, your patch doesn't seem to change the size setting?

Cheers,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/6] chcr: Remove malloc/free

2016-10-13 Thread Harsh Jain
Remove malloc/free in crypto operation and allocate memory via cra_ctxsize.
Added new structure chcr_wr to populate Work Request Header.
Fixes: 324429d74127 (chcr: Support for Chelsio's Crypto Hardware)

Reported-by: Dan Carpenter 
Signed-off-by: Jitendra Lulla 
---
 drivers/crypto/chelsio/chcr_algo.c   | 361 +--
 drivers/crypto/chelsio/chcr_algo.h   |  28 ++-
 drivers/crypto/chelsio/chcr_core.h   |  16 ++
 drivers/crypto/chelsio/chcr_crypto.h |  16 +-
 4 files changed, 210 insertions(+), 211 deletions(-)

diff --git a/drivers/crypto/chelsio/chcr_algo.c 
b/drivers/crypto/chelsio/chcr_algo.c
index 944c11f..d5e0066 100644
--- a/drivers/crypto/chelsio/chcr_algo.c
+++ b/drivers/crypto/chelsio/chcr_algo.c
@@ -150,8 +150,6 @@ int chcr_handle_resp(struct crypto_async_request *req, 
unsigned char *input,
   sizeof(struct cpl_fw6_pld),
   updated_digestsize);
}
-   kfree(ctx_req.ctx.ahash_ctx->dummy_payload_ptr);
-   ctx_req.ctx.ahash_ctx->dummy_payload_ptr = NULL;
break;
}
return 0;
@@ -414,8 +412,23 @@ static inline int get_cryptoalg_subtype(struct crypto_tfm 
*tfm)
return chcr_crypto_alg->type & CRYPTO_ALG_SUB_TYPE_MASK;
 }
 
+static inline void write_buffer_to_skb(struct sk_buff *skb,
+   unsigned int *frags,
+   char *bfr,
+   u8 bfr_len)
+{
+   skb->len += bfr_len;
+   skb->data_len += bfr_len;
+   skb->truesize += bfr_len;
+   get_page(virt_to_page(bfr));
+   skb_fill_page_desc(skb, *frags, virt_to_page(bfr),
+  offset_in_page(bfr), bfr_len);
+   (*frags)++;
+}
+
+
 static inline void
-write_sg_data_page_desc(struct sk_buff *skb, unsigned int *frags,
+write_sg_to_skb(struct sk_buff *skb, unsigned int *frags,
struct scatterlist *sg, unsigned int count)
 {
struct page *spage;
@@ -424,8 +437,9 @@ write_sg_data_page_desc(struct sk_buff *skb, unsigned int 
*frags,
skb->len += count;
skb->data_len += count;
skb->truesize += count;
+
while (count > 0) {
-   if (sg && (!(sg->length)))
+   if (!sg || (!(sg->length)))
break;
spage = sg_page(sg);
get_page(spage);
@@ -441,29 +455,24 @@ static int generate_copy_rrkey(struct ablk_ctx *ablkctx,
   struct _key_ctx *key_ctx)
 {
if (ablkctx->ciph_mode == CHCR_SCMD_CIPHER_MODE_AES_CBC) {
-   get_aes_decrypt_key(key_ctx->key, ablkctx->key,
-   ablkctx->enckey_len << 3);
-   memset(key_ctx->key + ablkctx->enckey_len, 0,
-  CHCR_AES_MAX_KEY_LEN - ablkctx->enckey_len);
+   memcpy(key_ctx->key, ablkctx->rrkey, ablkctx->enckey_len);
} else {
memcpy(key_ctx->key,
   ablkctx->key + (ablkctx->enckey_len >> 1),
   ablkctx->enckey_len >> 1);
-   get_aes_decrypt_key(key_ctx->key + (ablkctx->enckey_len >> 1),
-   ablkctx->key, ablkctx->enckey_len << 2);
+   memcpy(key_ctx->key + (ablkctx->enckey_len >> 1),
+  ablkctx->rrkey, ablkctx->enckey_len >> 1);
}
return 0;
 }
 
 static inline void create_wreq(struct chcr_context *ctx,
-  struct fw_crypto_lookaside_wr *wreq,
+  struct chcr_wr *chcr_req,
   void *req, struct sk_buff *skb,
   int kctx_len, int hash_sz,
   unsigned int phys_dsgl)
 {
struct uld_ctx *u_ctx = ULD_CTX(ctx);
-   struct ulp_txpkt *ulptx = (struct ulp_txpkt *)(wreq + 1);
-   struct ulptx_idata *sc_imm = (struct ulptx_idata *)(ulptx + 1);
int iv_loc = IV_DSGL;
int qid = u_ctx->lldi.rxq_ids[ctx->tx_channel_id];
unsigned int immdatalen = 0, nr_frags = 0;
@@ -475,24 +484,27 @@ static inline void create_wreq(struct chcr_context *ctx,
nr_frags = skb_shinfo(skb)->nr_frags;
}
 
-   wreq->op_to_cctx_size = FILL_WR_OP_CCTX_SIZE(immdatalen,
-(kctx_len >> 4));
-   wreq->pld_size_hash_size =
+   chcr_req->wreq.op_to_cctx_size = FILL_WR_OP_CCTX_SIZE(immdatalen,
+   ((sizeof(chcr_req->key_ctx) + kctx_len) >> 4));
+   chcr_req->wreq.pld_size_hash_size =
htonl(FW_CRYPTO_LOOKASIDE_WR_PLD_SIZE_V(sgl_lengths[nr_frags]) |
  FW_CRYPTO_LOOKASIDE_WR_HASH_SIZE_V(hash_sz));
-   wreq->len16_pkd = htonl(FW_CRYPTO_LOOKASIDE_WR_LEN16_V(DIV_ROUND_UP(
+   chcr_req->wreq.len16_pkd =
+   htonl(FW_CRYPTO_LOOKASIDE_WR_LEN16_V(DIV