[dpdk-dev,v2,06/12] cryptodev: move vdev functions to a separate file

Message ID 20170621062826.21896-7-pablo.de.lara.guarch@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

De Lara Guarch, Pablo June 21, 2017, 6:28 a.m. UTC
  Move all functions handling virtual devices to a separate
header file "rte_cryptodev_vdev.h", in order to leave only
generic functions for any device in the rest of the files.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
---
 drivers/crypto/aesni_gcm/aesni_gcm_pmd.c       |   1 +
 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c     |   1 +
 drivers/crypto/armv8/rte_armv8_pmd.c           |   1 +
 drivers/crypto/kasumi/rte_kasumi_pmd.c         |   1 +
 drivers/crypto/null/null_crypto_pmd.c          |   1 +
 drivers/crypto/openssl/rte_openssl_pmd.c       |   1 +
 drivers/crypto/scheduler/scheduler_pmd.c       |  44 +-----
 drivers/crypto/scheduler/scheduler_pmd_ops.c   |   1 +
 drivers/crypto/snow3g/rte_snow3g_pmd.c         |   1 +
 drivers/crypto/zuc/rte_zuc_pmd.c               |   1 +
 lib/librte_cryptodev/Makefile                  |   1 +
 lib/librte_cryptodev/rte_cryptodev.c           | 127 ---------------
 lib/librte_cryptodev/rte_cryptodev.h           |  29 ----
 lib/librte_cryptodev/rte_cryptodev_pmd.h       |  18 ---
 lib/librte_cryptodev/rte_cryptodev_vdev.h      | 210 +++++++++++++++++++++++++
 lib/librte_cryptodev/rte_cryptodev_version.map |  10 +-
 16 files changed, 226 insertions(+), 222 deletions(-)
 create mode 100644 lib/librte_cryptodev/rte_cryptodev_vdev.h
  

Comments

Doherty, Declan June 23, 2017, 12:52 p.m. UTC | #1
On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> Move all functions handling virtual devices to a separate
> header file "rte_cryptodev_vdev.h", in order to leave only
> generic functions for any device in the rest of the files.
>
> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> ---
...
>

Acked-by: Declan Doherty <declan.doherty@intel.com>
  
Thomas Monjalon June 26, 2017, 11:30 p.m. UTC | #2
23/06/2017 14:52, Declan Doherty:
> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > Move all functions handling virtual devices to a separate
> > header file "rte_cryptodev_vdev.h", in order to leave only
> > generic functions for any device in the rest of the files.
> >
> > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> 
> Acked-by: Declan Doherty <declan.doherty@intel.com>

This patch is moving some code from a .c to a .h.
The consequence is that driver are now compiling new functions
from the .h and require librte_kvargs to link with.
It is a build error in shared lib mode.

Please keep the code in a .c file if possible.
  
De Lara Guarch, Pablo June 27, 2017, 9:51 a.m. UTC | #3
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Tuesday, June 27, 2017 12:31 AM
> To: Doherty, Declan <declan.doherty@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
> 
> 23/06/2017 14:52, Declan Doherty:
> > On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > Move all functions handling virtual devices to a separate header
> > > file "rte_cryptodev_vdev.h", in order to leave only generic
> > > functions for any device in the rest of the files.
> > >
> > > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >
> > Acked-by: Declan Doherty <declan.doherty@intel.com>
> 
> This patch is moving some code from a .c to a .h.
> The consequence is that driver are now compiling new functions from the .h
> and require librte_kvargs to link with.
> It is a build error in shared lib mode.
> 
> Please keep the code in a .c file if possible.

Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
Also, since ethdev have separated pci and vdev functions in separate .h files,
I preferred to be consistent and do the same.

Thanks,
Pablo
  
