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.zh...@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

Reply via email to