/** Get multi buffer session */ static struct aesni_mb_session * get_session(struct aesni_mb_qp *qp, struct rte_crypto_op *op) { struct aesni_mb_session *sess = NULL; if (op->sym->sess_type == RTE_CRYPTO_SYM_OP_WITH_SESSION) { if (unlikely(op->sym->session->dev_type != RTE_CRYPTODEV_AESNI_MB_PMD)) return NULL; sess = (struct aesni_mb_session *)op->sym->session->_private; } else { void *_sess = NULL; if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) return NULL; sess = (struct aesni_mb_session *) ((struct rte_cryptodev_sym_session *)_sess)->_private; if (unlikely(aesni_mb_set_session_parameters(qp->ops, sess, op->sym->xform) != 0)) { rte_mempool_put(qp->sess_mp, _sess); sess = NULL; } } return sess; }
/** Get multi buffer session */ static struct aesni_mb_session * get_session(struct aesni_mb_qp *qp, struct rte_crypto_op *crypto_op) { struct aesni_mb_session *sess; if (crypto_op->type == RTE_CRYPTO_OP_WITH_SESSION) { if (unlikely(crypto_op->session->type != RTE_CRYPTODEV_AESNI_MB_PMD)) return NULL; sess = (struct aesni_mb_session *)crypto_op->session->_private; } else { struct rte_cryptodev_session *c_sess = NULL; if (rte_mempool_get(qp->sess_mp, (void **)&c_sess)) return NULL; sess = (struct aesni_mb_session *)c_sess->_private; if (unlikely(aesni_mb_set_session_parameters(qp->ops, sess, crypto_op->xform) != 0)) return NULL; } return sess; }
/** Get multi buffer session */ static inline struct aesni_mb_session * get_session(struct aesni_mb_qp *qp, struct rte_crypto_op *op) { struct aesni_mb_session *sess = NULL; if (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) { if (likely(op->sym->session != NULL)) sess = (struct aesni_mb_session *) get_sym_session_private_data( op->sym->session, cryptodev_driver_id); } else { void *_sess = NULL; void *_sess_private_data = NULL; if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) return NULL; if (rte_mempool_get(qp->sess_mp, (void **)&_sess_private_data)) return NULL; sess = (struct aesni_mb_session *)_sess_private_data; if (unlikely(aesni_mb_set_session_parameters(qp->op_fns, sess, op->sym->xform) != 0)) { rte_mempool_put(qp->sess_mp, _sess); rte_mempool_put(qp->sess_mp, _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)) op->status = RTE_CRYPTO_OP_STATUS_INVALID_SESSION; return sess; }