Hi Fan, Check for below QAT fix also > > > > 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. And for this one diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_pmd.c index efda921c05..96cd9d2eee 100644 --- a/drivers/crypto/qat/qat_sym_pmd.c +++ b/drivers/crypto/qat/qat_sym_pmd.c @@ -306,6 +306,7 @@ static struct rte_security_ops security_qat_ops = {
.session_create = qat_security_session_create, .session_update = NULL, + .session_get_size = qat_security_session_get_size, .session_stats_get = NULL, .session_destroy = qat_security_session_destroy, .set_pkt_metadata = NULL, diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c index ef92f22c1a..41b5542343 100644 --- a/drivers/crypto/qat/qat_sym_session.c +++ b/drivers/crypto/qat/qat_sym_session.c @@ -2297,4 +2297,10 @@ qat_security_session_destroy(void *dev __rte_unused, void *sess_priv) } return 0; } + +static unsigned int +qat_security_session_get_size(void *device __rte_unused) +{ + return sizeof(struct qat_sym_session); +} #endif > > - 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.h > b/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.c > b/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, struct > rte_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, struct > kasumi_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; > }