Thomas Monjalon June 27, 2017, 2:28 p.m. UTC | #4
27/06/2017 11:51, De Lara Guarch, Pablo:
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > 23/06/2017 14:52, Declan Doherty:
> > > On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > > Move all functions handling virtual devices to a separate header
> > > > file "rte_cryptodev_vdev.h", in order to leave only generic
> > > > functions for any device in the rest of the files.
> > > >
> > > > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > >
> > > Acked-by: Declan Doherty <declan.doherty@intel.com>
> > 
> > This patch is moving some code from a .c to a .h.
> > The consequence is that driver are now compiling new functions from the .h
> > and require librte_kvargs to link with.
> > It is a build error in shared lib mode.
> > 
> > Please keep the code in a .c file if possible.
> 
> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
> Also, since ethdev have separated pci and vdev functions in separate .h files,
> I preferred to be consistent and do the same.

There is no reason to implement these functions in .h files.
I prefer to keep them in a .c file and just export the proto in .h.
  
Ferruh Yigit June 27, 2017, 3:11 p.m. UTC | #5
On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> 27/06/2017 11:51, De Lara Guarch, Pablo:
>> From: Thomas Monjalon [mailto:thomas@monjalon.net]
>>> 23/06/2017 14:52, Declan Doherty:
>>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
>>>>> Move all functions handling virtual devices to a separate header
>>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
>>>>> functions for any device in the rest of the files.
>>>>>
>>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
>>>>
>>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
>>>
>>> This patch is moving some code from a .c to a .h.
>>> The consequence is that driver are now compiling new functions from the .h
>>> and require librte_kvargs to link with.
>>> It is a build error in shared lib mode.
>>>
>>> Please keep the code in a .c file if possible.
>>
>> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
>> Also, since ethdev have separated pci and vdev functions in separate .h files,
>> I preferred to be consistent and do the same.
> 
> There is no reason to implement these functions in .h files.
> I prefer to keep them in a .c file and just export the proto in .h.

This is same in the eth_dev too.

These are helper functions, and implementing them in .h file has the
benefit of function goes into PMD library, and there is no dependency
from PMDs to librte_ether for these functions (there are dependencies
for other functions ..).

It looks acceptable for me for helper functions to be implemented in
header file. But if we decide to move them into .c file, .map file
should be updated to export them, and I suppose ethdev also should be
updated to be compatible.

Thanks,
ferruh
  
Thomas Monjalon June 27, 2017, 4:09 p.m. UTC | #6
27/06/2017 17:11, Ferruh Yigit:
> On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > 27/06/2017 11:51, De Lara Guarch, Pablo:
> >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> >>> 23/06/2017 14:52, Declan Doherty:
> >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> >>>>> Move all functions handling virtual devices to a separate header
> >>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
> >>>>> functions for any device in the rest of the files.
> >>>>>
> >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >>>>
> >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> >>>
> >>> This patch is moving some code from a .c to a .h.
> >>> The consequence is that driver are now compiling new functions from the .h
> >>> and require librte_kvargs to link with.
> >>> It is a build error in shared lib mode.
> >>>
> >>> Please keep the code in a .c file if possible.
> >>
> >> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
> >> Also, since ethdev have separated pci and vdev functions in separate .h files,
> >> I preferred to be consistent and do the same.
> > 
> > There is no reason to implement these functions in .h files.
> > I prefer to keep them in a .c file and just export the proto in .h.
> 
> This is same in the eth_dev too.
> 
> These are helper functions, and implementing them in .h file has the
> benefit of function goes into PMD library, and there is no dependency
> from PMDs to librte_ether for these functions (there are dependencies
> for other functions ..).
> 
> It looks acceptable for me for helper functions to be implemented in
> header file. But if we decide to move them into .c file, .map file
> should be updated to export them, and I suppose ethdev also should be
> updated to be compatible.

Yes we should avoid adding code in .h.
It is accepted only for performance reasons.
ethdev can be reworked later.
cryptodev can be improved now and avoid adding rte_devargs deps on PMDs.
  
