From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id F184DDE5 for ; Mon, 16 Jan 2017 17:00:54 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP; 16 Jan 2017 08:00:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,239,1477983600"; d="scan'208";a="31206055" Received: from dwdohert-dpdk.ir.intel.com ([163.33.210.152]) by orsmga002.jf.intel.com with ESMTP; 16 Jan 2017 08:00:52 -0800 To: Fan Zhang , dev@dpdk.org References: <1484231320-139083-2-git-send-email-roy.fan.zhang@intel.com> <1484576095-233208-1-git-send-email-roy.fan.zhang@intel.com> <1484576095-233208-2-git-send-email-roy.fan.zhang@intel.com> Cc: pablo.de.lara.guarch@intel.com From: Declan Doherty Message-ID: <6da22049-504c-6be7-1a71-5beeea50a5e6@intel.com> Date: Mon, 16 Jan 2017 16:01:27 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1484576095-233208-2-git-send-email-roy.fan.zhang@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD 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: , X-List-Received-Date: Mon, 16 Jan 2017 16:00:55 -0000 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 > --- > 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