[dpdk-dev] crypto/scheduler: add enqueue and dequeue operations
Checks
Commit Message
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@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(-)
Comments
On 21/02/2017 11:43 AM, Fan Zhang wrote:
> 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@intel.com>
> ---
...
>
> 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;
> };
...
>
I think we should be able to achieve the desired functionality without
the need for these new function pointers in rte_cryptodev_scheduler
structure.
@@ -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);
@@ -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
@@ -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;
@@ -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;
@@ -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 = {