De Lara Guarch, Pablo June 27, 2017, 5:11 p.m. UTC | #7
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Tuesday, June 27, 2017 5:09 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Doherty, Declan
> <declan.doherty@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
> 
> 27/06/2017 17:11, Ferruh Yigit:
> > On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > > 27/06/2017 11:51, De Lara Guarch, Pablo:
> > >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > >>> 23/06/2017 14:52, Declan Doherty:
> > >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > >>>>> Move all functions handling virtual devices to a separate header
> > >>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
> > >>>>> functions for any device in the rest of the files.
> > >>>>>
> > >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > >>>>
> > >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> > >>>
> > >>> This patch is moving some code from a .c to a .h.
> > >>> The consequence is that driver are now compiling new functions
> > >>> from the .h and require librte_kvargs to link with.
> > >>> It is a build error in shared lib mode.
> > >>>
> > >>> Please keep the code in a .c file if possible.
> > >>
> > >> Sorry about this. I just fixed it in the subtree, so pull it whenever you
> are ready.
> > >> Also, since ethdev have separated pci and vdev functions in
> > >> separate .h files, I preferred to be consistent and do the same.
> > >
> > > There is no reason to implement these functions in .h files.
> > > I prefer to keep them in a .c file and just export the proto in .h.
> >
> > This is same in the eth_dev too.
> >
> > These are helper functions, and implementing them in .h file has the
> > benefit of function goes into PMD library, and there is no dependency
> > from PMDs to librte_ether for these functions (there are dependencies
> > for other functions ..).
> >
> > It looks acceptable for me for helper functions to be implemented in
> > header file. But if we decide to move them into .c file, .map file
> > should be updated to export them, and I suppose ethdev also should be
> > updated to be compatible.
> 
> Yes we should avoid adding code in .h.
> It is accepted only for performance reasons.
> ethdev can be reworked later.
> cryptodev can be improved now and avoid adding rte_devargs deps on
> PMDs.

Ok, will make those changes shortly.

Pablo
  
De Lara Guarch, Pablo June 27, 2017, 10:22 p.m. UTC | #8
Hi,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of De Lara Guarch,
> Pablo
> Sent: Tuesday, June 27, 2017 6:12 PM
> To: Thomas Monjalon <thomas@monjalon.net>; Yigit, Ferruh
> <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org; Doherty, Declan <declan.doherty@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
> 
> 
> 
> > -----Original Message-----
> > From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > Sent: Tuesday, June 27, 2017 5:09 PM
> > To: Yigit, Ferruh <ferruh.yigit@intel.com>
> > Cc: dev@dpdk.org; De Lara Guarch, Pablo
> > <pablo.de.lara.guarch@intel.com>; Doherty, Declan
> > <declan.doherty@intel.com>
> > Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev
> > functions to a separate file
> >
> > 27/06/2017 17:11, Ferruh Yigit:
> > > On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > > > 27/06/2017 11:51, De Lara Guarch, Pablo:
> > > >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > > >>> 23/06/2017 14:52, Declan Doherty:
> > > >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > >>>>> Move all functions handling virtual devices to a separate
> > > >>>>> header file "rte_cryptodev_vdev.h", in order to leave only
> > > >>>>> generic functions for any device in the rest of the files.
> > > >>>>>
> > > >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > > >>>>
> > > >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> > > >>>
> > > >>> This patch is moving some code from a .c to a .h.
> > > >>> The consequence is that driver are now compiling new functions
> > > >>> from the .h and require librte_kvargs to link with.
> > > >>> It is a build error in shared lib mode.
> > > >>>
> > > >>> Please keep the code in a .c file if possible.
> > > >>
> > > >> Sorry about this. I just fixed it in the subtree, so pull it
> > > >> whenever you
> > are ready.
> > > >> Also, since ethdev have separated pci and vdev functions in
> > > >> separate .h files, I preferred to be consistent and do the same.
> > > >
> > > > There is no reason to implement these functions in .h files.
> > > > I prefer to keep them in a .c file and just export the proto in .h.
> > >
> > > This is same in the eth_dev too.
> > >
> > > These are helper functions, and implementing them in .h file has the
> > > benefit of function goes into PMD library, and there is no
> > > dependency from PMDs to librte_ether for these functions (there are
> > > dependencies for other functions ..).
> > >
> > > It looks acceptable for me for helper functions to be implemented in
> > > header file. But if we decide to move them into .c file, .map file
> > > should be updated to export them, and I suppose ethdev also should
> > > be updated to be compatible.
> >
> > Yes we should avoid adding code in .h.
> > It is accepted only for performance reasons.
> > ethdev can be reworked later.
> > cryptodev can be improved now and avoid adding rte_devargs deps on
> > PMDs.
> 
> Ok, will make those changes shortly.

