Re: [dpdk-dev] [PATCH v2 0/7] crypto/security session framework rework
From: Zhang, Roy Fan <hidden>
Date: 2021-10-15 08:12:24
Hi Akhil, It shall work but Kasumi tests are passing :-) It is snow3g and aesni-mb/gcm that are failing. Thanks Regards, Fan
quoted hunk ↗ jump to hunk
-----Original Message----- From: Akhil Goyal <redacted> Sent: Thursday, October 14, 2021 7:24 PM To: Zhang, Roy Fan <redacted>; dev@dpdk.org Cc: thomas@monjalon.net; david.marchand@redhat.com; hemant.agrawal@nxp.com; Anoob Joseph [off-list ref]; De Lara Guarch, Pablo [off-list ref]; Trahe, Fiona [off-list ref]; Doherty, Declan [off-list ref]; matan@nvidia.com; g.singh@nxp.com; jianjay.zhou@huawei.com; asomalap@amd.com; ruifeng.wang@arm.com; Ananyev, Konstantin [off-list ref]; Nicolau, Radu [off-list ref]; ajit.khaparde@broadcom.com; Nagadheeraj Rottela [off-list ref]; Ankur Dwivedi [off-list ref]; Power, Ciara [off-list ref]; Wang, Haiyue [off-list ref]; jiawenwu@trustnetic.com; jianwang@trustnetic.com Subject: RE: [PATCH v2 0/7] crypto/security session framework rework Hi Fan,quoted
Unfortunately the patches still cause seg-fault at QAT and SW PMDs. - for qat it fails at rte_security_ops->session_size_get not implemented. - for sw pmds the queue pair's session private mempools are not set.Can you check if below change works for Kasumi. I will replicate for others.diff --git a/drivers/crypto/kasumi/kasumi_pmd_private.hb/drivers/crypto/kasumi/kasumi_pmd_private.h index abedcd616d..fe0e78e516 100644--- a/drivers/crypto/kasumi/kasumi_pmd_private.h +++ b/drivers/crypto/kasumi/kasumi_pmd_private.h@@ -38,8 +38,6 @@ struct kasumi_qp { /**< Ring for placing processed ops */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ struct rte_cryptodev_stats qp_stats; /**< Queue pair statistics */ uint8_t temp_digest[KASUMI_DIGEST_LENGTH];diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.cb/drivers/crypto/kasumi/rte_kasumi_pmd.c index d6f927417a..1fc59c8b8a 100644--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c +++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c@@ -139,27 +139,24 @@ kasumi_get_session(struct kasumi_qp *qp, structrte_crypto_op *op) op->sym->session, cryptodev_driver_id); } else { - void *_sess = NULL; - void *_sess_private_data = NULL; + struct rte_cryptodev_sym_session *_sess = NULL; - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) + /* Create temporary session */ + _sess = rte_cryptodev_sym_session_create(qp->sess_mp); + if (_sess == NULL) return NULL; - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; - - sess = (struct kasumi_session *)_sess_private_data; - + _sess->sess_data[cryptodev_driver_id].data = + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); + sess = _sess->sess_data[cryptodev_driver_id].data; if (unlikely(kasumi_set_session_parameters(qp->mgr, sess, op->sym->xform) != 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess = NULL; } op->sym->session = (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(op->sym->session, - cryptodev_driver_id, _sess_private_data); } if (unlikely(sess == NULL))@@ -327,7 +324,6 @@ process_ops(struct rte_crypto_op **ops, structkasumi_session *session, memset(ops[i]->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( ops[i]->sym->session)); - rte_mempool_put(qp->sess_mp_priv, session); rte_mempool_put(qp->sess_mp, ops[i]->sym->session); ops[i]->sym->session = NULL; }