[dpdk-dev] [PATCH] crypto/scheduler: add enqueue and dequeue operations

Fan Zhang roy.fan.zhang at intel.com
Tue Feb 21 12:43:06 CET 2017


This patch adds enqueue and dequeue operations to
rte_cryptodev_scheduler_ops structure. This helps improving
the performance by reducing unnecessary function calls.

Signed-off-by: Fan Zhang <roy.fan.zhang at intel.com>
---
 drivers/crypto/scheduler/rte_cryptodev_scheduler.c |  6 +++++
 .../scheduler/rte_cryptodev_scheduler_operations.h |  5 ++++
 drivers/crypto/scheduler/scheduler_pmd.c           | 29 ----------------------
 drivers/crypto/scheduler/scheduler_pmd_ops.c       |  8 ++++++
 drivers/crypto/scheduler/scheduler_roundrobin.c    | 14 ++++-------
 5 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
index 11e8143..cf5a57e 100644
--- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
+++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
@@ -451,6 +451,12 @@ rte_cryptodev_scheduler_load_user_scheduler(uint8_t scheduler_id,
 	sched_ctx->ops.scheduler_stop = scheduler->ops->scheduler_stop;
 	sched_ctx->ops.slave_attach = scheduler->ops->slave_attach;
 	sched_ctx->ops.slave_detach = scheduler->ops->slave_detach;
+	sched_ctx->ops.enqueue = scheduler->ops->enqueue;
+	sched_ctx->ops.dequeue = scheduler->ops->dequeue;
+	sched_ctx->ops.enqueue_ordering =
+			scheduler->ops->enqueue_ordering;
+	sched_ctx->ops.dequeue_ordering =
+			scheduler->ops->dequeue_ordering;
 
 	if (sched_ctx->private_ctx)
 		rte_free(sched_ctx->private_ctx);
diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler_operations.h b/drivers/crypto/scheduler/rte_cryptodev_scheduler_operations.h
index 93cf123..60bd97d 100644
--- a/drivers/crypto/scheduler/rte_cryptodev_scheduler_operations.h
+++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler_operations.h
@@ -63,6 +63,11 @@ struct rte_cryptodev_scheduler_ops {
 	rte_cryptodev_scheduler_config_queue_pair config_queue_pair;
 
 	rte_cryptodev_scheduler_create_private_ctx create_private_ctx;
+
+	enqueue_pkt_burst_t enqueue;
+	enqueue_pkt_burst_t enqueue_ordering;
+	dequeue_pkt_burst_t dequeue;
+	dequeue_pkt_burst_t dequeue_ordering;
 };
 
 #ifdef __cplusplus
diff --git a/drivers/crypto/scheduler/scheduler_pmd.c b/drivers/crypto/scheduler/scheduler_pmd.c
index eeafbe6..f5038c9 100644
--- a/drivers/crypto/scheduler/scheduler_pmd.c
+++ b/drivers/crypto/scheduler/scheduler_pmd.c
@@ -61,32 +61,6 @@ const char *scheduler_valid_params[] = {
 	RTE_CRYPTODEV_VDEV_SOCKET_ID
 };
 
-static uint16_t
-scheduler_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
-		uint16_t nb_ops)
-{
-	struct scheduler_qp_ctx *qp_ctx = queue_pair;
-	uint16_t processed_ops;
-
-	processed_ops = (*qp_ctx->schedule_enqueue)(qp_ctx, ops,
-			nb_ops);
-
-	return processed_ops;
-}
-
-static uint16_t
-scheduler_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
-		uint16_t nb_ops)
-{
-	struct scheduler_qp_ctx *qp_ctx = queue_pair;
-	uint16_t processed_ops;
-
-	processed_ops = (*qp_ctx->schedule_dequeue)(qp_ctx, ops,
-			nb_ops);
-
-	return processed_ops;
-}
-
 static int
 attach_init_slaves(uint8_t scheduler_id,
 		const uint8_t *slaves, const uint8_t nb_slaves)
@@ -146,9 +120,6 @@ cryptodev_scheduler_create(const char *name,
 	dev->dev_type = RTE_CRYPTODEV_SCHEDULER_PMD;
 	dev->dev_ops = rte_crypto_scheduler_pmd_ops;
 
-	dev->enqueue_burst = scheduler_enqueue_burst;
-	dev->dequeue_burst = scheduler_dequeue_burst;
-
 	sched_ctx = dev->data->dev_private;
 	sched_ctx->max_nb_queue_pairs =
 			init_params->def_p.max_nb_queue_pairs;
diff --git a/drivers/crypto/scheduler/scheduler_pmd_ops.c b/drivers/crypto/scheduler/scheduler_pmd_ops.c
index 56624c7..4bf5a1f 100644
--- a/drivers/crypto/scheduler/scheduler_pmd_ops.c
+++ b/drivers/crypto/scheduler/scheduler_pmd_ops.c
@@ -128,6 +128,14 @@ scheduler_pmd_start(struct rte_cryptodev *dev)
 		return -1;
 	}
 
+	if (sched_ctx->reordering_enabled) {
+		dev->enqueue_burst = sched_ctx->ops.enqueue_ordering;
+		dev->dequeue_burst = sched_ctx->ops.dequeue_ordering;
+	} else {
+		dev->enqueue_burst = sched_ctx->ops.enqueue;
+		dev->dequeue_burst = sched_ctx->ops.dequeue;
+	}
+
 	if (!sched_ctx->nb_slaves) {
 		CS_LOG_ERR("No slave in the scheduler");
 		return -1;
diff --git a/drivers/crypto/scheduler/scheduler_roundrobin.c b/drivers/crypto/scheduler/scheduler_roundrobin.c
index 9545aa9..6947fe8 100644
--- a/drivers/crypto/scheduler/scheduler_roundrobin.c
+++ b/drivers/crypto/scheduler/scheduler_roundrobin.c
@@ -372,14 +372,6 @@ scheduler_start(struct rte_cryptodev *dev)
 
 		rr_qp_ctx->last_enq_slave_idx = 0;
 		rr_qp_ctx->last_deq_slave_idx = 0;
-
-		if (sched_ctx->reordering_enabled) {
-			qp_ctx->schedule_enqueue = &schedule_enqueue_ordering;
-			qp_ctx->schedule_dequeue = &schedule_dequeue_ordering;
-		} else {
-			qp_ctx->schedule_enqueue = &schedule_enqueue;
-			qp_ctx->schedule_dequeue = &schedule_dequeue;
-		}
 	}
 
 	return 0;
@@ -421,7 +413,11 @@ struct rte_cryptodev_scheduler_ops scheduler_rr_ops = {
 	scheduler_start,
 	scheduler_stop,
 	scheduler_config_qp,
-	scheduler_create_private_ctx
+	scheduler_create_private_ctx,
+	schedule_enqueue,
+	schedule_enqueue_ordering,
+	schedule_dequeue,
+	schedule_dequeue_ordering
 };
 
 struct rte_cryptodev_scheduler scheduler = {
-- 
2.7.4



More information about the dev mailing list