I have implemented these functions in a separated .c file and pushed it to dpdk-next-crypto.

Pablo
> 
> Pablo
  

Patch

diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
index 246f71e..4d7aa4f 100644
--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
@@ -35,6 +35,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
index be38c31..3e1e2ab 100644
--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
@@ -34,6 +34,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/armv8/rte_armv8_pmd.c b/drivers/crypto/armv8/rte_armv8_pmd.c
index 29905d6..8ed26db 100644
--- a/drivers/crypto/armv8/rte_armv8_pmd.c
+++ b/drivers/crypto/armv8/rte_armv8_pmd.c
@@ -36,6 +36,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
index a95f503..ac80473 100644
--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
@@ -35,6 +35,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c
index 49da8d4..47b8dad 100644
--- a/drivers/crypto/null/null_crypto_pmd.c
+++ b/drivers/crypto/null/null_crypto_pmd.c
@@ -33,6 +33,7 @@ 
 #include <rte_common.h>
 #include <rte_config.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index 13a5129..a6438a8 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -34,6 +34,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/scheduler/scheduler_pmd.c b/drivers/crypto/scheduler/scheduler_pmd.c
index 50a196c..ae8c974 100644
--- a/drivers/crypto/scheduler/scheduler_pmd.c
+++ b/drivers/crypto/scheduler/scheduler_pmd.c
@@ -33,6 +33,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
@@ -221,41 +222,6 @@  cryptodev_scheduler_remove(struct rte_vdev_device *vdev)
 	return 0;
 }
 
-/** Parse integer from integer argument */
-static int
-parse_integer_arg(const char *key __rte_unused,
-		const char *value, void *extra_args)
-{
-	int *i = (int *) extra_args;
-
-	*i = atoi(value);
-	if (*i < 0) {
-		CS_LOG_ERR("Argument has to be positive.\n");
-		return -EINVAL;
-	}
-
-	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) {
-		CS_LOG_ERR("Invalid name %s, should be less than "
-				"%u bytes.\n", value,
-				RTE_CRYPTODEV_NAME_MAX_LEN - 1);
-		return -EINVAL;
-	}
-
-	strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
-
-	return 0;
-}
-
 /** Parse slave */
 static int
 parse_slave_arg(const char *key __rte_unused,
@@ -338,26 +304,26 @@  scheduler_parse_init_params(struct scheduler_init_params *params,
 
 		ret = rte_kvargs_process(kvlist,
 				RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
-				&parse_integer_arg,
+				&rte_cryptodev_vdev_parse_integer_arg,
 				&params->def_p.max_nb_queue_pairs);
 		if (ret < 0)
 			goto free_kvlist;
 
 		ret = rte_kvargs_process(kvlist,
 				RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
-				&parse_integer_arg,
+				&rte_cryptodev_vdev_parse_integer_arg,
 				&params->def_p.max_nb_sessions);
 		if (ret < 0)
 			goto free_kvlist;
 
 		ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
-				&parse_integer_arg,
+				&rte_cryptodev_vdev_parse_integer_arg,
 				&params->def_p.socket_id);
 		if (ret < 0)
 			goto free_kvlist;
 
 		ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
-				&parse_name_arg,
+				&rte_cryptodev_vdev_parse_name_arg,
 				&params->def_p);
 		if (ret < 0)
 			goto free_kvlist;
