crypto/aesni_mb: process crypto operation in dequeue function
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
@@ -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
@@ -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
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
@@ -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
@@ -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
@@ -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
De Lara Guarch, Pablo
AppliedRe: [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 therte_cryptodev_burst_enqueuefunction to guarantee that all operations get flushed from the multi-buffer managers buffers.Signed-off-by Declan Doherty <[email protected]>Signed-off-by Pablo de Lara <[email protected]>
Applied to dpdk-next-crypto.
Thanks,
Pablo