DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/2] crypto: add user defined name initializing parameter
@ 2017-01-11 17:13 Fan Zhang
  2017-01-11 17:13 ` [dpdk-dev] [PATCH 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-11 17:13 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patchset adds a user defined name initializing parameter to all
software cryptodevs.

Fan Zhang (2):
  cryptodev: add user defined name initializing parameter to software
    PMD
  crypto: add user defined name initializing parameter parsing to
    software PMDs

 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c   | 58 ++++++++++------------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 ++++++++++--------------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c     | 58 +++++++++++-----------------
 drivers/crypto/null/null_crypto_pmd.c      | 55 ++++++++++-----------------
 drivers/crypto/openssl/rte_openssl_pmd.c   | 55 ++++++++++-----------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c     | 59 +++++++++++------------------
 drivers/crypto/zuc/rte_zuc_pmd.c           | 59 +++++++++++------------------
 lib/librte_cryptodev/rte_cryptodev.c       | 45 ++++++++++++++++++++++
 lib/librte_cryptodev/rte_cryptodev.h       |  7 ++--
 lib/librte_cryptodev/rte_cryptodev_pmd.h   |  7 ++++
 10 files changed, 203 insertions(+), 261 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH 1/2] cryptodev: add user defined name initializing parameter to software PMD
  2017-01-11 17:13 [dpdk-dev] [PATCH 0/2] crypto: add user defined name initializing parameter Fan Zhang
@ 2017-01-11 17:13 ` Fan Zhang
  2017-01-11 17:13 ` [dpdk-dev] [PATCH 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
  2017-01-12 14:28 ` [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2 siblings, 0 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-11 17:13 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

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@intel.com>
---
 lib/librte_cryptodev/rte_cryptodev.c     | 45 ++++++++++++++++++++++++++++++++
 lib/librte_cryptodev/rte_cryptodev.h     |  7 +++--
 lib/librte_cryptodev/rte_cryptodev_pmd.h |  7 +++++
 3 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 127e8d0..3b6da8b 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,18 @@ 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;
+
+	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 +193,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 +1225,28 @@ 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
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH 2/2] crypto: add user defined name initializing parameter parsing to software PMDs
  2017-01-11 17:13 [dpdk-dev] [PATCH 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-11 17:13 ` [dpdk-dev] [PATCH 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
@ 2017-01-11 17:13 ` Fan Zhang
  2017-01-12 14:28 ` [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2 siblings, 0 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-11 17:13 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patch adds user defined name parsing feature to software PMDs.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c   | 58 ++++++++++------------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 ++++++++++--------------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c     | 58 +++++++++++-----------------
 drivers/crypto/null/null_crypto_pmd.c      | 55 ++++++++++-----------------
 drivers/crypto/openssl/rte_openssl_pmd.c   | 55 ++++++++++-----------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c     | 59 +++++++++++------------------
 drivers/crypto/zuc/rte_zuc_pmd.c           | 59 +++++++++++------------------
 7 files changed, 148 insertions(+), 257 deletions(-)

diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
index dba5e15..ddb2e0e 100644
--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
@@ -43,27 +43,6 @@
 
 #include "aesni_gcm_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 static int
 aesni_gcm_calculate_hash_sub_key(uint8_t *hsubkey, unsigned hsubkey_length,
 		uint8_t *aeskey, unsigned aeskey_length)
@@ -407,14 +386,23 @@ aesni_gcm_pmd_dequeue_burst(void *queue_pair,
 static int aesni_gcm_remove(const char *name);
 
 static int
-aesni_gcm_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_gcm_private *internals;
 	enum aesni_gcm_vector_mode vector_mode;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
+
+		if (ret < 0) {
+			GCM_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for support for AES instruction set */
 	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
 		GCM_LOG_ERR("AES instructions not supported by CPU");
@@ -433,15 +421,7 @@ aesni_gcm_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		GCM_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_gcm_private), init_params->socket_id);
 	if (dev == NULL) {
 		GCM_LOG_ERR("failed to create cryptodev vdev");
@@ -484,9 +464,9 @@ aesni_gcm_create(const char *name,
 	return 0;
 
 init_error:
-	GCM_LOG_ERR("driver %s: create failed", name);
+	GCM_LOG_ERR("driver %s: create failed", init_params->name);
 
-	aesni_gcm_remove(crypto_dev_name);
+	aesni_gcm_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -496,19 +476,23 @@ aesni_gcm_probe(const char *name, const char *input_args)
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return aesni_gcm_create(name, &init_params);
+	return aesni_gcm_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
index f07cd07..26dc05e 100644
--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
@@ -40,27 +40,6 @@
 
 #include "rte_aesni_mb_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 typedef void (*hash_one_block_t)(void *data, void *digest);
 typedef void (*aes_keyexp_t)(void *key, void *enc_exp_keys, void *dec_exp_keys);
 
@@ -598,18 +577,21 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 static int cryptodev_aesni_mb_remove(const char *name);
 
 static int
-cryptodev_aesni_mb_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_aesni_mb_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_mb_private *internals;
 	enum aesni_mb_vector_mode vector_mode;
 
-	/* Check CPU for support for AES instruction set */
-	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
-		MB_LOG_ERR("AES instructions not supported by CPU");
-		return -EFAULT;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
+
+		if (ret < 0) {
+			MB_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
 	/* Check CPU for supported vector instruction set */
@@ -624,15 +606,7 @@ cryptodev_aesni_mb_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		MB_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_mb_private), init_params->socket_id);
 	if (dev == NULL) {
 		MB_LOG_ERR("failed to create cryptodev vdev");
@@ -673,9 +647,10 @@ cryptodev_aesni_mb_create(const char *name,
 
 	return 0;
 init_error:
-	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed", name);
+	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed",
+			init_params->name);
 
-	cryptodev_aesni_mb_remove(crypto_dev_name);
+	cryptodev_aesni_mb_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -687,19 +662,23 @@ cryptodev_aesni_mb_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		""
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_aesni_mb_create(name, &init_params);
+	return cryptodev_aesni_mb_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
index b119da2..c38c851 100644
--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
@@ -47,27 +47,6 @@
 #define KASUMI_MAX_BURST 4
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each KASUMI
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_KASUMI_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum kasumi_operation
 kasumi_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -559,14 +538,23 @@ kasumi_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_kasumi_remove(const char *name);
 
 static int
-cryptodev_kasumi_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_kasumi_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct kasumi_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
+
+		if (ret < 0) {
+			KASUMI_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_AVX;
@@ -577,14 +565,7 @@ cryptodev_kasumi_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		KASUMI_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct kasumi_private), init_params->socket_id);
 	if (dev == NULL) {
 		KASUMI_LOG_ERR("failed to create cryptodev vdev");
@@ -609,9 +590,10 @@ cryptodev_kasumi_create(const char *name,
 
 	return 0;
 init_error:
-	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed", name);
+	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed",
+			init_params->name);
 
-	cryptodev_kasumi_remove(crypto_dev_name);
+	cryptodev_kasumi_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -622,19 +604,23 @@ cryptodev_kasumi_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_kasumi_create(name, &init_params);
+	return cryptodev_kasumi_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c
index c69606b..ce60470 100644
--- a/drivers/crypto/null/null_crypto_pmd.c
+++ b/drivers/crypto/null/null_crypto_pmd.c
@@ -38,27 +38,6 @@
 
 #include "null_crypto_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_NULL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-
 /** verify and set session parameters */
 int
 null_crypto_set_session_parameters(
@@ -186,21 +165,24 @@ static int cryptodev_null_remove(const char *name);
 
 /** Create crypto device */
 static int
-cryptodev_null_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_null_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct null_crypto_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		NULL_CRYPTO_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
+
+		if (ret < 0) {
+			NULL_CRYPTO_LOG_ERR("failed to create unique "
+					"name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct null_crypto_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -226,8 +208,9 @@ cryptodev_null_create(const char *name,
 	return 0;
 
 init_error:
-	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed", name);
-	cryptodev_null_remove(crypto_dev_name);
+	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed",
+			init_params->name);
+	cryptodev_null_remove(init_params->name);
 
 	return -EFAULT;
 }
@@ -240,19 +223,23 @@ cryptodev_null_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_null_create(name, &init_params);
+	return cryptodev_null_create(&init_params);
 }
 
 /** Uninitialise null crypto device */
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index 5f8fa33..c556a9e 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -47,28 +47,6 @@ static int cryptodev_openssl_remove(const char *name);
 /*----------------------------------------------------------------------------*/
 
 /**
- * Global static parameter used to create a unique name for each
- * OPENSSL crypto device.
- */
-static unsigned int unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u",
-			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-/**
  * Increment counter by 1
  * Counter is 64 bit array, big-endian
  */
@@ -964,21 +942,23 @@ openssl_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 
 /** Create OPENSSL crypto device */
 static int
-cryptodev_openssl_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_openssl_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct openssl_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		OPENSSL_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
+
+		if (ret < 0) {
+			OPENSSL_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct openssl_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -1006,9 +986,10 @@ cryptodev_openssl_create(const char *name,
 	return 0;
 
 init_error:
-	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed", name);
+	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed",
+			init_params->name);
 
-	cryptodev_openssl_remove(crypto_dev_name);
+	cryptodev_openssl_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -1020,19 +1001,23 @@ cryptodev_openssl_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_openssl_create(name, &init_params);
+	return cryptodev_openssl_create(&init_params);
 }
 
 /** Uninitialise OPENSSL crypto device */
diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
index 3b4292a..4a70f06 100644
--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
@@ -46,27 +46,6 @@
 #define SNOW3G_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each SNOW 3G
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum snow3g_operation
 snow3g_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -548,14 +527,23 @@ snow3g_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_snow3g_remove(const char *name);
 
 static int
-cryptodev_snow3g_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_snow3g_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct snow3g_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
+
+		if (ret < 0) {
+			SNOW3G_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -564,15 +552,7 @@ cryptodev_snow3g_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		SNOW3G_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct snow3g_private), init_params->socket_id);
 	if (dev == NULL) {
 		SNOW3G_LOG_ERR("failed to create cryptodev vdev");
@@ -597,9 +577,10 @@ cryptodev_snow3g_create(const char *name,
 
 	return 0;
 init_error:
-	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed", name);
+	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed",
+			init_params->name);
 
-	cryptodev_snow3g_remove(crypto_dev_name);
+	cryptodev_snow3g_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -610,19 +591,23 @@ cryptodev_snow3g_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_snow3g_create(name, &init_params);
+	return cryptodev_snow3g_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
index 3849119..062cfff 100644
--- a/drivers/crypto/zuc/rte_zuc_pmd.c
+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
@@ -45,27 +45,6 @@
 #define ZUC_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each ZUC
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_ZUC_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum zuc_operation
 zuc_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -448,14 +427,23 @@ zuc_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_zuc_remove(const char *name);
 
 static int
-cryptodev_zuc_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_zuc_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct zuc_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
+
+		if (ret < 0) {
+			ZUC_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -464,15 +452,7 @@ cryptodev_zuc_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		ZUC_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct zuc_private), init_params->socket_id);
 	if (dev == NULL) {
 		ZUC_LOG_ERR("failed to create cryptodev vdev");
@@ -497,9 +477,10 @@ cryptodev_zuc_create(const char *name,
 
 	return 0;
 init_error:
-	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed", name);
+	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed",
+			init_params->name);
 
-	cryptodev_zuc_remove(crypto_dev_name);
+	cryptodev_zuc_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -510,19 +491,23 @@ cryptodev_zuc_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_zuc_create(name, &init_params);
+	return cryptodev_zuc_create(&init_params);
 }
 
 static int
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter
  2017-01-11 17:13 [dpdk-dev] [PATCH 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-11 17:13 ` [dpdk-dev] [PATCH 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
  2017-01-11 17:13 ` [dpdk-dev] [PATCH 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
@ 2017-01-12 14:28 ` Fan Zhang
  2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
  2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
  2 siblings, 2 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-12 14:28 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patchset adds a user defined name initializing parameter to all
software cryptodevs.

v2:
Fixed a line adds whitespace error
Updated rte_cryptodev_version.map

Fan Zhang (2):
  cryptodev: add user defined name initializing parameter to software
    PMD
  crypto: add user defined name initializing parameter parsing to
    software PMDs

 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c       | 58 +++++++++---------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c     | 61 +++++++++-----------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c         | 58 ++++++++++--------------
 drivers/crypto/null/null_crypto_pmd.c          | 55 +++++++++--------------
 drivers/crypto/openssl/rte_openssl_pmd.c       | 55 +++++++++--------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c         | 59 ++++++++++---------------
 drivers/crypto/zuc/rte_zuc_pmd.c               | 59 ++++++++++---------------
 lib/librte_cryptodev/rte_cryptodev.c           | 44 +++++++++++++++++++
 lib/librte_cryptodev/rte_cryptodev.h           |  7 ++-
 lib/librte_cryptodev/rte_cryptodev_pmd.h       |  7 +++
 lib/librte_cryptodev/rte_cryptodev_version.map |  7 +++
 11 files changed, 209 insertions(+), 261 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 1/2] cryptodev: add user defined name initializing parameter to software PMD
  2017-01-12 14:28 ` [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter Fan Zhang
@ 2017-01-12 14:28   ` Fan Zhang
  2017-01-16 14:14     ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
  1 sibling, 1 reply; 12+ messages in thread
From: Fan Zhang @ 2017-01-12 14:28 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

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@intel.com>
---
 lib/librte_cryptodev/rte_cryptodev.c           | 44 ++++++++++++++++++++++++++
 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, 61 insertions(+), 4 deletions(-)

diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 127e8d0..08c9eb4 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,18 @@ 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;
+
+	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 +193,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 +1225,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;
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 2/2] crypto: add user defined name initializing parameter parsing to software PMDs
  2017-01-12 14:28 ` [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
@ 2017-01-12 14:28   ` Fan Zhang
  1 sibling, 0 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-12 14:28 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patch adds user defined name parsing feature to software PMDs.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c   | 58 ++++++++++------------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 ++++++++++--------------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c     | 58 +++++++++++-----------------
 drivers/crypto/null/null_crypto_pmd.c      | 55 ++++++++++-----------------
 drivers/crypto/openssl/rte_openssl_pmd.c   | 55 ++++++++++-----------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c     | 59 +++++++++++------------------
 drivers/crypto/zuc/rte_zuc_pmd.c           | 59 +++++++++++------------------
 7 files changed, 148 insertions(+), 257 deletions(-)

diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
index dba5e15..ddb2e0e 100644
--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
@@ -43,27 +43,6 @@
 
 #include "aesni_gcm_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 static int
 aesni_gcm_calculate_hash_sub_key(uint8_t *hsubkey, unsigned hsubkey_length,
 		uint8_t *aeskey, unsigned aeskey_length)
@@ -407,14 +386,23 @@ aesni_gcm_pmd_dequeue_burst(void *queue_pair,
 static int aesni_gcm_remove(const char *name);
 
 static int
-aesni_gcm_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_gcm_private *internals;
 	enum aesni_gcm_vector_mode vector_mode;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
+
+		if (ret < 0) {
+			GCM_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for support for AES instruction set */
 	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
 		GCM_LOG_ERR("AES instructions not supported by CPU");
@@ -433,15 +421,7 @@ aesni_gcm_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		GCM_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_gcm_private), init_params->socket_id);
 	if (dev == NULL) {
 		GCM_LOG_ERR("failed to create cryptodev vdev");
@@ -484,9 +464,9 @@ aesni_gcm_create(const char *name,
 	return 0;
 
 init_error:
-	GCM_LOG_ERR("driver %s: create failed", name);
+	GCM_LOG_ERR("driver %s: create failed", init_params->name);
 
-	aesni_gcm_remove(crypto_dev_name);
+	aesni_gcm_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -496,19 +476,23 @@ aesni_gcm_probe(const char *name, const char *input_args)
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return aesni_gcm_create(name, &init_params);
+	return aesni_gcm_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
index f07cd07..26dc05e 100644
--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
@@ -40,27 +40,6 @@
 
 #include "rte_aesni_mb_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 typedef void (*hash_one_block_t)(void *data, void *digest);
 typedef void (*aes_keyexp_t)(void *key, void *enc_exp_keys, void *dec_exp_keys);
 
@@ -598,18 +577,21 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 static int cryptodev_aesni_mb_remove(const char *name);
 
 static int
-cryptodev_aesni_mb_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_aesni_mb_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_mb_private *internals;
 	enum aesni_mb_vector_mode vector_mode;
 
-	/* Check CPU for support for AES instruction set */
-	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
-		MB_LOG_ERR("AES instructions not supported by CPU");
-		return -EFAULT;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
+
+		if (ret < 0) {
+			MB_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
 	/* Check CPU for supported vector instruction set */
@@ -624,15 +606,7 @@ cryptodev_aesni_mb_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		MB_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_mb_private), init_params->socket_id);
 	if (dev == NULL) {
 		MB_LOG_ERR("failed to create cryptodev vdev");
@@ -673,9 +647,10 @@ cryptodev_aesni_mb_create(const char *name,
 
 	return 0;
 init_error:
-	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed", name);
+	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed",
+			init_params->name);
 
-	cryptodev_aesni_mb_remove(crypto_dev_name);
+	cryptodev_aesni_mb_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -687,19 +662,23 @@ cryptodev_aesni_mb_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		""
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_aesni_mb_create(name, &init_params);
+	return cryptodev_aesni_mb_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
index b119da2..c38c851 100644
--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
@@ -47,27 +47,6 @@
 #define KASUMI_MAX_BURST 4
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each KASUMI
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_KASUMI_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum kasumi_operation
 kasumi_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -559,14 +538,23 @@ kasumi_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_kasumi_remove(const char *name);
 
 static int
-cryptodev_kasumi_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_kasumi_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct kasumi_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
+
+		if (ret < 0) {
+			KASUMI_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_AVX;
@@ -577,14 +565,7 @@ cryptodev_kasumi_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		KASUMI_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct kasumi_private), init_params->socket_id);
 	if (dev == NULL) {
 		KASUMI_LOG_ERR("failed to create cryptodev vdev");
@@ -609,9 +590,10 @@ cryptodev_kasumi_create(const char *name,
 
 	return 0;
 init_error:
-	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed", name);
+	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed",
+			init_params->name);
 
-	cryptodev_kasumi_remove(crypto_dev_name);
+	cryptodev_kasumi_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -622,19 +604,23 @@ cryptodev_kasumi_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_kasumi_create(name, &init_params);
+	return cryptodev_kasumi_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c
index c69606b..ce60470 100644
--- a/drivers/crypto/null/null_crypto_pmd.c
+++ b/drivers/crypto/null/null_crypto_pmd.c
@@ -38,27 +38,6 @@
 
 #include "null_crypto_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_NULL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-
 /** verify and set session parameters */
 int
 null_crypto_set_session_parameters(
@@ -186,21 +165,24 @@ static int cryptodev_null_remove(const char *name);
 
 /** Create crypto device */
 static int
-cryptodev_null_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_null_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct null_crypto_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		NULL_CRYPTO_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
+
+		if (ret < 0) {
+			NULL_CRYPTO_LOG_ERR("failed to create unique "
+					"name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct null_crypto_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -226,8 +208,9 @@ cryptodev_null_create(const char *name,
 	return 0;
 
 init_error:
-	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed", name);
-	cryptodev_null_remove(crypto_dev_name);
+	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed",
+			init_params->name);
+	cryptodev_null_remove(init_params->name);
 
 	return -EFAULT;
 }
@@ -240,19 +223,23 @@ cryptodev_null_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_null_create(name, &init_params);
+	return cryptodev_null_create(&init_params);
 }
 
 /** Uninitialise null crypto device */
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index 5f8fa33..c556a9e 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -47,28 +47,6 @@ static int cryptodev_openssl_remove(const char *name);
 /*----------------------------------------------------------------------------*/
 
 /**
- * Global static parameter used to create a unique name for each
- * OPENSSL crypto device.
- */
-static unsigned int unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u",
-			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-/**
  * Increment counter by 1
  * Counter is 64 bit array, big-endian
  */
@@ -964,21 +942,23 @@ openssl_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 
 /** Create OPENSSL crypto device */
 static int
-cryptodev_openssl_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_openssl_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct openssl_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		OPENSSL_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
+
+		if (ret < 0) {
+			OPENSSL_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct openssl_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -1006,9 +986,10 @@ cryptodev_openssl_create(const char *name,
 	return 0;
 
 init_error:
-	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed", name);
+	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed",
+			init_params->name);
 
-	cryptodev_openssl_remove(crypto_dev_name);
+	cryptodev_openssl_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -1020,19 +1001,23 @@ cryptodev_openssl_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_openssl_create(name, &init_params);
+	return cryptodev_openssl_create(&init_params);
 }
 
 /** Uninitialise OPENSSL crypto device */
diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
index 3b4292a..4a70f06 100644
--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
@@ -46,27 +46,6 @@
 #define SNOW3G_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each SNOW 3G
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum snow3g_operation
 snow3g_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -548,14 +527,23 @@ snow3g_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_snow3g_remove(const char *name);
 
 static int
-cryptodev_snow3g_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_snow3g_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct snow3g_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
+
+		if (ret < 0) {
+			SNOW3G_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -564,15 +552,7 @@ cryptodev_snow3g_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		SNOW3G_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct snow3g_private), init_params->socket_id);
 	if (dev == NULL) {
 		SNOW3G_LOG_ERR("failed to create cryptodev vdev");
@@ -597,9 +577,10 @@ cryptodev_snow3g_create(const char *name,
 
 	return 0;
 init_error:
-	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed", name);
+	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed",
+			init_params->name);
 
-	cryptodev_snow3g_remove(crypto_dev_name);
+	cryptodev_snow3g_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -610,19 +591,23 @@ cryptodev_snow3g_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_snow3g_create(name, &init_params);
+	return cryptodev_snow3g_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
index 3849119..062cfff 100644
--- a/drivers/crypto/zuc/rte_zuc_pmd.c
+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
@@ -45,27 +45,6 @@
 #define ZUC_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each ZUC
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_ZUC_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum zuc_operation
 zuc_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -448,14 +427,23 @@ zuc_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_zuc_remove(const char *name);
 
 static int
-cryptodev_zuc_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_zuc_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct zuc_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
+
+		if (ret < 0) {
+			ZUC_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -464,15 +452,7 @@ cryptodev_zuc_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		ZUC_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct zuc_private), init_params->socket_id);
 	if (dev == NULL) {
 		ZUC_LOG_ERR("failed to create cryptodev vdev");
@@ -497,9 +477,10 @@ cryptodev_zuc_create(const char *name,
 
 	return 0;
 init_error:
-	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed", name);
+	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed",
+			init_params->name);
 
-	cryptodev_zuc_remove(crypto_dev_name);
+	cryptodev_zuc_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -510,19 +491,23 @@ cryptodev_zuc_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_zuc_create(name, &init_params);
+	return cryptodev_zuc_create(&init_params);
 }
 
 static int
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter
  2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
@ 2017-01-16 14:14     ` Fan Zhang
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
                         ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Fan Zhang @ 2017-01-16 14:14 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patchset adds a user defined name initializing parameter to all
software cryptodevs.

v3:
Added name parameter length check

v2:
Fixed a line adds whitespace error
Updated rte_cryptodev_version.map

Fan Zhang (2):
  cryptodev: add user defined name initializing parameter to software
    PMD
  crypto: add user defined name initializing parameter parsing to
    software PMDs

 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c       | 58 +++++++++---------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c     | 61 +++++++++-----------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c         | 58 ++++++++++--------------
 drivers/crypto/null/null_crypto_pmd.c          | 55 +++++++++--------------
 drivers/crypto/openssl/rte_openssl_pmd.c       | 55 +++++++++--------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c         | 59 ++++++++++---------------
 drivers/crypto/zuc/rte_zuc_pmd.c               | 59 ++++++++++---------------
 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 +++
 11 files changed, 216 insertions(+), 261 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD
  2017-01-16 14:14     ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter Fan Zhang
@ 2017-01-16 14:14       ` Fan Zhang
  2017-01-16 16:01         ` Declan Doherty
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
  2017-01-16 20:00       ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter De Lara Guarch, Pablo
  2 siblings, 1 reply; 12+ messages in thread
From: Fan Zhang @ 2017-01-16 14:14 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

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@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;
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs
  2017-01-16 14:14     ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
@ 2017-01-16 14:14       ` Fan Zhang
  2017-01-16 16:01         ` Declan Doherty
  2017-01-16 20:00       ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter De Lara Guarch, Pablo
  2 siblings, 1 reply; 12+ messages in thread
From: Fan Zhang @ 2017-01-16 14:14 UTC (permalink / raw)
  To: dev; +Cc: pablo.de.lara.guarch

This patch adds user defined name parsing feature to software PMDs.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c   | 58 ++++++++++------------------
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 ++++++++++--------------------
 drivers/crypto/kasumi/rte_kasumi_pmd.c     | 58 +++++++++++-----------------
 drivers/crypto/null/null_crypto_pmd.c      | 55 ++++++++++-----------------
 drivers/crypto/openssl/rte_openssl_pmd.c   | 55 ++++++++++-----------------
 drivers/crypto/snow3g/rte_snow3g_pmd.c     | 59 +++++++++++------------------
 drivers/crypto/zuc/rte_zuc_pmd.c           | 59 +++++++++++------------------
 7 files changed, 148 insertions(+), 257 deletions(-)

diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
index dba5e15..ddb2e0e 100644
--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
@@ -43,27 +43,6 @@
 
 #include "aesni_gcm_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 static int
 aesni_gcm_calculate_hash_sub_key(uint8_t *hsubkey, unsigned hsubkey_length,
 		uint8_t *aeskey, unsigned aeskey_length)
@@ -407,14 +386,23 @@ aesni_gcm_pmd_dequeue_burst(void *queue_pair,
 static int aesni_gcm_remove(const char *name);
 
 static int
-aesni_gcm_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_gcm_private *internals;
 	enum aesni_gcm_vector_mode vector_mode;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
+
+		if (ret < 0) {
+			GCM_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for support for AES instruction set */
 	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
 		GCM_LOG_ERR("AES instructions not supported by CPU");
@@ -433,15 +421,7 @@ aesni_gcm_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		GCM_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_gcm_private), init_params->socket_id);
 	if (dev == NULL) {
 		GCM_LOG_ERR("failed to create cryptodev vdev");
@@ -484,9 +464,9 @@ aesni_gcm_create(const char *name,
 	return 0;
 
 init_error:
-	GCM_LOG_ERR("driver %s: create failed", name);
+	GCM_LOG_ERR("driver %s: create failed", init_params->name);
 
-	aesni_gcm_remove(crypto_dev_name);
+	aesni_gcm_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -496,19 +476,23 @@ aesni_gcm_probe(const char *name, const char *input_args)
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return aesni_gcm_create(name, &init_params);
+	return aesni_gcm_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
index f07cd07..26dc05e 100644
--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
@@ -40,27 +40,6 @@
 
 #include "rte_aesni_mb_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each AES-NI multi
- * buffer crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 typedef void (*hash_one_block_t)(void *data, void *digest);
 typedef void (*aes_keyexp_t)(void *key, void *enc_exp_keys, void *dec_exp_keys);
 
@@ -598,18 +577,21 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 static int cryptodev_aesni_mb_remove(const char *name);
 
 static int
-cryptodev_aesni_mb_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_aesni_mb_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct aesni_mb_private *internals;
 	enum aesni_mb_vector_mode vector_mode;
 
-	/* Check CPU for support for AES instruction set */
-	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
-		MB_LOG_ERR("AES instructions not supported by CPU");
-		return -EFAULT;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
+
+		if (ret < 0) {
+			MB_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
 	/* Check CPU for supported vector instruction set */
@@ -624,15 +606,7 @@ cryptodev_aesni_mb_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		MB_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct aesni_mb_private), init_params->socket_id);
 	if (dev == NULL) {
 		MB_LOG_ERR("failed to create cryptodev vdev");
@@ -673,9 +647,10 @@ cryptodev_aesni_mb_create(const char *name,
 
 	return 0;
 init_error:
-	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed", name);
+	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed",
+			init_params->name);
 
-	cryptodev_aesni_mb_remove(crypto_dev_name);
+	cryptodev_aesni_mb_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -687,19 +662,23 @@ cryptodev_aesni_mb_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		""
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_aesni_mb_create(name, &init_params);
+	return cryptodev_aesni_mb_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
index b119da2..c38c851 100644
--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
@@ -47,27 +47,6 @@
 #define KASUMI_MAX_BURST 4
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each KASUMI
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_KASUMI_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum kasumi_operation
 kasumi_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -559,14 +538,23 @@ kasumi_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_kasumi_remove(const char *name);
 
 static int
-cryptodev_kasumi_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_kasumi_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct kasumi_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
+
+		if (ret < 0) {
+			KASUMI_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_AVX;
@@ -577,14 +565,7 @@ cryptodev_kasumi_create(const char *name,
 		return -EFAULT;
 	}
 
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		KASUMI_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct kasumi_private), init_params->socket_id);
 	if (dev == NULL) {
 		KASUMI_LOG_ERR("failed to create cryptodev vdev");
@@ -609,9 +590,10 @@ cryptodev_kasumi_create(const char *name,
 
 	return 0;
 init_error:
-	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed", name);
+	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed",
+			init_params->name);
 
-	cryptodev_kasumi_remove(crypto_dev_name);
+	cryptodev_kasumi_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -622,19 +604,23 @@ cryptodev_kasumi_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_kasumi_create(name, &init_params);
+	return cryptodev_kasumi_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c
index c69606b..ce60470 100644
--- a/drivers/crypto/null/null_crypto_pmd.c
+++ b/drivers/crypto/null/null_crypto_pmd.c
@@ -38,27 +38,6 @@
 
 #include "null_crypto_pmd_private.h"
 
-/**
- * Global static parameter used to create a unique name for each crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_NULL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-
 /** verify and set session parameters */
 int
 null_crypto_set_session_parameters(
@@ -186,21 +165,24 @@ static int cryptodev_null_remove(const char *name);
 
 /** Create crypto device */
 static int
-cryptodev_null_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_null_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct null_crypto_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		NULL_CRYPTO_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
+
+		if (ret < 0) {
+			NULL_CRYPTO_LOG_ERR("failed to create unique "
+					"name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct null_crypto_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -226,8 +208,9 @@ cryptodev_null_create(const char *name,
 	return 0;
 
 init_error:
-	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed", name);
-	cryptodev_null_remove(crypto_dev_name);
+	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed",
+			init_params->name);
+	cryptodev_null_remove(init_params->name);
 
 	return -EFAULT;
 }
@@ -240,19 +223,23 @@ cryptodev_null_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_null_create(name, &init_params);
+	return cryptodev_null_create(&init_params);
 }
 
 /** Uninitialise null crypto device */
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index 5f8fa33..c556a9e 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -47,28 +47,6 @@ static int cryptodev_openssl_remove(const char *name);
 /*----------------------------------------------------------------------------*/
 
 /**
- * Global static parameter used to create a unique name for each
- * OPENSSL crypto device.
- */
-static unsigned int unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u",
-			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
-/**
  * Increment counter by 1
  * Counter is 64 bit array, big-endian
  */
@@ -964,21 +942,23 @@ openssl_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 
 /** Create OPENSSL crypto device */
 static int
-cryptodev_openssl_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_openssl_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct openssl_private *internals;
 
-	/* create a unique device name */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		OPENSSL_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
+
+		if (ret < 0) {
+			OPENSSL_LOG_ERR("failed to create unique name");
+			return ret;
+		}
 	}
 
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct openssl_private),
 			init_params->socket_id);
 	if (dev == NULL) {
@@ -1006,9 +986,10 @@ cryptodev_openssl_create(const char *name,
 	return 0;
 
 init_error:
-	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed", name);
+	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed",
+			init_params->name);
 
-	cryptodev_openssl_remove(crypto_dev_name);
+	cryptodev_openssl_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -1020,19 +1001,23 @@ cryptodev_openssl_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_openssl_create(name, &init_params);
+	return cryptodev_openssl_create(&init_params);
 }
 
 /** Uninitialise OPENSSL crypto device */
diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
index 3b4292a..4a70f06 100644
--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
@@ -46,27 +46,6 @@
 #define SNOW3G_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each SNOW 3G
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum snow3g_operation
 snow3g_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -548,14 +527,23 @@ snow3g_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_snow3g_remove(const char *name);
 
 static int
-cryptodev_snow3g_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_snow3g_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct snow3g_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
+
+		if (ret < 0) {
+			SNOW3G_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -564,15 +552,7 @@ cryptodev_snow3g_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		SNOW3G_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct snow3g_private), init_params->socket_id);
 	if (dev == NULL) {
 		SNOW3G_LOG_ERR("failed to create cryptodev vdev");
@@ -597,9 +577,10 @@ cryptodev_snow3g_create(const char *name,
 
 	return 0;
 init_error:
-	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed", name);
+	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed",
+			init_params->name);
 
-	cryptodev_snow3g_remove(crypto_dev_name);
+	cryptodev_snow3g_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -610,19 +591,23 @@ cryptodev_snow3g_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_snow3g_create(name, &init_params);
+	return cryptodev_snow3g_create(&init_params);
 }
 
 static int
diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
index 3849119..062cfff 100644
--- a/drivers/crypto/zuc/rte_zuc_pmd.c
+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
@@ -45,27 +45,6 @@
 #define ZUC_MAX_BURST 8
 #define BYTE_LEN 8
 
-/**
- * Global static parameter used to create a unique name for each ZUC
- * crypto device.
- */
-static unsigned unique_name_id;
-
-static inline int
-create_unique_device_name(char *name, size_t size)
-{
-	int ret;
-
-	if (name == NULL)
-		return -EINVAL;
-
-	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_ZUC_PMD),
-			unique_name_id++);
-	if (ret < 0)
-		return ret;
-	return 0;
-}
-
 /** Get xform chain order. */
 static enum zuc_operation
 zuc_get_mode(const struct rte_crypto_sym_xform *xform)
@@ -448,14 +427,23 @@ zuc_pmd_dequeue_burst(void *queue_pair,
 static int cryptodev_zuc_remove(const char *name);
 
 static int
-cryptodev_zuc_create(const char *name,
-		struct rte_crypto_vdev_init_params *init_params)
+cryptodev_zuc_create(struct rte_crypto_vdev_init_params *init_params)
 {
 	struct rte_cryptodev *dev;
-	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	struct zuc_private *internals;
 	uint64_t cpu_flags = 0;
 
+	if (init_params->name[0] == '\0') {
+		int ret = rte_cryptodev_pmd_create_dev_name(
+				init_params->name,
+				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
+
+		if (ret < 0) {
+			ZUC_LOG_ERR("failed to create unique name");
+			return ret;
+		}
+	}
+
 	/* Check CPU for supported vector instruction set */
 	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
 		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
@@ -464,15 +452,7 @@ cryptodev_zuc_create(const char *name,
 		return -EFAULT;
 	}
 
-
-	/* Create a unique device name. */
-	if (create_unique_device_name(crypto_dev_name,
-			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
-		ZUC_LOG_ERR("failed to create unique cryptodev name");
-		return -EINVAL;
-	}
-
-	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
+	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
 			sizeof(struct zuc_private), init_params->socket_id);
 	if (dev == NULL) {
 		ZUC_LOG_ERR("failed to create cryptodev vdev");
@@ -497,9 +477,10 @@ cryptodev_zuc_create(const char *name,
 
 	return 0;
 init_error:
-	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed", name);
+	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed",
+			init_params->name);
 
-	cryptodev_zuc_remove(crypto_dev_name);
+	cryptodev_zuc_remove(init_params->name);
 	return -EFAULT;
 }
 
@@ -510,19 +491,23 @@ cryptodev_zuc_probe(const char *name,
 	struct rte_crypto_vdev_init_params init_params = {
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
 		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
-		rte_socket_id()
+		rte_socket_id(),
+		{0}
 	};
 
 	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
 	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
 			init_params.socket_id);
+	if (init_params.name[0] != '\0')
+		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
+			init_params.name);
 	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
 			init_params.max_nb_queue_pairs);
 	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
 			init_params.max_nb_sessions);
 
-	return cryptodev_zuc_create(name, &init_params);
+	return cryptodev_zuc_create(&init_params);
 }
 
 static int
-- 
2.7.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
@ 2017-01-16 16:01         ` Declan Doherty
  0 siblings, 0 replies; 12+ messages in thread
From: Declan Doherty @ 2017-01-16 16:01 UTC (permalink / raw)
  To: Fan Zhang, dev; +Cc: pablo.de.lara.guarch

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@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@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
@ 2017-01-16 16:01         ` Declan Doherty
  0 siblings, 0 replies; 12+ messages in thread
From: Declan Doherty @ 2017-01-16 16:01 UTC (permalink / raw)
  To: Fan Zhang, dev; +Cc: pablo.de.lara.guarch

On 16/01/17 14:14, Fan Zhang wrote:
> This patch adds user defined name parsing feature to software PMDs.
>
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> ---
>  drivers/crypto/aesni_gcm/aesni_gcm_pmd.c   | 58 ++++++++++------------------
>  drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 ++++++++++--------------------
>  drivers/crypto/kasumi/rte_kasumi_pmd.c     | 58 +++++++++++-----------------
>  drivers/crypto/null/null_crypto_pmd.c      | 55 ++++++++++-----------------
>  drivers/crypto/openssl/rte_openssl_pmd.c   | 55 ++++++++++-----------------
>  drivers/crypto/snow3g/rte_snow3g_pmd.c     | 59 +++++++++++------------------
>  drivers/crypto/zuc/rte_zuc_pmd.c           | 59 +++++++++++------------------
>  7 files changed, 148 insertions(+), 257 deletions(-)
>
> diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
> index dba5e15..ddb2e0e 100644
> --- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
> +++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
> @@ -43,27 +43,6 @@
>
>  #include "aesni_gcm_pmd_private.h"
>
> -/**
> - * Global static parameter used to create a unique name for each AES-NI multi
> - * buffer crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
>  static int
>  aesni_gcm_calculate_hash_sub_key(uint8_t *hsubkey, unsigned hsubkey_length,
>  		uint8_t *aeskey, unsigned aeskey_length)
> @@ -407,14 +386,23 @@ aesni_gcm_pmd_dequeue_burst(void *queue_pair,
>  static int aesni_gcm_remove(const char *name);
>
>  static int
> -aesni_gcm_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct aesni_gcm_private *internals;
>  	enum aesni_gcm_vector_mode vector_mode;
>
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
> +
> +		if (ret < 0) {
> +			GCM_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
> +	}
> +
>  	/* Check CPU for support for AES instruction set */
>  	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
>  		GCM_LOG_ERR("AES instructions not supported by CPU");
> @@ -433,15 +421,7 @@ aesni_gcm_create(const char *name,
>  		return -EFAULT;
>  	}
>
> -	/* create a unique device name */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		GCM_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> -	}
> -
> -
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct aesni_gcm_private), init_params->socket_id);
>  	if (dev == NULL) {
>  		GCM_LOG_ERR("failed to create cryptodev vdev");
> @@ -484,9 +464,9 @@ aesni_gcm_create(const char *name,
>  	return 0;
>
>  init_error:
> -	GCM_LOG_ERR("driver %s: create failed", name);
> +	GCM_LOG_ERR("driver %s: create failed", init_params->name);
>
> -	aesni_gcm_remove(crypto_dev_name);
> +	aesni_gcm_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -496,19 +476,23 @@ aesni_gcm_probe(const char *name, const char *input_args)
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return aesni_gcm_create(name, &init_params);
> +	return aesni_gcm_create(&init_params);
>  }
>
>  static int
> diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
> index f07cd07..26dc05e 100644
> --- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
> +++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
> @@ -40,27 +40,6 @@
>
>  #include "rte_aesni_mb_pmd_private.h"
>
> -/**
> - * Global static parameter used to create a unique name for each AES-NI multi
> - * buffer crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
>  typedef void (*hash_one_block_t)(void *data, void *digest);
>  typedef void (*aes_keyexp_t)(void *key, void *enc_exp_keys, void *dec_exp_keys);
>
> @@ -598,18 +577,21 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
>  static int cryptodev_aesni_mb_remove(const char *name);
>
>  static int
> -cryptodev_aesni_mb_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_aesni_mb_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct aesni_mb_private *internals;
>  	enum aesni_mb_vector_mode vector_mode;
>
> -	/* Check CPU for support for AES instruction set */
> -	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AES)) {
> -		MB_LOG_ERR("AES instructions not supported by CPU");
> -		return -EFAULT;
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
> +
> +		if (ret < 0) {
> +			MB_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
>  	}
>
>  	/* Check CPU for supported vector instruction set */
> @@ -624,15 +606,7 @@ cryptodev_aesni_mb_create(const char *name,
>  		return -EFAULT;
>  	}
>
> -	/* create a unique device name */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		MB_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> -	}
> -
> -
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct aesni_mb_private), init_params->socket_id);
>  	if (dev == NULL) {
>  		MB_LOG_ERR("failed to create cryptodev vdev");
> @@ -673,9 +647,10 @@ cryptodev_aesni_mb_create(const char *name,
>
>  	return 0;
>  init_error:
> -	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed", name);
> +	MB_LOG_ERR("driver %s: cryptodev_aesni_create failed",
> +			init_params->name);
>
> -	cryptodev_aesni_mb_remove(crypto_dev_name);
> +	cryptodev_aesni_mb_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -687,19 +662,23 @@ cryptodev_aesni_mb_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		""
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_aesni_mb_create(name, &init_params);
> +	return cryptodev_aesni_mb_create(&init_params);
>  }
>
>  static int
> diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
> index b119da2..c38c851 100644
> --- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
> +++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
> @@ -47,27 +47,6 @@
>  #define KASUMI_MAX_BURST 4
>  #define BYTE_LEN 8
>
> -/**
> - * Global static parameter used to create a unique name for each KASUMI
> - * crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_KASUMI_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
>  /** Get xform chain order. */
>  static enum kasumi_operation
>  kasumi_get_mode(const struct rte_crypto_sym_xform *xform)
> @@ -559,14 +538,23 @@ kasumi_pmd_dequeue_burst(void *queue_pair,
>  static int cryptodev_kasumi_remove(const char *name);
>
>  static int
> -cryptodev_kasumi_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_kasumi_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct kasumi_private *internals;
>  	uint64_t cpu_flags = 0;
>
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
> +
> +		if (ret < 0) {
> +			KASUMI_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
> +	}
> +
>  	/* Check CPU for supported vector instruction set */
>  	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX))
>  		cpu_flags |= RTE_CRYPTODEV_FF_CPU_AVX;
> @@ -577,14 +565,7 @@ cryptodev_kasumi_create(const char *name,
>  		return -EFAULT;
>  	}
>
> -	/* Create a unique device name. */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		KASUMI_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> -	}
> -
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct kasumi_private), init_params->socket_id);
>  	if (dev == NULL) {
>  		KASUMI_LOG_ERR("failed to create cryptodev vdev");
> @@ -609,9 +590,10 @@ cryptodev_kasumi_create(const char *name,
>
>  	return 0;
>  init_error:
> -	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed", name);
> +	KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed",
> +			init_params->name);
>
> -	cryptodev_kasumi_remove(crypto_dev_name);
> +	cryptodev_kasumi_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -622,19 +604,23 @@ cryptodev_kasumi_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_kasumi_create(name, &init_params);
> +	return cryptodev_kasumi_create(&init_params);
>  }
>
>  static int
> diff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c
> index c69606b..ce60470 100644
> --- a/drivers/crypto/null/null_crypto_pmd.c
> +++ b/drivers/crypto/null/null_crypto_pmd.c
> @@ -38,27 +38,6 @@
>
>  #include "null_crypto_pmd_private.h"
>
> -/**
> - * Global static parameter used to create a unique name for each crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_NULL_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
> -
>  /** verify and set session parameters */
>  int
>  null_crypto_set_session_parameters(
> @@ -186,21 +165,24 @@ static int cryptodev_null_remove(const char *name);
>
>  /** Create crypto device */
>  static int
> -cryptodev_null_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_null_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct null_crypto_private *internals;
>
> -	/* create a unique device name */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		NULL_CRYPTO_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
> +
> +		if (ret < 0) {
> +			NULL_CRYPTO_LOG_ERR("failed to create unique "
> +					"name");
> +			return ret;
> +		}
>  	}
>
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct null_crypto_private),
>  			init_params->socket_id);
>  	if (dev == NULL) {
> @@ -226,8 +208,9 @@ cryptodev_null_create(const char *name,
>  	return 0;
>
>  init_error:
> -	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed", name);
> -	cryptodev_null_remove(crypto_dev_name);
> +	NULL_CRYPTO_LOG_ERR("driver %s: cryptodev_null_create failed",
> +			init_params->name);
> +	cryptodev_null_remove(init_params->name);
>
>  	return -EFAULT;
>  }
> @@ -240,19 +223,23 @@ cryptodev_null_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_null_create(name, &init_params);
> +	return cryptodev_null_create(&init_params);
>  }
>
>  /** Uninitialise null crypto device */
> diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
> index 5f8fa33..c556a9e 100644
> --- a/drivers/crypto/openssl/rte_openssl_pmd.c
> +++ b/drivers/crypto/openssl/rte_openssl_pmd.c
> @@ -47,28 +47,6 @@ static int cryptodev_openssl_remove(const char *name);
>  /*----------------------------------------------------------------------------*/
>
>  /**
> - * Global static parameter used to create a unique name for each
> - * OPENSSL crypto device.
> - */
> -static unsigned int unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u",
> -			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
> -/**
>   * Increment counter by 1
>   * Counter is 64 bit array, big-endian
>   */
> @@ -964,21 +942,23 @@ openssl_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
>
>  /** Create OPENSSL crypto device */
>  static int
> -cryptodev_openssl_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_openssl_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct openssl_private *internals;
>
> -	/* create a unique device name */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		OPENSSL_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
> +
> +		if (ret < 0) {
> +			OPENSSL_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
>  	}
>
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct openssl_private),
>  			init_params->socket_id);
>  	if (dev == NULL) {
> @@ -1006,9 +986,10 @@ cryptodev_openssl_create(const char *name,
>  	return 0;
>
>  init_error:
> -	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed", name);
> +	OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed",
> +			init_params->name);
>
> -	cryptodev_openssl_remove(crypto_dev_name);
> +	cryptodev_openssl_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -1020,19 +1001,23 @@ cryptodev_openssl_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_openssl_create(name, &init_params);
> +	return cryptodev_openssl_create(&init_params);
>  }
>
>  /** Uninitialise OPENSSL crypto device */
> diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
> index 3b4292a..4a70f06 100644
> --- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
> +++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
> @@ -46,27 +46,6 @@
>  #define SNOW3G_MAX_BURST 8
>  #define BYTE_LEN 8
>
> -/**
> - * Global static parameter used to create a unique name for each SNOW 3G
> - * crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
>  /** Get xform chain order. */
>  static enum snow3g_operation
>  snow3g_get_mode(const struct rte_crypto_sym_xform *xform)
> @@ -548,14 +527,23 @@ snow3g_pmd_dequeue_burst(void *queue_pair,
>  static int cryptodev_snow3g_remove(const char *name);
>
>  static int
> -cryptodev_snow3g_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_snow3g_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct snow3g_private *internals;
>  	uint64_t cpu_flags = 0;
>
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
> +
> +		if (ret < 0) {
> +			SNOW3G_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
> +	}
> +
>  	/* Check CPU for supported vector instruction set */
>  	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
>  		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
> @@ -564,15 +552,7 @@ cryptodev_snow3g_create(const char *name,
>  		return -EFAULT;
>  	}
>
> -
> -	/* Create a unique device name. */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		SNOW3G_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> -	}
> -
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct snow3g_private), init_params->socket_id);
>  	if (dev == NULL) {
>  		SNOW3G_LOG_ERR("failed to create cryptodev vdev");
> @@ -597,9 +577,10 @@ cryptodev_snow3g_create(const char *name,
>
>  	return 0;
>  init_error:
> -	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed", name);
> +	SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed",
> +			init_params->name);
>
> -	cryptodev_snow3g_remove(crypto_dev_name);
> +	cryptodev_snow3g_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -610,19 +591,23 @@ cryptodev_snow3g_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_snow3g_create(name, &init_params);
> +	return cryptodev_snow3g_create(&init_params);
>  }
>
>  static int
> diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
> index 3849119..062cfff 100644
> --- a/drivers/crypto/zuc/rte_zuc_pmd.c
> +++ b/drivers/crypto/zuc/rte_zuc_pmd.c
> @@ -45,27 +45,6 @@
>  #define ZUC_MAX_BURST 8
>  #define BYTE_LEN 8
>
> -/**
> - * Global static parameter used to create a unique name for each ZUC
> - * crypto device.
> - */
> -static unsigned unique_name_id;
> -
> -static inline int
> -create_unique_device_name(char *name, size_t size)
> -{
> -	int ret;
> -
> -	if (name == NULL)
> -		return -EINVAL;
> -
> -	ret = snprintf(name, size, "%s_%u", RTE_STR(CRYPTODEV_NAME_ZUC_PMD),
> -			unique_name_id++);
> -	if (ret < 0)
> -		return ret;
> -	return 0;
> -}
> -
>  /** Get xform chain order. */
>  static enum zuc_operation
>  zuc_get_mode(const struct rte_crypto_sym_xform *xform)
> @@ -448,14 +427,23 @@ zuc_pmd_dequeue_burst(void *queue_pair,
>  static int cryptodev_zuc_remove(const char *name);
>
>  static int
> -cryptodev_zuc_create(const char *name,
> -		struct rte_crypto_vdev_init_params *init_params)
> +cryptodev_zuc_create(struct rte_crypto_vdev_init_params *init_params)
>  {
>  	struct rte_cryptodev *dev;
> -	char crypto_dev_name[RTE_CRYPTODEV_NAME_MAX_LEN];
>  	struct zuc_private *internals;
>  	uint64_t cpu_flags = 0;
>
> +	if (init_params->name[0] == '\0') {
> +		int ret = rte_cryptodev_pmd_create_dev_name(
> +				init_params->name,
> +				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
> +
> +		if (ret < 0) {
> +			ZUC_LOG_ERR("failed to create unique name");
> +			return ret;
> +		}
> +	}
> +
>  	/* Check CPU for supported vector instruction set */
>  	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1))
>  		cpu_flags |= RTE_CRYPTODEV_FF_CPU_SSE;
> @@ -464,15 +452,7 @@ cryptodev_zuc_create(const char *name,
>  		return -EFAULT;
>  	}
>
> -
> -	/* Create a unique device name. */
> -	if (create_unique_device_name(crypto_dev_name,
> -			RTE_CRYPTODEV_NAME_MAX_LEN) != 0) {
> -		ZUC_LOG_ERR("failed to create unique cryptodev name");
> -		return -EINVAL;
> -	}
> -
> -	dev = rte_cryptodev_pmd_virtual_dev_init(crypto_dev_name,
> +	dev = rte_cryptodev_pmd_virtual_dev_init(init_params->name,
>  			sizeof(struct zuc_private), init_params->socket_id);
>  	if (dev == NULL) {
>  		ZUC_LOG_ERR("failed to create cryptodev vdev");
> @@ -497,9 +477,10 @@ cryptodev_zuc_create(const char *name,
>
>  	return 0;
>  init_error:
> -	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed", name);
> +	ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed",
> +			init_params->name);
>
> -	cryptodev_zuc_remove(crypto_dev_name);
> +	cryptodev_zuc_remove(init_params->name);
>  	return -EFAULT;
>  }
>
> @@ -510,19 +491,23 @@ cryptodev_zuc_probe(const char *name,
>  	struct rte_crypto_vdev_init_params init_params = {
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
>  		RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS,
> -		rte_socket_id()
> +		rte_socket_id(),
> +		{0}
>  	};
>
>  	rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
>
>  	RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
>  			init_params.socket_id);
> +	if (init_params.name[0] != '\0')
> +		RTE_LOG(INFO, PMD, "  User defined name = %s\n",
> +			init_params.name);
>  	RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
>  			init_params.max_nb_queue_pairs);
>  	RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
>  			init_params.max_nb_sessions);
>
> -	return cryptodev_zuc_create(name, &init_params);
> +	return cryptodev_zuc_create(&init_params);
>  }
>
>  static int
>

Acked-by: Declan Doherty <declan.doherty@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter
  2017-01-16 14:14     ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter Fan Zhang
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
  2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
@ 2017-01-16 20:00       ` De Lara Guarch, Pablo
  2 siblings, 0 replies; 12+ messages in thread
From: De Lara Guarch, Pablo @ 2017-01-16 20:00 UTC (permalink / raw)
  To: Zhang, Roy Fan, dev



> -----Original Message-----
> From: Zhang, Roy Fan
> Sent: Monday, January 16, 2017 2:15 PM
> To: dev@dpdk.org
> Cc: De Lara Guarch, Pablo
> Subject: [PATCH v3 0/2] crypto: add user defined name initializing
> parameter
> 
> This patchset adds a user defined name initializing parameter to all
> software cryptodevs.
> 
> v3:
> Added name parameter length check
> 
> v2:
> Fixed a line adds whitespace error
> Updated rte_cryptodev_version.map
> 
> Fan Zhang (2):
>   cryptodev: add user defined name initializing parameter to software
>     PMD
>   crypto: add user defined name initializing parameter parsing to
>     software PMDs
> 
>  drivers/crypto/aesni_gcm/aesni_gcm_pmd.c       | 58 +++++++++-------------
> --
>  drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c     | 61 +++++++++-----------
> ------
>  drivers/crypto/kasumi/rte_kasumi_pmd.c         | 58 ++++++++++--------------
>  drivers/crypto/null/null_crypto_pmd.c          | 55 +++++++++--------------
>  drivers/crypto/openssl/rte_openssl_pmd.c       | 55 +++++++++--------------
>  drivers/crypto/snow3g/rte_snow3g_pmd.c         | 59 ++++++++++------------
> ---
>  drivers/crypto/zuc/rte_zuc_pmd.c               | 59 ++++++++++---------------
>  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 +++
>  11 files changed, 216 insertions(+), 261 deletions(-)
> 
> --
> 2.7.4

Combined both patches to avoid compilation breakage.

Applied to dpdk-next-crypto.
Thanks,

Pablo

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-01-16 20:00 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-11 17:13 [dpdk-dev] [PATCH 0/2] crypto: add user defined name initializing parameter Fan Zhang
2017-01-11 17:13 ` [dpdk-dev] [PATCH 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
2017-01-11 17:13 ` [dpdk-dev] [PATCH 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
2017-01-12 14:28 ` [dpdk-dev] [PATCH v2 0/2] crypto: add user defined name initializing parameter Fan Zhang
2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
2017-01-16 14:14     ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter Fan Zhang
2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD Fan Zhang
2017-01-16 16:01         ` Declan Doherty
2017-01-16 14:14       ` [dpdk-dev] [PATCH v3 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang
2017-01-16 16:01         ` Declan Doherty
2017-01-16 20:00       ` [dpdk-dev] [PATCH v3 0/2] crypto: add user defined name initializing parameter De Lara Guarch, Pablo
2017-01-12 14:28   ` [dpdk-dev] [PATCH v2 2/2] crypto: add user defined name initializing parameter parsing to software PMDs Fan Zhang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).