diff --git a/drivers/crypto/scheduler/scheduler_pmd_ops.c b/drivers/crypto/scheduler/scheduler_pmd_ops.c
index 2b5858d..4fc8b91 100644
--- a/drivers/crypto/scheduler/scheduler_pmd_ops.c
+++ b/drivers/crypto/scheduler/scheduler_pmd_ops.c
@@ -37,6 +37,7 @@ 
 #include <rte_dev.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_reorder.h>
 
 #include "scheduler_pmd_private.h"
diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
index f17c541..855be72 100644
--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
@@ -35,6 +35,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
index ab42d06..7681587 100644
--- a/drivers/crypto/zuc/rte_zuc_pmd.c
+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
@@ -35,6 +35,7 @@ 
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
 #include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
 #include <rte_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
diff --git a/lib/librte_cryptodev/Makefile b/lib/librte_cryptodev/Makefile
index 18f5e8c..4d37acf 100644
--- a/lib/librte_cryptodev/Makefile
+++ b/lib/librte_cryptodev/Makefile
@@ -48,6 +48,7 @@  SYMLINK-y-include += rte_crypto.h
 SYMLINK-y-include += rte_crypto_sym.h
 SYMLINK-y-include += rte_cryptodev.h
 SYMLINK-y-include += rte_cryptodev_pmd.h
+SYMLINK-y-include += rte_cryptodev_vdev.h
 
 # versioning export map
 EXPORT_MAP := rte_cryptodev_version.map
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 8e5382d..c0cfe94 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -101,18 +101,6 @@  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
-};
-
 /**
  * The crypto cipher algorithm strings identifiers.
  * It could be used in application command line.
@@ -233,89 +221,6 @@  rte_crypto_auth_operation_strings[] = {
 		[RTE_CRYPTO_AUTH_OP_GENERATE]	= "generate"
 };
 
-/** Parse integer from integer argument */
-static int
-parse_integer_arg(const char *key __rte_unused,
-		const char *value, void *extra_args)
-{
-	int *i = extra_args;
-
-	*i = atoi(value);
-	if (*i < 0) {
-		CDEV_LOG_ERR("Argument has to be positive.");
-		return -1;
-	}
-
-	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)
-{
-	struct rte_kvargs *kvlist = NULL;
-	int ret = 0;
-
-	if (params == NULL)
-		return -EINVAL;
-
-	if (input_args) {
-		kvlist = rte_kvargs_parse(input_args,
-				cryptodev_vdev_valid_params);
-		if (kvlist == NULL)
-			return -1;
-
-		ret = rte_kvargs_process(kvlist,
-					RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
-					&parse_integer_arg,
-					&params->max_nb_queue_pairs);
-		if (ret < 0)
-			goto free_kvlist;
-
-		ret = rte_kvargs_process(kvlist,
-					RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
-					&parse_integer_arg,
-					&params->max_nb_sessions);
-		if (ret < 0)
-			goto free_kvlist;
-
-		ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
-					&parse_integer_arg,
-					&params->socket_id);
-		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;
-	}
-
-free_kvlist:
-	rte_kvargs_free(kvlist);
-	return ret;
-}
-
 const struct rte_cryptodev_symmetric_capability *
 rte_cryptodev_sym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_sym_capability_idx *idx)
@@ -645,38 +550,6 @@  rte_cryptodev_pmd_release_device(struct rte_cryptodev *cryptodev)
 	return 0;
 }
 
