[dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD
Declan Doherty
declan.doherty at intel.com
Mon Jan 16 17:01:27 CET 2017
On 16/01/17 14:14, Fan Zhang wrote:
> This patch adds a user defined name initializing parameter to cryptodev
> library.
>
> Originally, for software cryptodev PMD, the vdev name parameter is
> treated as the driver identifier, and will create an unique name for each
> device automatically, which is not necessarily as same as the vdev
> parameter.
>
> This patch allows the user to either create a unique name for his software
> cryptodev, or by default, let the system creates a unique one. This should
> help the user managing the created cryptodevs easily.
>
> Examples:
> CLI command fragment 1: --vdev "crypto_aesni_gcm_pmd"
> The above command will result in creating a AESNI-GCM PMD with name of
> "crypto_aesni_gcm_X", where postfix X is the number assigned by the system,
> starting from 0. This fragment can be placed in the same CLI command
> multiple times, resulting the postfixs incremented by one for each new
> device.
>
> CLI command fragment 2: --vdev "crypto_aesni_gcm_pmd,name=gcm1"
> The above command will result in creating a AESNI-GCM PMD with name of
> "gcm1". This fragment can be placed in the same CLI command multiple
> times, as long as each having a unique name value.
>
> Signed-off-by: Fan Zhang <roy.fan.zhang at intel.com>
> ---
> lib/librte_cryptodev/rte_cryptodev.c | 51 ++++++++++++++++++++++++++
> lib/librte_cryptodev/rte_cryptodev.h | 7 ++--
> lib/librte_cryptodev/rte_cryptodev_pmd.h | 7 ++++
> lib/librte_cryptodev/rte_cryptodev_version.map | 7 ++++
> 4 files changed, 68 insertions(+), 4 deletions(-)
>
> diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
> index 127e8d0..d6d7f3d 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.c
> +++ b/lib/librte_cryptodev/rte_cryptodev.c
> @@ -101,11 +101,13 @@ struct rte_cryptodev_callback {
> uint32_t active; /**< Callback is executing */
> };
>
> +#define RTE_CRYPTODEV_VDEV_NAME ("name")
> #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")
>
> static const char *cryptodev_vdev_valid_params[] = {
> + RTE_CRYPTODEV_VDEV_NAME,
> RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
> RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
> RTE_CRYPTODEV_VDEV_SOCKET_ID
> @@ -143,6 +145,25 @@ parse_integer_arg(const char *key __rte_unused,
> return 0;
> }
>
> +/** Parse name */
> +static int
> +parse_name_arg(const char *key __rte_unused,
> + const char *value, void *extra_args)
> +{
> + struct rte_crypto_vdev_init_params *params = extra_args;
> +
> + if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) {
> + CDEV_LOG_ERR("Invalid name %s, should be less than "
> + "%u bytes", value,
> + RTE_CRYPTODEV_NAME_MAX_LEN - 1);
> + return -1;
> + }
> +
> + strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
> +
> + return 0;
> +}
> +
> int
> rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
> const char *input_args)
> @@ -179,6 +200,12 @@ rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
> if (ret < 0)
> goto free_kvlist;
>
> + ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
> + &parse_name_arg,
> + params);
> + if (ret < 0)
> + goto free_kvlist;
> +
> if (params->socket_id >= number_of_sockets()) {
> CDEV_LOG_ERR("Invalid socket id specified to create "
> "the virtual crypto device on");
> @@ -1205,3 +1232,27 @@ rte_crypto_op_pool_create(const char *name, enum rte_crypto_op_type type,
>
> return mp;
> }
> +
> +int
> +rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix)
> +{
> + struct rte_cryptodev *dev = NULL;
> + uint32_t i = 0;
> +
> + if (name == NULL)
> + return -EINVAL;
> +
> + for (i = 0; i < RTE_CRYPTO_MAX_DEVS; i++) {
> + int ret = snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN,
> + "%s_%u", dev_name_prefix, i);
> +
> + if (ret < 0)
> + return ret;
> +
> + dev = rte_cryptodev_pmd_get_named_dev(name);
> + if (!dev)
> + return 0;
> + }
> +
> + return -1;
> +}
> diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
> index 8f63e8f..b5399af 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.h
> +++ b/lib/librte_cryptodev/rte_cryptodev.h
> @@ -300,6 +300,8 @@ struct rte_cryptodev_stats {
> /**< Total error count on operations dequeued */
> };
>
> +#define RTE_CRYPTODEV_NAME_MAX_LEN (64)
> +/**< Max length of name of crypto PMD */
> #define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS 8
> #define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS 2048
>
> @@ -311,6 +313,7 @@ struct rte_crypto_vdev_init_params {
> unsigned max_nb_queue_pairs;
> unsigned max_nb_sessions;
> uint8_t socket_id;
> + char name[RTE_CRYPTODEV_NAME_MAX_LEN];
> };
>
> /**
> @@ -635,10 +638,6 @@ struct rte_cryptodev {
> /**< Flag indicating the device is attached */
> } __rte_cache_aligned;
>
> -
> -#define RTE_CRYPTODEV_NAME_MAX_LEN (64)
> -/**< Max length of name of crypto PMD */
> -
> /**
> *
> * The data part, with no function pointers, associated with each device.
> diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h
> index abfe2dc..dc57bfa 100644
> --- a/lib/librte_cryptodev/rte_cryptodev_pmd.h
> +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h
> @@ -519,6 +519,13 @@ int rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv,
> */
> int rte_cryptodev_pci_remove(struct rte_pci_device *pci_dev);
>
> +/**
> + * @internal
> + * Create unique device name
> + */
> +int
> +rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix);
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map
> index 9dde0e7..c581eea 100644
> --- a/lib/librte_cryptodev/rte_cryptodev_version.map
> +++ b/lib/librte_cryptodev/rte_cryptodev_version.map
> @@ -46,3 +46,10 @@ DPDK_16.11 {
> rte_cryptodev_pci_remove;
>
> } DPDK_16.07;
> +
> +DPDK_17.02 {
> + global:
> +
> + rte_cryptodev_pmd_create_dev_name;
> +
> +} DPDK_16.11;
>
Acked-by: Declan Doherty <declan.doherty at intel.com>
More information about the dev
mailing list