From patchwork Mon Feb 20 14:31:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fan Zhang X-Patchwork-Id: 20563 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 2677C2C66; Mon, 20 Feb 2017 15:30:15 +0100 (CET) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 115AA98 for ; Mon, 20 Feb 2017 15:30:11 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga105.jf.intel.com with ESMTP; 20 Feb 2017 06:30:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.35,186,1484035200"; d="scan'208"; a="1132393723" Received: from silpixa00381633.ir.intel.com (HELO silpixa00381633.ger.corp.intel.com) ([10.237.222.114]) by fmsmga002.fm.intel.com with ESMTP; 20 Feb 2017 06:30:09 -0800 From: Fan Zhang To: dev@dpdk.org Cc: pablo.de.lara.guarch@intel.com Date: Mon, 20 Feb 2017 14:31:14 +0000 Message-Id: <1487601074-24807-1-git-send-email-roy.fan.zhang@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dpdk-dev] [PATCH] crypto/scheduler: add more EAL options X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch adds initial mode and ordering enable/disable EAL options to cryptodev scheduler PMD. Signed-off-by: Fan Zhang --- drivers/crypto/scheduler/rte_cryptodev_scheduler.h | 3 + drivers/crypto/scheduler/scheduler_pmd.c | 118 ++++++++++++++++++++- 2 files changed, 118 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.h b/drivers/crypto/scheduler/rte_cryptodev_scheduler.h index 7ef44e7..043d25e 100644 --- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.h +++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.h @@ -40,6 +40,9 @@ extern "C" { #endif +/* round-robin scheduling mode */ +#define SCHEDULER_MODE_ROUND_ROBIN (round-robin) + /** * Crypto scheduler PMD operation modes */ diff --git a/drivers/crypto/scheduler/scheduler_pmd.c b/drivers/crypto/scheduler/scheduler_pmd.c index eeafbe6..817a5a9 100644 --- a/drivers/crypto/scheduler/scheduler_pmd.c +++ b/drivers/crypto/scheduler/scheduler_pmd.c @@ -45,10 +45,14 @@ struct scheduler_init_params { struct rte_crypto_vdev_init_params def_p; uint32_t nb_slaves; uint8_t slaves[MAX_SLAVES_NUM]; + enum rte_cryptodev_scheduler_mode mode; + uint32_t enable_ordering; }; #define RTE_CRYPTODEV_VDEV_NAME ("name") #define RTE_CRYPTODEV_VDEV_SLAVE ("slave") +#define RTE_CRYPTODEV_VDEV_MODE ("mode") +#define RTE_CRYPTODEV_VDEV_ORDERING ("ordering") #define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG ("max_nb_queue_pairs") #define RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG ("max_nb_sessions") #define RTE_CRYPTODEV_VDEV_SOCKET_ID ("socket_id") @@ -56,11 +60,29 @@ struct scheduler_init_params { const char *scheduler_valid_params[] = { RTE_CRYPTODEV_VDEV_NAME, RTE_CRYPTODEV_VDEV_SLAVE, + RTE_CRYPTODEV_VDEV_MODE, + RTE_CRYPTODEV_VDEV_ORDERING, RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG, RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG, RTE_CRYPTODEV_VDEV_SOCKET_ID }; + +struct scheduler_parse_map { + const char *name; + uint32_t val; +}; + +const struct scheduler_parse_map scheduler_mode_map[] = { + {RTE_STR(SCHEDULER_MODE_ROUND_ROBIN), + CDEV_SCHED_MODE_ROUNDROBIN}, +}; + +const struct scheduler_parse_map scheduler_ordering_map[] = { + {"enable", 1}, + {"disable", 0} +}; + static uint16_t scheduler_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, uint16_t nb_ops) @@ -119,9 +141,11 @@ cryptodev_scheduler_create(const char *name, char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN] = {0}; struct rte_cryptodev *dev; struct scheduler_ctx *sched_ctx; + uint32_t i; + int ret; if (init_params->def_p.name[0] == '\0') { - int ret = rte_cryptodev_pmd_create_dev_name( + ret = rte_cryptodev_pmd_create_dev_name( crypto_dev_name, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)); @@ -152,9 +176,39 @@ cryptodev_scheduler_create(const char *name, sched_ctx = dev->data->dev_private; sched_ctx->max_nb_queue_pairs = init_params->def_p.max_nb_queue_pairs; + sched_ctx->mode = init_params->mode; + sched_ctx->reordering_enabled = init_params->enable_ordering; - return attach_init_slaves(dev->data->dev_id, init_params->slaves, + ret = attach_init_slaves(dev->data->dev_id, init_params->slaves, init_params->nb_slaves); + if (ret < 0) { + rte_cryptodev_pmd_release_device(dev); + return ret; + } + + if (sched_ctx->mode > CDEV_SCHED_MODE_USERDEFINED && + sched_ctx->mode < CDEV_SCHED_MODE_COUNT) + for (i = 0; i < RTE_DIM(scheduler_mode_map); i++) { + if (scheduler_mode_map[i].val != sched_ctx->mode) + continue; + + RTE_LOG(INFO, PMD, " Scheduling mode = %s\n", + scheduler_mode_map[i].name); + break; + } + + for (i = 0; i < RTE_DIM(scheduler_ordering_map); i++) { + if (scheduler_ordering_map[i].val != + sched_ctx->reordering_enabled) + continue; + + RTE_LOG(INFO, PMD, " Packet ordering = %s\n", + scheduler_ordering_map[i].name); + + break; + } + + return 0; } static int @@ -263,6 +317,52 @@ parse_slave_arg(const char *key __rte_unused, } static int +parse_mode_arg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + struct scheduler_init_params *param = extra_args; + uint32_t i; + + for (i = 0; i < RTE_DIM(scheduler_mode_map); i++) { + if (strcmp(value, scheduler_mode_map[i].name) == 0) { + param->mode = (enum rte_cryptodev_scheduler_mode) + scheduler_mode_map[i].val; + break; + } + } + + if (i == RTE_DIM(scheduler_mode_map)) { + CS_LOG_ERR("Unrecognized input.\n"); + return -EINVAL; + } + + return 0; +} + +static int +parse_ordering_arg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + struct scheduler_init_params *param = extra_args; + uint32_t i; + + for (i = 0; i < RTE_DIM(scheduler_ordering_map); i++) { + if (strcmp(value, scheduler_ordering_map[i].name) == 0) { + param->enable_ordering = + scheduler_ordering_map[i].val; + break; + } + } + + if (i == RTE_DIM(scheduler_ordering_map)) { + CS_LOG_ERR("Unrecognized input.\n"); + return -EINVAL; + } + + return 0; +} + +static int scheduler_parse_init_params(struct scheduler_init_params *params, const char *input_args) { @@ -309,6 +409,16 @@ scheduler_parse_init_params(struct scheduler_init_params *params, if (ret < 0) goto free_kvlist; + ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_MODE, + &parse_mode_arg, params); + if (ret < 0) + goto free_kvlist; + + ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_ORDERING, + &parse_ordering_arg, params); + if (ret < 0) + goto free_kvlist; + if (params->def_p.socket_id >= number_of_sockets()) { CDEV_LOG_ERR("Invalid socket id specified to create " "the virtual crypto device on"); @@ -332,7 +442,9 @@ cryptodev_scheduler_probe(const char *name, const char *input_args) "" }, .nb_slaves = 0, - .slaves = {0} + .slaves = {0}, + .mode = CDEV_SCHED_MODE_NOT_SET, + .enable_ordering = 0 }; scheduler_parse_init_params(&init_params, input_args);