-struct rte_cryptodev *
-rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
-		int socket_id, struct rte_vdev_device *vdev)
-{
-	struct rte_cryptodev *cryptodev;
-
-	/* allocate device structure */
-	cryptodev = rte_cryptodev_pmd_allocate(name, socket_id);
-	if (cryptodev == NULL)
-		return NULL;
-
-	/* allocate private device structure */
-	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-		cryptodev->data->dev_private =
-				rte_zmalloc_socket("cryptodev device private",
-						dev_private_size,
-						RTE_CACHE_LINE_SIZE,
-						socket_id);
-
-		if (cryptodev->data->dev_private == NULL)
-			rte_panic("Cannot allocate memzone for private device"
-					" data");
-	}
-
-	cryptodev->device = &vdev->device;
-
-	/* initialise user call-back tail queue */
-	TAILQ_INIT(&(cryptodev->link_intr_cbs));
-
-	return cryptodev;
-}
-
 int
 rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv,
 			struct rte_pci_device *pci_dev)
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index 89093f6..7f6fbf0 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -386,35 +386,6 @@  struct rte_cryptodev_stats {
 
 #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
-
-/**
- * @internal
- * Initialisation parameters for virtual crypto devices
- */
-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];
-};
-
-/**
- * Parse virtual device initialisation parameters input arguments
- * @internal
- *
- * @params	params		Initialisation parameters with defaults set.
- * @params	input_args	Command line arguments
- *
- * @return
- * 0 on successful parse
- * <0 on failure to parse
- */
-int
-rte_cryptodev_parse_vdev_init_params(
-		struct rte_crypto_vdev_init_params *params,
-		const char *input_args);
 
 /**
  * Create a virtual crypto device
diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h
index ec4ca97..0efe282 100644
--- a/lib/librte_cryptodev/rte_cryptodev_pmd.h
+++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h
@@ -456,24 +456,6 @@  struct rte_cryptodev *
 rte_cryptodev_pmd_allocate(const char *name, int socket_id);
 
 /**
- * Creates a new virtual crypto device and returns the pointer
- * to that device.
- *
- * @param	name			PMD type name
- * @param	dev_private_size	Size of crypto PMDs private data
- * @param	socket_id		Socket to allocate resources on.
- * @param	vdev			Pointer to virtual device structure.
- *
- * @return
- *   - Cryptodev pointer if device is successfully created.
- *   - NULL if device cannot be created.
- */
-struct rte_cryptodev *
-rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
-		int socket_id, struct rte_vdev_device *vdev);
-
-
-/**
  * Function for internal use by dummy drivers primarily, e.g. ring-based
  * driver.
  * Release the specified cryptodev device.
diff --git a/lib/librte_cryptodev/rte_cryptodev_vdev.h b/lib/librte_cryptodev/rte_cryptodev_vdev.h
new file mode 100644
index 0000000..82a57e5
--- /dev/null
+++ b/lib/librte_cryptodev/rte_cryptodev_vdev.h
@@ -0,0 +1,210 @@ 
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2017 Intel Corporation. All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of the copyright holder nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RTE_CRYPTODEV_VDEV_H_
+#define _RTE_CRYPTODEV_VDEV_H_
+
+#include <rte_vdev.h>
+
+#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS	8
+#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS	2048
+
+#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 * const 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
+};
+
+/**
+ * @internal
+ * Initialisation parameters for virtual crypto devices
+ */
+struct rte_crypto_vdev_init_params {
+	unsigned int max_nb_queue_pairs;
+	unsigned int max_nb_sessions;
+	uint8_t socket_id;
+	char name[RTE_CRYPTODEV_NAME_MAX_LEN];
+};
+
+/**
+ * @internal
+ * Parse name from argument
+ */
+static int
+rte_cryptodev_vdev_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;
+}
+
+/**
+ * @internal
+ * Parse integer from argument
+ */
+static int
+rte_cryptodev_vdev_parse_integer_arg(const char *key __rte_unused,
+		const char *value, void *extra_args)
+{
+	int *i = extra_args;
+
+	*i = atoi(value);
+	if (*i < 0) {
+		CDEV_LOG_ERR("Argument has to be positive.");
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * @internal
+ * Creates a new virtual crypto device and returns the pointer
+ * to that device.
+ *
+ * @param	name			PMD type name
+ * @param	dev_private_size	Size of crypto PMDs private data
+ * @param	socket_id		Socket to allocate resources on.
+ * @param	vdev			Pointer to virtual device structure.
+ *
+ * @return
+ *   - Cryptodev pointer if device is successfully created.
+ *   - NULL if device cannot be created.
+ */
+static inline struct rte_cryptodev *
+rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
+		int socket_id, struct rte_vdev_device *vdev)
+{
+	struct rte_cryptodev *cryptodev;
+
+	/* allocate device structure */
+	cryptodev = rte_cryptodev_pmd_allocate(name, socket_id);
+	if (cryptodev == NULL)
+		return NULL;
+
+	/* allocate private device structure */
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+		cryptodev->data->dev_private =
+				rte_zmalloc_socket("cryptodev device private",
+						dev_private_size,
+						RTE_CACHE_LINE_SIZE,
+						socket_id);
+
+		if (cryptodev->data->dev_private == NULL)
+			rte_panic("Cannot allocate memzone for private device"
+					" data");
+	}
+
+	cryptodev->device = &vdev->device;
+
+	/* initialise user call-back tail queue */
+	TAILQ_INIT(&(cryptodev->link_intr_cbs));
+
+	return cryptodev;
+}
+
+/**
+ * @internal
+ * Parse virtual device initialisation parameters input arguments
+ *
+ * @params	params		Initialisation parameters with defaults set.
+ * @params	input_args	Command line arguments
+ *
+ * @return
+ * 0 on successful parse
+ * <0 on failure to parse
+ */
+static inline int
+rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
+		const char *input_args)
+{
+	struct rte_kvargs *kvlist = NULL;
+	int ret = 0;
+
+	if (params == NULL)
+		return -EINVAL;
+
+	if (input_args) {
+		kvlist = rte_kvargs_parse(input_args,
+				cryptodev_vdev_valid_params);
+		if (kvlist == NULL)
+			return -1;
+
+		ret = rte_kvargs_process(kvlist,
+					RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
+					&rte_cryptodev_vdev_parse_integer_arg,
+					&params->max_nb_queue_pairs);
+		if (ret < 0)
+			goto free_kvlist;
+
+		ret = rte_kvargs_process(kvlist,
+					RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
+					&rte_cryptodev_vdev_parse_integer_arg,
+					&params->max_nb_sessions);
+		if (ret < 0)
+			goto free_kvlist;
+
+		ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
+					&rte_cryptodev_vdev_parse_integer_arg,
+					&params->socket_id);
+		if (ret < 0)
+			goto free_kvlist;
+
+		ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
+					&rte_cryptodev_vdev_parse_name_arg,
+					params);
+		if (ret < 0)
+			goto free_kvlist;
+	}
+
+free_kvlist:
+	rte_kvargs_free(kvlist);
+	return ret;
+}
+
+#endif /* _RTE_CRYPTODEV_VDEV_H_ */
diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map
index 9ac510e..d519234 100644
--- a/lib/librte_cryptodev/rte_cryptodev_version.map
+++ b/lib/librte_cryptodev/rte_cryptodev_version.map
@@ -15,7 +15,6 @@  DPDK_16.04 {
 	rte_cryptodev_pmd_allocate;
 	rte_cryptodev_pmd_callback_process;
 	rte_cryptodev_pmd_release_device;
-	rte_cryptodev_pmd_virtual_dev_init;
 	rte_cryptodev_sym_session_create;
 	rte_cryptodev_sym_session_free;
 	rte_cryptodev_socket_id;
@@ -32,20 +31,13 @@  DPDK_16.04 {
 	local: *;
 };
 
-DPDK_16.07 {
-	global:
-
-	rte_cryptodev_parse_vdev_init_params;
-
-} DPDK_16.04;
-
 DPDK_16.11 {
 	global:
 
 	rte_cryptodev_pci_probe;
 	rte_cryptodev_pci_remove;
 
-} DPDK_16.07;
+} DPDK_16.04;
 
 DPDK_17.02 {
 	global: