crypto/dpaa_sec: move mempool allocation to config
[dpdk.git] / drivers / crypto / dpaa_sec / dpaa_sec.c
index a14e669..29af781 100644 (file)
@@ -95,7 +95,7 @@ dpaa_mem_vtop(void *vaddr)
 {
        const struct rte_memseg *ms;
 
-       ms = rte_mem_virt2memseg(vaddr);
+       ms = rte_mem_virt2memseg(vaddr, NULL);
        if (ms)
                return ms->iova + RTE_PTR_DIFF(vaddr, ms->addr);
        return (size_t)NULL;
@@ -1741,7 +1741,13 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess)
                PMD_DRV_LOG(ERR, "Unable to prepare sec cdb");
                return -1;
        }
-
+       if (unlikely(!RTE_PER_LCORE(dpaa_io))) {
+               ret = rte_dpaa_portal_init((void *)0);
+               if (ret) {
+                       PMD_DRV_LOG(ERR, "Failure in affining portal");
+                       return ret;
+               }
+       }
        ret = dpaa_sec_init_rx(sess->inq, dpaa_mem_vtop(&sess->cdb),
                               qman_fq_fqid(&qp->outq));
        if (ret)
@@ -2145,11 +2151,32 @@ dpaa_sec_security_session_destroy(void *dev __rte_unused,
 
 
 static int
-dpaa_sec_dev_configure(struct rte_cryptodev *dev __rte_unused,
+dpaa_sec_dev_configure(struct rte_cryptodev *dev,
                       struct rte_cryptodev_config *config __rte_unused)
 {
+
+       char str[20];
+       struct dpaa_sec_dev_private *internals;
+
        PMD_INIT_FUNC_TRACE();
 
+       internals = dev->data->dev_private;
+       sprintf(str, "ctx_pool_%d", dev->data->dev_id);
+       if (!internals->ctx_pool) {
+               internals->ctx_pool = rte_mempool_create((const char *)str,
+                                                       CTX_POOL_NUM_BUFS,
+                                                       CTX_POOL_BUF_SIZE,
+                                                       CTX_POOL_CACHE_SIZE, 0,
+                                                       NULL, NULL, NULL, NULL,
+                                                       SOCKET_ID_ANY, 0);
+               if (!internals->ctx_pool) {
+                       RTE_LOG(ERR, PMD, "%s create failed\n", str);
+                       return -ENOMEM;
+               }
+       } else
+               RTE_LOG(INFO, PMD, "mempool already created for dev_id : %d\n",
+                       dev->data->dev_id);
+
        return 0;
 }
 
@@ -2167,9 +2194,19 @@ dpaa_sec_dev_stop(struct rte_cryptodev *dev __rte_unused)
 }
 
 static int
-dpaa_sec_dev_close(struct rte_cryptodev *dev __rte_unused)
+dpaa_sec_dev_close(struct rte_cryptodev *dev)
 {
+       struct dpaa_sec_dev_private *internals;
+
        PMD_INIT_FUNC_TRACE();
+
+       if (dev == NULL)
+               return -ENOMEM;
+
+       internals = dev->data->dev_private;
+       rte_mempool_free(internals->ctx_pool);
+       internals->ctx_pool = NULL;
+
        return 0;
 }
 
@@ -2228,13 +2265,15 @@ struct rte_security_ops dpaa_sec_security_ops = {
 static int
 dpaa_sec_uninit(struct rte_cryptodev *dev)
 {
-       struct dpaa_sec_dev_private *internals = dev->data->dev_private;
+       struct dpaa_sec_dev_private *internals;
 
        if (dev == NULL)
                return -ENODEV;
 
+       internals = dev->data->dev_private;
        rte_free(dev->security_ctx);
 
+       /* In case close has been called, internals->ctx_pool would be NULL */
        rte_mempool_free(internals->ctx_pool);
        rte_free(internals);
 
@@ -2252,7 +2291,6 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev)
        struct dpaa_sec_qp *qp;
        uint32_t i, flags;
        int ret;
-       char str[20];
 
        PMD_INIT_FUNC_TRACE();
 
@@ -2312,18 +2350,6 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev)
                }
        }
 
-       sprintf(str, "ctx_pool_%d", cryptodev->data->dev_id);
-       internals->ctx_pool = rte_mempool_create((const char *)str,
-                       CTX_POOL_NUM_BUFS,
-                       CTX_POOL_BUF_SIZE,
-                       CTX_POOL_CACHE_SIZE, 0,
-                       NULL, NULL, NULL, NULL,
-                       SOCKET_ID_ANY, 0);
-       if (!internals->ctx_pool) {
-               RTE_LOG(ERR, PMD, "%s create failed\n", str);
-               goto init_error;
-       }
-
        PMD_INIT_LOG(DEBUG, "driver %s: created\n", cryptodev->data->name);
        return 0;
 
@@ -2427,5 +2453,5 @@ static struct rte_dpaa_driver rte_dpaa_sec_driver = {
 static struct cryptodev_driver dpaa_sec_crypto_drv;
 
 RTE_PMD_REGISTER_DPAA(CRYPTODEV_NAME_DPAA_SEC_PMD, rte_dpaa_sec_driver);
-RTE_PMD_REGISTER_CRYPTO_DRIVER(dpaa_sec_crypto_drv, rte_dpaa_sec_driver,
+RTE_PMD_REGISTER_CRYPTO_DRIVER(dpaa_sec_crypto_drv, rte_dpaa_sec_driver.driver,
                cryptodev_driver_id);