+static inline void
+free_sym_session_data(const struct cpt_instance *instance,
+ struct rte_crypto_op *cop)
+{
+ void *sess_private_data_t = get_sym_session_private_data(
+ cop->sym->session, otx_cryptodev_driver_id);
+ memset(sess_private_data_t, 0, cpt_get_session_size());
+ memset(cop->sym->session, 0,
+ rte_cryptodev_sym_get_existing_header_session_size(
+ cop->sym->session));
+ rte_mempool_put(instance->sess_mp_priv, sess_private_data_t);
+ rte_mempool_put(instance->sess_mp, cop->sym->session);
+ cop->sym->session = NULL;
+}
+
+static __rte_always_inline struct rte_crypto_op *
+otx_cpt_process_response(const struct cpt_instance *instance, uintptr_t *rsp,
+ uint8_t cc, const uint8_t op_type)
+{
+ struct rte_crypto_op *cop;
+ void *metabuf;
+
+ metabuf = (void *)rsp[0];
+ cop = (void *)rsp[1];
+
+ /* Check completion code */
+ if (likely(cc == 0)) {
+ /* H/w success pkt. Post process */
+ otx_cpt_dequeue_post_process(cop, rsp, op_type);
+ } else if (cc == ERR_GC_ICV_MISCOMPARE) {
+ /* auth data mismatch */
+ cop->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
+ } else {
+ /* Error */
+ cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+ }
+
+ if (unlikely(cop->sess_type == RTE_CRYPTO_OP_SESSIONLESS))
+ free_sym_session_data(instance, cop);
+ free_op_meta(metabuf, instance->meta_info.pool);
+
+ return cop;
+}
+
+static __rte_always_inline uint16_t __rte_hot