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