Skip to contentSkip to conversation

crypto/aesni_mb: process crypto operation in dequeue function

PATCH New Declan Doherty 2 participants 3 messages Mar 3, 2017 – Mar 30, 2017 Crypto API

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 crypto/aesni_mb: process crypto operation in dequeue function

From: "De Lara Guarch, Pablo" <[email protected]>

moving the crypto processing from the enqueue burst to the dequeue burst, to remove the requirement to continually call the rte_cryptodev_burst_enqueue function to guarantee that all operations get flushed from the multi-buffer managers buffers.

---
 drivers/crypto/aesni_mb/aesni_mb_ops.h             |   4 +-
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c         | 273 ++++++++++++---------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c     |  57 +++--
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h |   8 +-
 4 files changed, 193 insertions(+), 149 deletions(-)
drivers/crypto/aesni_mb/aesni_mb_ops.h +2 -2
index 2d41d73..3307c0b 100644
@@ -67,7 +67,7 @@ typedef void (*aes_xcbc_expand_key_t)
 		(void *key, void *exp_k1, void *k2, void *k3);
 
 /** Multi-buffer library function pointer table */
-struct aesni_mb_ops {
+struct aesni_mb_op_fns {
 	struct {
 		init_mb_mgr_t init_mgr;
 		/**< Initialise scheduler  */
@@ -116,7 +116,7 @@ struct aesni_mb_ops {
 };
 
 
-static const struct aesni_mb_ops job_ops[] = {
+static const struct aesni_mb_op_fns job_ops[] = {
 		[RTE_AESNI_MB_NOT_SUPPORTED] = {
 			.job = {
 				NULL
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c +154 -119

397 lines not on this page · raw message

drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c +33 -24

77 lines not on this page · raw message

drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h +4 -4
index eb4b2ad..faec08b 100644
@@ -151,12 +151,12 @@ struct aesni_mb_qp {
 	/**< Queue Pair Identifier */
 	char name[RTE_CRYPTODEV_NAME_LEN];
 	/**< Unique Queue Pair Name */
-	const struct aesni_mb_ops *ops;
+	const struct aesni_mb_op_fns *op_fns;
 	/**< Vector mode dependent pointer table of the multi-buffer APIs */
 	MB_MGR mb_mgr;
 	/**< Multi-buffer instance */
-	struct rte_ring *processed_ops;
-	/**< Ring for placing process operations */
+       struct rte_ring *ingress_queue;
+       /**< Ring for placing operations ready for processing */
 	struct rte_mempool *sess_mp;
 	/**< Session Mempool */
 	struct rte_cryptodev_stats stats;
@@ -227,7 +227,7 @@ struct aesni_mb_session {
  *
  */
 extern int
-aesni_mb_set_session_parameters(const struct aesni_mb_ops *mb_ops,
+aesni_mb_set_session_parameters(const struct aesni_mb_op_fns *mb_ops,
 		struct aesni_mb_session *sess,
 		const struct rte_crypto_sym_xform *xform);
 
Signature · 1 line
2.9.3
#1 lore raw

PATCH v2 1/1 crypto/aesni_mb: process crypto op on dequeue

moving the crypto processing from the enqueue burst to the dequeue burst, to remove the requirement to continually call the rte_cryptodev_burst_enqueue function to guarantee that all operations get flushed from the multi-buffer managers buffers.

---
v2 changes:
- fixed all checkpatch issues
- rebase to head of dpdk-next-crypto

drivers/crypto/aesni_mb/aesni_mb_ops.h | 4 +-

 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c         | 269 ++++++++++++---------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c     |  30 ++-
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h |   8 +-
 4 files changed, 177 insertions(+), 134 deletions(-)
drivers/crypto/aesni_mb/aesni_mb_ops.h +2 -2
index 2d41d73..3307c0b 100644
@@ -67,7 +67,7 @@ typedef void (*aes_xcbc_expand_key_t)
 		(void *key, void *exp_k1, void *k2, void *k3);
 
 /** Multi-buffer library function pointer table */
-struct aesni_mb_ops {
+struct aesni_mb_op_fns {
 	struct {
 		init_mb_mgr_t init_mgr;
 		/**< Initialise scheduler  */
@@ -116,7 +116,7 @@ struct aesni_mb_ops {
 };
 
 
-static const struct aesni_mb_ops job_ops[] = {
+static const struct aesni_mb_op_fns job_ops[] = {
 		[RTE_AESNI_MB_NOT_SUPPORTED] = {
 			.job = {
 				NULL
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c +152 -117

394 lines not on this page · raw message

drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c +19 -11
index d2bae19..ec13c56 100644
@@ -343,24 +343,32 @@ aesni_mb_pmd_qp_set_unique_name(struct rte_cryptodev *dev,
 /** Create a ring to place processed operations on */
 static struct rte_ring *
 aesni_mb_pmd_qp_create_processed_ops_ring(struct aesni_mb_qp *qp,
-		unsigned ring_size, int socket_id)
+		const char *str, unsigned int ring_size, int socket_id)
 {
 	struct rte_ring *r;
+	char ring_name[RTE_CRYPTODEV_NAME_LEN];
 
-	r = rte_ring_lookup(qp->name);
+	unsigned int n = snprintf(ring_name, sizeof(ring_name),
+				"%s_%s",
+				qp->name, str);
+
+	if (n > sizeof(ring_name))
+		return NULL;
+
+	r = rte_ring_lookup(ring_name);
 	if (r) {
 		if (rte_ring_get_size(r) >= ring_size) {
 			MB_LOG_INFO("Reusing existing ring %s for processed ops",
-					 qp->name);
+			ring_name);
 			return r;
 		}
 
 		MB_LOG_ERR("Unable to reuse existing ring %s for processed ops",
-				 qp->name);
+			ring_name);
 		return NULL;
 	}
 
-	return rte_ring_create(qp->name, ring_size, socket_id,
+	return rte_ring_create(ring_name, ring_size, socket_id,
 			RING_F_SP_ENQ | RING_F_SC_DEQ);
 }
 
@@ -389,11 +397,12 @@ aesni_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
 	if (aesni_mb_pmd_qp_set_unique_name(dev, qp))
 		goto qp_setup_cleanup;
 
-	qp->ops = &job_ops[internals->vector_mode];
 
-	qp->processed_ops = aesni_mb_pmd_qp_create_processed_ops_ring(qp,
-			qp_conf->nb_descriptors, socket_id);
-	if (qp->processed_ops == NULL)
+	qp->op_fns = &job_ops[internals->vector_mode];
+
+	qp->ingress_queue = aesni_mb_pmd_qp_create_processed_ops_ring(qp,
+			"ingress", qp_conf->nb_descriptors, socket_id);
+	if (qp->ingress_queue == NULL)
 		goto qp_setup_cleanup;
 
 	qp->sess_mp = dev->data->session_pool;
@@ -401,8 +410,7 @@ aesni_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
 	memset(&qp->stats, 0, sizeof(qp->stats));
 
 	/* Initialise multi-buffer manager */
-	(*qp->ops->job.init_mgr)(&qp->mb_mgr);
-
+	(*qp->op_fns->job.init_mgr)(&qp->mb_mgr);
 	return 0;
 
 qp_setup_cleanup:
drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h +4 -4
index eb4b2ad..0d82699 100644
@@ -151,12 +151,12 @@ struct aesni_mb_qp {
 	/**< Queue Pair Identifier */
 	char name[RTE_CRYPTODEV_NAME_LEN];
 	/**< Unique Queue Pair Name */
-	const struct aesni_mb_ops *ops;
+	const struct aesni_mb_op_fns *op_fns;
 	/**< Vector mode dependent pointer table of the multi-buffer APIs */
 	MB_MGR mb_mgr;
 	/**< Multi-buffer instance */
-	struct rte_ring *processed_ops;
-	/**< Ring for placing process operations */
+	struct rte_ring *ingress_queue;
+       /**< Ring for placing operations ready for processing */
 	struct rte_mempool *sess_mp;
 	/**< Session Mempool */
 	struct rte_cryptodev_stats stats;
@@ -227,7 +227,7 @@ struct aesni_mb_session {
  *
  */
 extern int
-aesni_mb_set_session_parameters(const struct aesni_mb_ops *mb_ops,
+aesni_mb_set_session_parameters(const struct aesni_mb_op_fns *mb_ops,
 		struct aesni_mb_session *sess,
 		const struct rte_crypto_sym_xform *xform);
 
Signature · 1 line
2.9.3
#2 lore raw

Re: [PATCH v2] crypto/aesni_mb: process crypto op on dequeue

Quoted 9 lines

-----Original Message-----
From: Doherty, Declan
Sent: Thursday, March 30, 2017 2:35 PM
To: [email protected]
Cc: Doherty, Declan; De Lara Guarch, Pablo
Subject: [PATCH v2] crypto/aesni_mb: process crypto op on dequeue

Quoted 8 lines

moving the crypto processing from the enqueue burst to the dequeue burst,
to remove the requirement to continually call the rte_cryptodev_burst_enqueue function to guarantee that all operations get flushed from the multi-buffer managers buffers.

Applied to dpdk-next-crypto.
Thanks,

Pablo