crypto/dpaa2_sec: allocate context as per num segs
authorHemant Agrawal <hemant.agrawal@nxp.com>
Mon, 30 Sep 2019 14:41:01 +0000 (20:11 +0530)
committerAkhil Goyal <akhil.goyal@nxp.com>
Wed, 9 Oct 2019 09:50:12 +0000 (11:50 +0200)
DPAA2_SEC hardware can support any number of SG entries.
This patch allocate as many SG entries as are required.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c

index 1653245..b811f2f 100644 (file)
@@ -55,7 +55,7 @@ typedef uint64_t      dma_addr_t;
 #define FLE_POOL_NUM_BUFS      32000
 #define FLE_POOL_BUF_SIZE      256
 #define FLE_POOL_CACHE_SIZE    512
-#define FLE_SG_MEM_SIZE                2048
+#define FLE_SG_MEM_SIZE(num)   (FLE_POOL_BUF_SIZE + ((num) * 32))
 #define SEC_FLC_DHR_OUTBOUND   -114
 #define SEC_FLC_DHR_INBOUND    0
 
@@ -83,13 +83,14 @@ build_proto_compound_sg_fd(dpaa2_sec_session *sess,
                mbuf = sym_op->m_src;
 
        /* first FLE entry used to store mbuf and session ctxt */
-       fle = (struct qbman_fle *)rte_malloc(NULL, FLE_SG_MEM_SIZE,
+       fle = (struct qbman_fle *)rte_malloc(NULL,
+                       FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs),
                        RTE_CACHE_LINE_SIZE);
        if (unlikely(!fle)) {
                DPAA2_SEC_DP_ERR("Proto:SG: Memory alloc failed for SGE");
                return -1;
        }
-       memset(fle, 0, FLE_SG_MEM_SIZE);
+       memset(fle, 0, FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs));
        DPAA2_SET_FLE_ADDR(fle, (size_t)op);
        DPAA2_FLE_SAVE_CTXT(fle, (ptrdiff_t)priv);
 
@@ -312,13 +313,14 @@ build_authenc_gcm_sg_fd(dpaa2_sec_session *sess,
                mbuf = sym_op->m_src;
 
        /* first FLE entry used to store mbuf and session ctxt */
-       fle = (struct qbman_fle *)rte_malloc(NULL, FLE_SG_MEM_SIZE,
+       fle = (struct qbman_fle *)rte_malloc(NULL,
+                       FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs),
                        RTE_CACHE_LINE_SIZE);
        if (unlikely(!fle)) {
                DPAA2_SEC_ERR("GCM SG: Memory alloc failed for SGE");
                return -1;
        }
-       memset(fle, 0, FLE_SG_MEM_SIZE);
+       memset(fle, 0, FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs));
        DPAA2_SET_FLE_ADDR(fle, (size_t)op);
        DPAA2_FLE_SAVE_CTXT(fle, (size_t)priv);
 
@@ -608,13 +610,14 @@ build_authenc_sg_fd(dpaa2_sec_session *sess,
                mbuf = sym_op->m_src;
 
        /* first FLE entry used to store mbuf and session ctxt */
-       fle = (struct qbman_fle *)rte_malloc(NULL, FLE_SG_MEM_SIZE,
+       fle = (struct qbman_fle *)rte_malloc(NULL,
+                       FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs),
                        RTE_CACHE_LINE_SIZE);
        if (unlikely(!fle)) {
                DPAA2_SEC_ERR("AUTHENC SG: Memory alloc failed for SGE");
                return -1;
        }
-       memset(fle, 0, FLE_SG_MEM_SIZE);
+       memset(fle, 0, FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs));
        DPAA2_SET_FLE_ADDR(fle, (size_t)op);
        DPAA2_FLE_SAVE_CTXT(fle, (ptrdiff_t)priv);
 
@@ -901,13 +904,14 @@ static inline int build_auth_sg_fd(
        }
 
        mbuf = sym_op->m_src;
-       fle = (struct qbman_fle *)rte_malloc(NULL, FLE_SG_MEM_SIZE,
+       fle = (struct qbman_fle *)rte_malloc(NULL,
+                       FLE_SG_MEM_SIZE(mbuf->nb_segs),
                        RTE_CACHE_LINE_SIZE);
        if (unlikely(!fle)) {
                DPAA2_SEC_ERR("AUTH SG: Memory alloc failed for SGE");
                return -1;
        }
-       memset(fle, 0, FLE_SG_MEM_SIZE);
+       memset(fle, 0, FLE_SG_MEM_SIZE(mbuf->nb_segs));
        /* first FLE entry used to store mbuf and session ctxt */
        DPAA2_SET_FLE_ADDR(fle, (size_t)op);
        DPAA2_FLE_SAVE_CTXT(fle, (ptrdiff_t)priv);
@@ -1140,13 +1144,15 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,
        else
                mbuf = sym_op->m_src;
 
-       fle = (struct qbman_fle *)rte_malloc(NULL, FLE_SG_MEM_SIZE,
+       /* first FLE entry used to store mbuf and session ctxt */
+       fle = (struct qbman_fle *)rte_malloc(NULL,
+                       FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs),
                        RTE_CACHE_LINE_SIZE);
        if (!fle) {
                DPAA2_SEC_ERR("CIPHER SG: Memory alloc failed for SGE");
                return -1;
        }
-       memset(fle, 0, FLE_SG_MEM_SIZE);
+       memset(fle, 0, FLE_SG_MEM_SIZE(mbuf->nb_segs + sym_op->m_src->nb_segs));
        /* first FLE entry used to store mbuf and session ctxt */
        DPAA2_SET_FLE_ADDR(fle, (size_t)op);
        DPAA2_FLE_SAVE_CTXT(fle, (ptrdiff_t)priv);