From ee9586dd15fbd07d82bd674eb26b5c7bf4c309db Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 23 Jul 2018 14:17:14 +0100 Subject: [PATCH] crypto/scheduler: add mode-specific parameter This patch adds the mode parameter parsing to scheduler PMD. Signed-off-by: Fan Zhang --- doc/guides/cryptodevs/scheduler.rst | 5 +++++ drivers/crypto/scheduler/scheduler_pmd.c | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/doc/guides/cryptodevs/scheduler.rst b/doc/guides/cryptodevs/scheduler.rst index d67894d551..4d7f5b152d 100644 --- a/doc/guides/cryptodevs/scheduler.rst +++ b/doc/guides/cryptodevs/scheduler.rst @@ -71,6 +71,11 @@ two calls: mode parameter values are specified in the "Cryptodev Scheduler Modes Overview" section. +* mode_param: Specify the mode-specific parameter. Some scheduling modes + may be initialized with specific parameters other than the default ones, + such as the **threshold** packet size of **packet-size-distr** mode. This + parameter fulfills the purpose. + * ordering: Specify the status of the crypto operations ordering feature. The value of this parameter can be "enable" or "disable". This feature is disabled by default. diff --git a/drivers/crypto/scheduler/scheduler_pmd.c b/drivers/crypto/scheduler/scheduler_pmd.c index 6c5c01d63a..ac9185e65c 100644 --- a/drivers/crypto/scheduler/scheduler_pmd.c +++ b/drivers/crypto/scheduler/scheduler_pmd.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "rte_cryptodev_scheduler.h" #include "scheduler_pmd_private.h" @@ -19,6 +20,7 @@ struct scheduler_init_params { struct rte_cryptodev_pmd_init_params def_p; uint32_t nb_slaves; enum rte_cryptodev_scheduler_mode mode; + char mode_param_str[RTE_CRYPTODEV_SCHEDULER_NAME_MAX_LEN]; uint32_t enable_ordering; uint16_t wc_pool[RTE_MAX_LCORE]; uint16_t nb_wc; @@ -29,6 +31,7 @@ struct scheduler_init_params { #define RTE_CRYPTODEV_VDEV_NAME ("name") #define RTE_CRYPTODEV_VDEV_SLAVE ("slave") #define RTE_CRYPTODEV_VDEV_MODE ("mode") +#define RTE_CRYPTODEV_VDEV_MODE_PARAM ("mode_param") #define RTE_CRYPTODEV_VDEV_ORDERING ("ordering") #define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG ("max_nb_queue_pairs") #define RTE_CRYPTODEV_VDEV_SOCKET_ID ("socket_id") @@ -39,6 +42,7 @@ const char *scheduler_valid_params[] = { RTE_CRYPTODEV_VDEV_NAME, RTE_CRYPTODEV_VDEV_SLAVE, RTE_CRYPTODEV_VDEV_MODE, + RTE_CRYPTODEV_VDEV_MODE_PARAM, RTE_CRYPTODEV_VDEV_ORDERING, RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG, RTE_CRYPTODEV_VDEV_SOCKET_ID, @@ -346,6 +350,7 @@ parse_mode_arg(const char *key __rte_unused, if (strcmp(value, scheduler_mode_map[i].name) == 0) { param->mode = (enum rte_cryptodev_scheduler_mode) scheduler_mode_map[i].val; + break; } } @@ -358,6 +363,18 @@ parse_mode_arg(const char *key __rte_unused, return 0; } +static int +parse_mode_param_arg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + struct scheduler_init_params *param = extra_args; + + strlcpy(param->mode_param_str, value, + RTE_CRYPTODEV_SCHEDULER_NAME_MAX_LEN); + + return 0; +} + static int parse_ordering_arg(const char *key __rte_unused, const char *value, void *extra_args) @@ -438,6 +455,11 @@ scheduler_parse_init_params(struct scheduler_init_params *params, if (ret < 0) goto free_kvlist; + ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_MODE_PARAM, + &parse_mode_param_arg, params); + if (ret < 0) + goto free_kvlist; + ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_ORDERING, &parse_ordering_arg, params); if (ret < 0) -- 2.20.1