X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fcrypto%2Fdpaa_sec%2Fdpaa_sec.c;h=39533a9cc0ddaf945ba6c362c7a5787db54a9434;hb=929a91e99c22c022342382779f3a06ddaabb2ff5;hp=2e77a8af80101f0730d62d7907ab5c05d5ea6876;hpb=a1173d55598c5dec9f1d305db9df743e784c9c55;p=dpdk.git diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index 2e77a8af80..39533a9cc0 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -1683,15 +1683,18 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops, nb_ops = loop; goto send_pkts; } - if (unlikely(!ses->qp)) { + if (unlikely(!ses->qp[rte_lcore_id() % MAX_DPAA_CORES])) { if (dpaa_sec_attach_sess_q(qp, ses)) { frames_to_send = loop; nb_ops = loop; goto send_pkts; } - } else if (unlikely(ses->qp != qp)) { + } else if (unlikely(ses->qp[rte_lcore_id() % + MAX_DPAA_CORES] != qp)) { DPAA_SEC_DP_ERR("Old:sess->qp = %p" - " New qp = %p\n", ses->qp, qp); + " New qp = %p\n", + ses->qp[rte_lcore_id() % + MAX_DPAA_CORES], qp); frames_to_send = loop; nb_ops = loop; goto send_pkts; @@ -1743,7 +1746,7 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops, } fd = &fds[loop]; - inq[loop] = ses->inq; + inq[loop] = ses->inq[rte_lcore_id() % MAX_DPAA_CORES]; fd->opaque_addr = 0; fd->cmd = 0; qm_fd_addr_set64(fd, dpaa_mem_vtop(cf->sg)); @@ -1969,7 +1972,7 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess) { int ret; - sess->qp = qp; + sess->qp[rte_lcore_id() % MAX_DPAA_CORES] = qp; ret = dpaa_sec_prep_cdb(sess); if (ret) { DPAA_SEC_ERR("Unable to prepare sec cdb"); @@ -1982,7 +1985,8 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess) return ret; } } - ret = dpaa_sec_init_rx(sess->inq, dpaa_mem_vtop(&sess->cdb), + ret = dpaa_sec_init_rx(sess->inq[rte_lcore_id() % MAX_DPAA_CORES], + dpaa_mem_vtop(&sess->cdb), qman_fq_fqid(&qp->outq)); if (ret) DPAA_SEC_ERR("Unable to init sec queue"); @@ -1996,6 +2000,7 @@ dpaa_sec_set_session_parameters(struct rte_cryptodev *dev, { struct dpaa_sec_dev_private *internals = dev->data->dev_private; dpaa_sec_session *session = sess; + uint32_t i; PMD_INIT_FUNC_TRACE(); @@ -2052,12 +2057,15 @@ dpaa_sec_set_session_parameters(struct rte_cryptodev *dev, } session->ctx_pool = internals->ctx_pool; rte_spinlock_lock(&internals->lock); - session->inq = dpaa_sec_attach_rxq(internals); - rte_spinlock_unlock(&internals->lock); - if (session->inq == NULL) { - DPAA_SEC_ERR("unable to attach sec queue"); - goto err1; + for (i = 0; i < MAX_DPAA_CORES; i++) { + session->inq[i] = dpaa_sec_attach_rxq(internals); + if (session->inq[i] == NULL) { + DPAA_SEC_ERR("unable to attach sec queue"); + rte_spinlock_unlock(&internals->lock); + goto err1; + } } + rte_spinlock_unlock(&internals->lock); return 0; @@ -2117,8 +2125,9 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, if (sess_priv) { struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); - if (s->inq) - dpaa_sec_detach_rxq(qi, s->inq); + if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) + dpaa_sec_detach_rxq(qi, + s->inq[rte_lcore_id() % MAX_DPAA_CORES]); rte_free(s->cipher_key.data); rte_free(s->auth_key.data); memset(s, 0, sizeof(dpaa_sec_session)); @@ -2137,6 +2146,7 @@ dpaa_sec_set_ipsec_session(__rte_unused struct rte_cryptodev *dev, struct rte_crypto_auth_xform *auth_xform = NULL; struct rte_crypto_cipher_xform *cipher_xform = NULL; dpaa_sec_session *session = (dpaa_sec_session *)sess; + uint32_t i; PMD_INIT_FUNC_TRACE(); @@ -2256,12 +2266,15 @@ dpaa_sec_set_ipsec_session(__rte_unused struct rte_cryptodev *dev, goto out; session->ctx_pool = internals->ctx_pool; rte_spinlock_lock(&internals->lock); - session->inq = dpaa_sec_attach_rxq(internals); - rte_spinlock_unlock(&internals->lock); - if (session->inq == NULL) { - DPAA_SEC_ERR("unable to attach sec queue"); - goto out; + for (i = 0; i < MAX_DPAA_CORES; i++) { + session->inq[i] = dpaa_sec_attach_rxq(internals); + if (session->inq[i] == NULL) { + DPAA_SEC_ERR("unable to attach sec queue"); + rte_spinlock_unlock(&internals->lock); + goto out; + } } + rte_spinlock_unlock(&internals->lock); return 0; out: @@ -2282,6 +2295,7 @@ dpaa_sec_set_pdcp_session(struct rte_cryptodev *dev, struct rte_crypto_cipher_xform *cipher_xform = NULL; dpaa_sec_session *session = (dpaa_sec_session *)sess; struct dpaa_sec_dev_private *dev_priv = dev->data->dev_private; + uint32_t i; PMD_INIT_FUNC_TRACE(); @@ -2363,12 +2377,15 @@ dpaa_sec_set_pdcp_session(struct rte_cryptodev *dev, session->ctx_pool = dev_priv->ctx_pool; rte_spinlock_lock(&dev_priv->lock); - session->inq = dpaa_sec_attach_rxq(dev_priv); - rte_spinlock_unlock(&dev_priv->lock); - if (session->inq == NULL) { - DPAA_SEC_ERR("unable to attach sec queue"); - goto out; + for (i = 0; i < MAX_DPAA_CORES; i++) { + session->inq[i] = dpaa_sec_attach_rxq(dev_priv); + if (session->inq[i] == NULL) { + DPAA_SEC_ERR("unable to attach sec queue"); + rte_spinlock_unlock(&dev_priv->lock); + goto out; + } } + rte_spinlock_unlock(&dev_priv->lock); return 0; out: rte_free(session->auth_key.data); @@ -2452,7 +2469,7 @@ dpaa_sec_dev_configure(struct rte_cryptodev *dev, PMD_INIT_FUNC_TRACE(); internals = dev->data->dev_private; - sprintf(str, "ctx_pool_%d", dev->data->dev_id); + snprintf(str, sizeof(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, @@ -2630,7 +2647,7 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev) flags = QMAN_FQ_FLAG_LOCKED | QMAN_FQ_FLAG_DYNAMIC_FQID | QMAN_FQ_FLAG_TO_DCPORTAL; - for (i = 0; i < internals->max_nb_sessions; i++) { + for (i = 0; i < MAX_DPAA_CORES * internals->max_nb_sessions; i++) { /* create rx qman fq for sessions*/ ret = qman_create_fq(0, flags, &internals->inq[i]); if (unlikely(ret != 0)) { @@ -2658,7 +2675,8 @@ cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv __rte_unused, int retval; - sprintf(cryptodev_name, "dpaa_sec-%d", dpaa_dev->id.dev_id); + snprintf(cryptodev_name, sizeof(cryptodev_name), "dpaa_sec-%d", + dpaa_dev->id.dev_id); cryptodev = rte_cryptodev_pmd_allocate(cryptodev_name, rte_socket_id()); if (cryptodev == NULL)