[dpdk-dev] [PATCH 04/12] vdev: move to drivers/bus
Tan, Jianfeng
jianfeng.tan at intel.com
Wed Aug 30 00:47:35 CEST 2017
Hi Gaetan,
On 8/29/2017 6:04 AM, Gaëtan Rivet wrote:
> On Fri, Aug 25, 2017 at 09:40:44AM +0000, Jianfeng Tan wrote:
>> Move the vdev bus from lib/librte_eal to drivers/bus.
>>
>> As the crypto vdev helper function refers to data structure
>> in rte_vdev.h, so we move those helper function into drivers/bus
>> too.
>>
>> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
>> ---
>> config/common_base | 5 +
>> drivers/bus/Makefile | 2 +
>> drivers/bus/vdev/Makefile | 57 +++++
>> drivers/bus/vdev/rte_bus_vdev_version.map | 10 +
>> drivers/bus/vdev/rte_cryptodev_vdev.c | 154 ++++++++++++++
>> drivers/bus/vdev/rte_cryptodev_vdev.h | 100 +++++++++
>> drivers/bus/vdev/rte_vdev.h | 153 +++++++++++++
>> drivers/bus/vdev/vdev.c | 342 ++++++++++++++++++++++++++++++
>> lib/librte_cryptodev/Makefile | 2 -
>> lib/librte_cryptodev/rte_cryptodev_vdev.c | 154 --------------
>> lib/librte_cryptodev/rte_cryptodev_vdev.h | 100 ---------
>> lib/librte_eal/bsdapp/eal/Makefile | 1 -
>> lib/librte_eal/common/Makefile | 2 +-
>> lib/librte_eal/common/eal_common_vdev.c | 342 ------------------------------
>> lib/librte_eal/common/include/rte_dev.h | 24 +--
>> lib/librte_eal/common/include/rte_vdev.h | 131 ------------
>> lib/librte_eal/linuxapp/eal/Makefile | 1 -
>> mk/rte.app.mk | 1 +
>> 18 files changed, 826 insertions(+), 755 deletions(-)
>> create mode 100644 drivers/bus/vdev/Makefile
>> create mode 100644 drivers/bus/vdev/rte_bus_vdev_version.map
>> create mode 100644 drivers/bus/vdev/rte_cryptodev_vdev.c
>> create mode 100644 drivers/bus/vdev/rte_cryptodev_vdev.h
>> create mode 100644 drivers/bus/vdev/rte_vdev.h
>> create mode 100644 drivers/bus/vdev/vdev.c
>> delete mode 100644 lib/librte_cryptodev/rte_cryptodev_vdev.c
>> delete mode 100644 lib/librte_cryptodev/rte_cryptodev_vdev.h
>> delete mode 100644 lib/librte_eal/common/eal_common_vdev.c
>> delete mode 100644 lib/librte_eal/common/include/rte_vdev.h
>>
>> diff --git a/config/common_base b/config/common_base
>> index 5e97a08..aca0994 100644
>> --- a/config/common_base
>> +++ b/config/common_base
>> @@ -750,3 +750,8 @@ CONFIG_RTE_APP_CRYPTO_PERF=y
>> # Compile the eventdev application
>> #
>> CONFIG_RTE_APP_EVENTDEV=y
>> +
>> +#
>> +# Compile the vdev bus
>> +#
>> +CONFIG_RTE_LIBRTE_VDEV=y
> Why not CONFIG_RTE_LIBRTE_VDEV_BUS?
> It would seem more consistent.
Was trying to be consistent with the directory name, drivers/bus/vdev.
Do you think that directory should also be renamed?
>
>> diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile
>> index 0224214..9b6d45e 100644
>> --- a/drivers/bus/Makefile
>> +++ b/drivers/bus/Makefile
>> @@ -35,4 +35,6 @@ core-libs := librte_eal librte_mbuf librte_mempool librte_ring librte_ether
>> DIRS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += fslmc
>> DEPDIRS-fslmc = $(core-libs)
>>
>> +DIRS-$(CONFIG_RTE_LIBRTE_VDEV) += vdev
>> +
>> include $(RTE_SDK)/mk/rte.subdir.mk
>> diff --git a/drivers/bus/vdev/Makefile b/drivers/bus/vdev/Makefile
>> new file mode 100644
>> index 0000000..30c4813
>> --- /dev/null
>> +++ b/drivers/bus/vdev/Makefile
>> @@ -0,0 +1,57 @@
>> +# BSD LICENSE
>> +#
>> +# Copyright(c) 2017 Intel Corporation. All rights reserved.
>> +# 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 Intel Corporation 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.
>> +
>> +include $(RTE_SDK)/mk/rte.vars.mk
>> +
>> +#
>> +# library name
>> +#
>> +LIB = librte_bus_vdev.a
>> +
>> +CFLAGS += -O3
>> +CFLAGS += $(WERROR_FLAGS)
>> +
>> +# versioning export map
>> +EXPORT_MAP := rte_bus_vdev_version.map
>> +
>> +# library version
>> +LIBABIVER := 1
>> +
>> +SRCS-y += vdev.c
>> +SRCS-y += rte_cryptodev_vdev.c
>> +
>> +#
>> +# Export include files
>> +#
>> +SYMLINK-y-include += rte_vdev.h
>> +SYMLINK-y-include += rte_cryptodev_vdev.h
>> +
> Let's say the cryptodev lib must be updated.
> I understand the need to move rte_cryptodev_vdev.h outside
> librte_cryptodev, but I guess this exposes the vdev bus to ABI / API
> instability due to a third-party subsystem?
Thank you for bringing up this question. I really don't want to move
these crypto-specific files into bus/vdev/. It's just some helper
functions to be called by crypto vdev drivers. And what's more, the only
dependence on vdev is that the API rte_cryptodev_vdev_pmd_init() has a
parameter of struct rte_vdev_device, which is totally not necessary, as
it only needs a struct rte_device parameter.
In all, I'd prefer to change this specific API and move those
crypto-specific files back to lib/librte_crypto (just like ether dev and
eventdev); but it needs API change announcement.
Any thoughts?
>
> I did something somewhat similar for PCI:
> http://dpdk.org/ml/archives/dev/2017-August/073525.html
I prefer your way to move those things to specific dev folder.
>
> I don't know which solution is best, but something certainly needs to be
> done.
>
> ---
>
> Beside the `why`, about the `how`: shouldn't this file compilation and
> symlink be conditioned to CONFIG_RTE_LIBRTE_CRYPTODEV=y?
>
> i.e.: SYMLINK-$(CONFIG_RTE_LIBRTE_CRYPTODEV)-include += rte_cryptodev_vdev.h
Yes, make sense.
Thanks,
Jianfeng
>
>> +include $(RTE_SDK)/mk/rte.lib.mk
>> diff --git a/drivers/bus/vdev/rte_bus_vdev_version.map b/drivers/bus/vdev/rte_bus_vdev_version.map
>> new file mode 100644
>> index 0000000..69740c3
>> --- /dev/null
>> +++ b/drivers/bus/vdev/rte_bus_vdev_version.map
>> @@ -0,0 +1,10 @@
>> +DPDK_17.11 {
>> + global:
>> +
>> + rte_vdev_init;
>> + rte_vdev_register;
>> + rte_vdev_uninit;
>> + rte_vdev_unregister;
>> + rte_cryptodev_vdev_pmd_init
>> + rte_cryptodev_vdev_parse_init_params
>> +};
>> diff --git a/drivers/bus/vdev/rte_cryptodev_vdev.c b/drivers/bus/vdev/rte_cryptodev_vdev.c
>> new file mode 100644
>> index 0000000..fd308b4
>> --- /dev/null
>> +++ b/drivers/bus/vdev/rte_cryptodev_vdev.c
>> @@ -0,0 +1,154 @@
>> +/*-
>> + * 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.
>> + */
>> +
>> +#include "rte_cryptodev_vdev.h"
>> +#include "rte_cryptodev_pci.h"
>> +#include "rte_cryptodev_pmd.h"
>> +
>> +/**
>> + * 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;
>> +}
>> +
>> +/**
>> + * 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;
>> +}
>> +
>> +struct rte_cryptodev *
>> +rte_cryptodev_vdev_pmd_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_vdev_parse_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,
>> + ¶ms->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,
>> + ¶ms->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,
>> + ¶ms->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;
>> +}
>> diff --git a/drivers/bus/vdev/rte_cryptodev_vdev.h b/drivers/bus/vdev/rte_cryptodev_vdev.h
>> new file mode 100644
>> index 0000000..94ab9d3
>> --- /dev/null
>> +++ b/drivers/bus/vdev/rte_cryptodev_vdev.h
>> @@ -0,0 +1,100 @@
>> +/*-
>> + * 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>
>> +#include <inttypes.h>
>> +
>> +#include "rte_cryptodev.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
>> + * 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_vdev_pmd_init(const char *name, size_t dev_private_size,
>> + int socket_id, struct rte_vdev_device *vdev);
>> +
>> +/**
>> + * @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
>> + */
>> +int
>> +rte_cryptodev_vdev_parse_init_params(struct rte_crypto_vdev_init_params *params,
>> + const char *input_args);
>> +
>> +#endif /* _RTE_CRYPTODEV_VDEV_H_ */
>> diff --git a/drivers/bus/vdev/rte_vdev.h b/drivers/bus/vdev/rte_vdev.h
>> new file mode 100644
>> index 0000000..41762b8
>> --- /dev/null
>> +++ b/drivers/bus/vdev/rte_vdev.h
>> @@ -0,0 +1,153 @@
>> +/*-
>> + * BSD LICENSE
>> + *
>> + * Copyright(c) 2016 RehiveTech. 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 RehiveTech 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_VDEV_H
>> +#define RTE_VDEV_H
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +#include <sys/queue.h>
>> +#include <rte_dev.h>
>> +#include <rte_devargs.h>
>> +
>> +struct rte_vdev_device {
>> + TAILQ_ENTRY(rte_vdev_device) next; /**< Next attached vdev */
>> + struct rte_device device; /**< Inherit core device */
>> +};
>> +
>> +/**
>> + * @internal
>> + * Helper macro for drivers that need to convert to struct rte_vdev_device.
>> + */
>> +#define RTE_DEV_TO_VDEV(ptr) \
>> + container_of(ptr, struct rte_vdev_device, device)
>> +
>> +static inline const char *
>> +rte_vdev_device_name(const struct rte_vdev_device *dev)
>> +{
>> + if (dev && dev->device.name)
>> + return dev->device.name;
>> + return NULL;
>> +}
>> +
>> +static inline const char *
>> +rte_vdev_device_args(const struct rte_vdev_device *dev)
>> +{
>> + if (dev && dev->device.devargs)
>> + return dev->device.devargs->args;
>> + return "";
>> +}
>> +
>> +/** Double linked list of virtual device drivers. */
>> +TAILQ_HEAD(vdev_driver_list, rte_vdev_driver);
>> +
>> +/**
>> + * Probe function called for each virtual device driver once.
>> + */
>> +typedef int (rte_vdev_probe_t)(struct rte_vdev_device *dev);
>> +
>> +/**
>> + * Remove function called for each virtual device driver once.
>> + */
>> +typedef int (rte_vdev_remove_t)(struct rte_vdev_device *dev);
>> +
>> +/**
>> + * A virtual device driver abstraction.
>> + */
>> +struct rte_vdev_driver {
>> + TAILQ_ENTRY(rte_vdev_driver) next; /**< Next in list. */
>> + struct rte_driver driver; /**< Inherited general driver. */
>> + rte_vdev_probe_t *probe; /**< Virtual device probe function. */
>> + rte_vdev_remove_t *remove; /**< Virtual device remove function. */
>> +};
>> +
>> +/**
>> + * Register a virtual device driver.
>> + *
>> + * @param driver
>> + * A pointer to a rte_vdev_driver structure describing the driver
>> + * to be registered.
>> + */
>> +void rte_vdev_register(struct rte_vdev_driver *driver);
>> +
>> +/**
>> + * Unregister a virtual device driver.
>> + *
>> + * @param driver
>> + * A pointer to a rte_vdev_driver structure describing the driver
>> + * to be unregistered.
>> + */
>> +void rte_vdev_unregister(struct rte_vdev_driver *driver);
>> +
>> +#define RTE_PMD_REGISTER_VDEV(nm, vdrv)\
>> +RTE_INIT(vdrvinitfn_ ##vdrv);\
>> +static const char *vdrvinit_ ## nm ## _alias;\
>> +static void vdrvinitfn_ ##vdrv(void)\
>> +{\
>> + (vdrv).driver.name = RTE_STR(nm);\
>> + (vdrv).driver.alias = vdrvinit_ ## nm ## _alias;\
>> + rte_vdev_register(&vdrv);\
>> +} \
>> +RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
>> +
>> +#define RTE_PMD_REGISTER_ALIAS(nm, alias)\
>> +static const char *vdrvinit_ ## nm ## _alias = RTE_STR(alias)
>> +
>> +/**
>> + * Initialize a driver specified by name.
>> + *
>> + * @param name
>> + * The pointer to a driver name to be initialized.
>> + * @param args
>> + * The pointer to arguments used by driver initialization.
>> + * @return
>> + * 0 on success, negative on error
>> + */
>> +int rte_vdev_init(const char *name, const char *args);
>> +
>> +/**
>> + * Uninitalize a driver specified by name.
>> + *
>> + * @param name
>> + * The pointer to a driver name to be initialized.
>> + * @return
>> + * 0 on success, negative on error
>> + */
>> +int rte_vdev_uninit(const char *name);
>> +
>> +#ifdef __cplusplus
>> +}
>> +#endif
>> +
>> +#endif
>> diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
>> new file mode 100644
>> index 0000000..f7e547a
>> --- /dev/null
>> +++ b/drivers/bus/vdev/vdev.c
>> @@ -0,0 +1,342 @@
>> +/*-
>> + * BSD LICENSE
>> + *
>> + * Copyright(c) 2016 RehiveTech. 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 RehiveTech 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.
>> + */
>> +
>> +#include <string.h>
>> +#include <inttypes.h>
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <stdint.h>
>> +#include <stdbool.h>
>> +#include <sys/queue.h>
>> +
>> +#include <rte_eal.h>
>> +#include <rte_dev.h>
>> +#include <rte_bus.h>
>> +#include <rte_vdev.h>
>> +#include <rte_common.h>
>> +#include <rte_devargs.h>
>> +#include <rte_memory.h>
>> +#include <rte_errno.h>
>> +
>> +/* Forward declare to access virtual bus name */
>> +static struct rte_bus rte_vdev_bus;
>> +
>> +/** Double linked list of virtual device drivers. */
>> +TAILQ_HEAD(vdev_device_list, rte_vdev_device);
>> +
>> +static struct vdev_device_list vdev_device_list =
>> + TAILQ_HEAD_INITIALIZER(vdev_device_list);
>> +struct vdev_driver_list vdev_driver_list =
>> + TAILQ_HEAD_INITIALIZER(vdev_driver_list);
>> +
>> +/* register a driver */
>> +void
>> +rte_vdev_register(struct rte_vdev_driver *driver)
>> +{
>> + TAILQ_INSERT_TAIL(&vdev_driver_list, driver, next);
>> +}
>> +
>> +/* unregister a driver */
>> +void
>> +rte_vdev_unregister(struct rte_vdev_driver *driver)
>> +{
>> + TAILQ_REMOVE(&vdev_driver_list, driver, next);
>> +}
>> +
>> +static int
>> +vdev_parse(const char *name, void *addr)
>> +{
>> + struct rte_vdev_driver **out = addr;
>> + struct rte_vdev_driver *driver = NULL;
>> +
>> + TAILQ_FOREACH(driver, &vdev_driver_list, next) {
>> + if (strncmp(driver->driver.name, name,
>> + strlen(driver->driver.name)) == 0)
>> + break;
>> + if (driver->driver.alias &&
>> + strncmp(driver->driver.alias, name,
>> + strlen(driver->driver.alias)) == 0)
>> + break;
>> + }
>> + if (driver != NULL &&
>> + addr != NULL)
>> + *out = driver;
>> + return driver == NULL;
>> +}
>> +
>> +static int
>> +vdev_probe_all_drivers(struct rte_vdev_device *dev)
>> +{
>> + const char *name;
>> + struct rte_vdev_driver *driver;
>> + int ret;
>> +
>> + name = rte_vdev_device_name(dev);
>> +
>> + RTE_LOG(DEBUG, EAL, "Search driver %s to probe device %s\n", name,
>> + rte_vdev_device_name(dev));
>> +
>> + if (vdev_parse(name, &driver))
>> + return -1;
>> + dev->device.driver = &driver->driver;
>> + ret = driver->probe(dev);
>> + if (ret)
>> + dev->device.driver = NULL;
>> + return ret;
>> +}
>> +
>> +static struct rte_vdev_device *
>> +find_vdev(const char *name)
>> +{
>> + struct rte_vdev_device *dev;
>> +
>> + if (!name)
>> + return NULL;
>> +
>> + TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> + const char *devname = rte_vdev_device_name(dev);
>> + if (!strncmp(devname, name, strlen(name)))
>> + return dev;
>> + }
>> +
>> + return NULL;
>> +}
>> +
>> +static struct rte_devargs *
>> +alloc_devargs(const char *name, const char *args)
>> +{
>> + struct rte_devargs *devargs;
>> + int ret;
>> +
>> + devargs = calloc(1, sizeof(*devargs));
>> + if (!devargs)
>> + return NULL;
>> +
>> + devargs->bus = &rte_vdev_bus;
>> + if (args)
>> + devargs->args = strdup(args);
>> + else
>> + devargs->args = strdup("");
>> +
>> + ret = snprintf(devargs->name, sizeof(devargs->name), "%s", name);
>> + if (ret < 0 || ret >= (int)sizeof(devargs->name)) {
>> + free(devargs->args);
>> + free(devargs);
>> + return NULL;
>> + }
>> +
>> + return devargs;
>> +}
>> +
>> +int
>> +rte_vdev_init(const char *name, const char *args)
>> +{
>> + struct rte_vdev_device *dev;
>> + struct rte_devargs *devargs;
>> + int ret;
>> +
>> + if (name == NULL)
>> + return -EINVAL;
>> +
>> + dev = find_vdev(name);
>> + if (dev)
>> + return -EEXIST;
>> +
>> + devargs = alloc_devargs(name, args);
>> + if (!devargs)
>> + return -ENOMEM;
>> +
>> + dev = calloc(1, sizeof(*dev));
>> + if (!dev) {
>> + ret = -ENOMEM;
>> + goto fail;
>> + }
>> +
>> + dev->device.devargs = devargs;
>> + dev->device.numa_node = SOCKET_ID_ANY;
>> + dev->device.name = devargs->name;
>> +
>> + ret = vdev_probe_all_drivers(dev);
>> + if (ret) {
>> + if (ret > 0)
>> + RTE_LOG(ERR, EAL, "no driver found for %s\n", name);
>> + goto fail;
>> + }
>> +
>> + TAILQ_INSERT_TAIL(&devargs_list, devargs, next);
>> +
>> + TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
>> + return 0;
>> +
>> +fail:
>> + free(devargs->args);
>> + free(devargs);
>> + free(dev);
>> + return ret;
>> +}
>> +
>> +static int
>> +vdev_remove_driver(struct rte_vdev_device *dev)
>> +{
>> + const char *name = rte_vdev_device_name(dev);
>> + const struct rte_vdev_driver *driver;
>> +
>> + if (!dev->device.driver) {
>> + RTE_LOG(DEBUG, EAL, "no driver attach to device %s\n", name);
>> + return 1;
>> + }
>> +
>> + driver = container_of(dev->device.driver, const struct rte_vdev_driver,
>> + driver);
>> + return driver->remove(dev);
>> +}
>> +
>> +int
>> +rte_vdev_uninit(const char *name)
>> +{
>> + struct rte_vdev_device *dev;
>> + struct rte_devargs *devargs;
>> + int ret;
>> +
>> + if (name == NULL)
>> + return -EINVAL;
>> +
>> + dev = find_vdev(name);
>> + if (!dev)
>> + return -ENOENT;
>> +
>> + devargs = dev->device.devargs;
>> +
>> + ret = vdev_remove_driver(dev);
>> + if (ret)
>> + return ret;
>> +
>> + TAILQ_REMOVE(&vdev_device_list, dev, next);
>> +
>> + TAILQ_REMOVE(&devargs_list, devargs, next);
>> +
>> + free(devargs->args);
>> + free(devargs);
>> + free(dev);
>> + return 0;
>> +}
>> +
>> +static int
>> +vdev_scan(void)
>> +{
>> + struct rte_vdev_device *dev;
>> + struct rte_devargs *devargs;
>> +
>> + /* for virtual devices we scan the devargs_list populated via cmdline */
>> + TAILQ_FOREACH(devargs, &devargs_list, next) {
>> +
>> + if (devargs->bus != &rte_vdev_bus)
>> + continue;
>> +
>> + dev = find_vdev(devargs->name);
>> + if (dev)
>> + continue;
>> +
>> + dev = calloc(1, sizeof(*dev));
>> + if (!dev)
>> + return -1;
>> +
>> + dev->device.devargs = devargs;
>> + dev->device.numa_node = SOCKET_ID_ANY;
>> + dev->device.name = devargs->name;
>> +
>> + TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static int
>> +vdev_probe(void)
>> +{
>> + struct rte_vdev_device *dev;
>> +
>> + /* call the init function for each virtual device */
>> + TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> +
>> + if (dev->device.driver)
>> + continue;
>> +
>> + if (vdev_probe_all_drivers(dev)) {
>> + RTE_LOG(ERR, EAL, "failed to initialize %s device\n",
>> + rte_vdev_device_name(dev));
>> + return -1;
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static struct rte_device *
>> +vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
>> + const void *data)
>> +{
>> + struct rte_vdev_device *dev;
>> +
>> + TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> + if (start && &dev->device == start) {
>> + start = NULL;
>> + continue;
>> + }
>> + if (cmp(&dev->device, data) == 0)
>> + return &dev->device;
>> + }
>> + return NULL;
>> +}
>> +
>> +static int
>> +vdev_plug(struct rte_device *dev)
>> +{
>> + return vdev_probe_all_drivers(RTE_DEV_TO_VDEV(dev));
>> +}
>> +
>> +static int
>> +vdev_unplug(struct rte_device *dev)
>> +{
>> + return rte_vdev_uninit(dev->name);
>> +}
>> +
>> +static struct rte_bus rte_vdev_bus = {
>> + .scan = vdev_scan,
>> + .probe = vdev_probe,
>> + .find_device = vdev_find_device,
>> + .plug = vdev_plug,
>> + .unplug = vdev_unplug,
>> + .parse = vdev_parse,
>> +};
>> +
>> +RTE_REGISTER_BUS(vdev, rte_vdev_bus);
>> diff --git a/lib/librte_cryptodev/Makefile b/lib/librte_cryptodev/Makefile
>> index 301c78d..4f70719 100644
>> --- a/lib/librte_cryptodev/Makefile
>> +++ b/lib/librte_cryptodev/Makefile
>> @@ -42,14 +42,12 @@ CFLAGS += $(WERROR_FLAGS)
>>
>> # library source files
>> SRCS-y += rte_cryptodev.c rte_cryptodev_pmd.c
>> -SRCS-y += rte_cryptodev_vdev.c
>>
>> # export include files
>> 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
>> SYMLINK-y-include += rte_cryptodev_pci.h
>>
>> # versioning export map
>> diff --git a/lib/librte_cryptodev/rte_cryptodev_vdev.c b/lib/librte_cryptodev/rte_cryptodev_vdev.c
>> deleted file mode 100644
>> index fd308b4..0000000
>> --- a/lib/librte_cryptodev/rte_cryptodev_vdev.c
>> +++ /dev/null
>> @@ -1,154 +0,0 @@
>> -/*-
>> - * 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.
>> - */
>> -
>> -#include "rte_cryptodev_vdev.h"
>> -#include "rte_cryptodev_pci.h"
>> -#include "rte_cryptodev_pmd.h"
>> -
>> -/**
>> - * 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;
>> -}
>> -
>> -/**
>> - * 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;
>> -}
>> -
>> -struct rte_cryptodev *
>> -rte_cryptodev_vdev_pmd_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_vdev_parse_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,
>> - ¶ms->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,
>> - ¶ms->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,
>> - ¶ms->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;
>> -}
>> diff --git a/lib/librte_cryptodev/rte_cryptodev_vdev.h b/lib/librte_cryptodev/rte_cryptodev_vdev.h
>> deleted file mode 100644
>> index 94ab9d3..0000000
>> --- a/lib/librte_cryptodev/rte_cryptodev_vdev.h
>> +++ /dev/null
>> @@ -1,100 +0,0 @@
>> -/*-
>> - * 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>
>> -#include <inttypes.h>
>> -
>> -#include "rte_cryptodev.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
>> - * 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_vdev_pmd_init(const char *name, size_t dev_private_size,
>> - int socket_id, struct rte_vdev_device *vdev);
>> -
>> -/**
>> - * @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
>> - */
>> -int
>> -rte_cryptodev_vdev_parse_init_params(struct rte_crypto_vdev_init_params *params,
>> - const char *input_args);
>> -
>> -#endif /* _RTE_CRYPTODEV_VDEV_H_ */
>> diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
>> index 005019e..6fee587 100644
>> --- a/lib/librte_eal/bsdapp/eal/Makefile
>> +++ b/lib/librte_eal/bsdapp/eal/Makefile
>> @@ -68,7 +68,6 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_timer.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_memzone.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_log.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_launch.c
>> -SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_vdev.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_pci.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_pci_uio.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_memory.c
>> diff --git a/lib/librte_eal/common/Makefile b/lib/librte_eal/common/Makefile
>> index e8fd67a..7eeb06a 100644
>> --- a/lib/librte_eal/common/Makefile
>> +++ b/lib/librte_eal/common/Makefile
>> @@ -38,7 +38,7 @@ INC += rte_per_lcore.h rte_random.h
>> INC += rte_tailq.h rte_interrupts.h rte_alarm.h
>> INC += rte_string_fns.h rte_version.h
>> INC += rte_eal_memconfig.h rte_malloc_heap.h
>> -INC += rte_hexdump.h rte_devargs.h rte_bus.h rte_dev.h rte_vdev.h
>> +INC += rte_hexdump.h rte_devargs.h rte_bus.h rte_dev.h
>> INC += rte_pci_dev_feature_defs.h rte_pci_dev_features.h
>> INC += rte_malloc.h rte_keepalive.h rte_time.h
>> INC += rte_service.h rte_service_component.h
>> diff --git a/lib/librte_eal/common/eal_common_vdev.c b/lib/librte_eal/common/eal_common_vdev.c
>> deleted file mode 100644
>> index f7e547a..0000000
>> --- a/lib/librte_eal/common/eal_common_vdev.c
>> +++ /dev/null
>> @@ -1,342 +0,0 @@
>> -/*-
>> - * BSD LICENSE
>> - *
>> - * Copyright(c) 2016 RehiveTech. 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 RehiveTech 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.
>> - */
>> -
>> -#include <string.h>
>> -#include <inttypes.h>
>> -#include <stdio.h>
>> -#include <stdlib.h>
>> -#include <stdint.h>
>> -#include <stdbool.h>
>> -#include <sys/queue.h>
>> -
>> -#include <rte_eal.h>
>> -#include <rte_dev.h>
>> -#include <rte_bus.h>
>> -#include <rte_vdev.h>
>> -#include <rte_common.h>
>> -#include <rte_devargs.h>
>> -#include <rte_memory.h>
>> -#include <rte_errno.h>
>> -
>> -/* Forward declare to access virtual bus name */
>> -static struct rte_bus rte_vdev_bus;
>> -
>> -/** Double linked list of virtual device drivers. */
>> -TAILQ_HEAD(vdev_device_list, rte_vdev_device);
>> -
>> -static struct vdev_device_list vdev_device_list =
>> - TAILQ_HEAD_INITIALIZER(vdev_device_list);
>> -struct vdev_driver_list vdev_driver_list =
>> - TAILQ_HEAD_INITIALIZER(vdev_driver_list);
>> -
>> -/* register a driver */
>> -void
>> -rte_vdev_register(struct rte_vdev_driver *driver)
>> -{
>> - TAILQ_INSERT_TAIL(&vdev_driver_list, driver, next);
>> -}
>> -
>> -/* unregister a driver */
>> -void
>> -rte_vdev_unregister(struct rte_vdev_driver *driver)
>> -{
>> - TAILQ_REMOVE(&vdev_driver_list, driver, next);
>> -}
>> -
>> -static int
>> -vdev_parse(const char *name, void *addr)
>> -{
>> - struct rte_vdev_driver **out = addr;
>> - struct rte_vdev_driver *driver = NULL;
>> -
>> - TAILQ_FOREACH(driver, &vdev_driver_list, next) {
>> - if (strncmp(driver->driver.name, name,
>> - strlen(driver->driver.name)) == 0)
>> - break;
>> - if (driver->driver.alias &&
>> - strncmp(driver->driver.alias, name,
>> - strlen(driver->driver.alias)) == 0)
>> - break;
>> - }
>> - if (driver != NULL &&
>> - addr != NULL)
>> - *out = driver;
>> - return driver == NULL;
>> -}
>> -
>> -static int
>> -vdev_probe_all_drivers(struct rte_vdev_device *dev)
>> -{
>> - const char *name;
>> - struct rte_vdev_driver *driver;
>> - int ret;
>> -
>> - name = rte_vdev_device_name(dev);
>> -
>> - RTE_LOG(DEBUG, EAL, "Search driver %s to probe device %s\n", name,
>> - rte_vdev_device_name(dev));
>> -
>> - if (vdev_parse(name, &driver))
>> - return -1;
>> - dev->device.driver = &driver->driver;
>> - ret = driver->probe(dev);
>> - if (ret)
>> - dev->device.driver = NULL;
>> - return ret;
>> -}
>> -
>> -static struct rte_vdev_device *
>> -find_vdev(const char *name)
>> -{
>> - struct rte_vdev_device *dev;
>> -
>> - if (!name)
>> - return NULL;
>> -
>> - TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> - const char *devname = rte_vdev_device_name(dev);
>> - if (!strncmp(devname, name, strlen(name)))
>> - return dev;
>> - }
>> -
>> - return NULL;
>> -}
>> -
>> -static struct rte_devargs *
>> -alloc_devargs(const char *name, const char *args)
>> -{
>> - struct rte_devargs *devargs;
>> - int ret;
>> -
>> - devargs = calloc(1, sizeof(*devargs));
>> - if (!devargs)
>> - return NULL;
>> -
>> - devargs->bus = &rte_vdev_bus;
>> - if (args)
>> - devargs->args = strdup(args);
>> - else
>> - devargs->args = strdup("");
>> -
>> - ret = snprintf(devargs->name, sizeof(devargs->name), "%s", name);
>> - if (ret < 0 || ret >= (int)sizeof(devargs->name)) {
>> - free(devargs->args);
>> - free(devargs);
>> - return NULL;
>> - }
>> -
>> - return devargs;
>> -}
>> -
>> -int
>> -rte_vdev_init(const char *name, const char *args)
>> -{
>> - struct rte_vdev_device *dev;
>> - struct rte_devargs *devargs;
>> - int ret;
>> -
>> - if (name == NULL)
>> - return -EINVAL;
>> -
>> - dev = find_vdev(name);
>> - if (dev)
>> - return -EEXIST;
>> -
>> - devargs = alloc_devargs(name, args);
>> - if (!devargs)
>> - return -ENOMEM;
>> -
>> - dev = calloc(1, sizeof(*dev));
>> - if (!dev) {
>> - ret = -ENOMEM;
>> - goto fail;
>> - }
>> -
>> - dev->device.devargs = devargs;
>> - dev->device.numa_node = SOCKET_ID_ANY;
>> - dev->device.name = devargs->name;
>> -
>> - ret = vdev_probe_all_drivers(dev);
>> - if (ret) {
>> - if (ret > 0)
>> - RTE_LOG(ERR, EAL, "no driver found for %s\n", name);
>> - goto fail;
>> - }
>> -
>> - TAILQ_INSERT_TAIL(&devargs_list, devargs, next);
>> -
>> - TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
>> - return 0;
>> -
>> -fail:
>> - free(devargs->args);
>> - free(devargs);
>> - free(dev);
>> - return ret;
>> -}
>> -
>> -static int
>> -vdev_remove_driver(struct rte_vdev_device *dev)
>> -{
>> - const char *name = rte_vdev_device_name(dev);
>> - const struct rte_vdev_driver *driver;
>> -
>> - if (!dev->device.driver) {
>> - RTE_LOG(DEBUG, EAL, "no driver attach to device %s\n", name);
>> - return 1;
>> - }
>> -
>> - driver = container_of(dev->device.driver, const struct rte_vdev_driver,
>> - driver);
>> - return driver->remove(dev);
>> -}
>> -
>> -int
>> -rte_vdev_uninit(const char *name)
>> -{
>> - struct rte_vdev_device *dev;
>> - struct rte_devargs *devargs;
>> - int ret;
>> -
>> - if (name == NULL)
>> - return -EINVAL;
>> -
>> - dev = find_vdev(name);
>> - if (!dev)
>> - return -ENOENT;
>> -
>> - devargs = dev->device.devargs;
>> -
>> - ret = vdev_remove_driver(dev);
>> - if (ret)
>> - return ret;
>> -
>> - TAILQ_REMOVE(&vdev_device_list, dev, next);
>> -
>> - TAILQ_REMOVE(&devargs_list, devargs, next);
>> -
>> - free(devargs->args);
>> - free(devargs);
>> - free(dev);
>> - return 0;
>> -}
>> -
>> -static int
>> -vdev_scan(void)
>> -{
>> - struct rte_vdev_device *dev;
>> - struct rte_devargs *devargs;
>> -
>> - /* for virtual devices we scan the devargs_list populated via cmdline */
>> - TAILQ_FOREACH(devargs, &devargs_list, next) {
>> -
>> - if (devargs->bus != &rte_vdev_bus)
>> - continue;
>> -
>> - dev = find_vdev(devargs->name);
>> - if (dev)
>> - continue;
>> -
>> - dev = calloc(1, sizeof(*dev));
>> - if (!dev)
>> - return -1;
>> -
>> - dev->device.devargs = devargs;
>> - dev->device.numa_node = SOCKET_ID_ANY;
>> - dev->device.name = devargs->name;
>> -
>> - TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
>> - }
>> -
>> - return 0;
>> -}
>> -
>> -static int
>> -vdev_probe(void)
>> -{
>> - struct rte_vdev_device *dev;
>> -
>> - /* call the init function for each virtual device */
>> - TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> -
>> - if (dev->device.driver)
>> - continue;
>> -
>> - if (vdev_probe_all_drivers(dev)) {
>> - RTE_LOG(ERR, EAL, "failed to initialize %s device\n",
>> - rte_vdev_device_name(dev));
>> - return -1;
>> - }
>> - }
>> -
>> - return 0;
>> -}
>> -
>> -static struct rte_device *
>> -vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
>> - const void *data)
>> -{
>> - struct rte_vdev_device *dev;
>> -
>> - TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> - if (start && &dev->device == start) {
>> - start = NULL;
>> - continue;
>> - }
>> - if (cmp(&dev->device, data) == 0)
>> - return &dev->device;
>> - }
>> - return NULL;
>> -}
>> -
>> -static int
>> -vdev_plug(struct rte_device *dev)
>> -{
>> - return vdev_probe_all_drivers(RTE_DEV_TO_VDEV(dev));
>> -}
>> -
>> -static int
>> -vdev_unplug(struct rte_device *dev)
>> -{
>> - return rte_vdev_uninit(dev->name);
>> -}
>> -
>> -static struct rte_bus rte_vdev_bus = {
>> - .scan = vdev_scan,
>> - .probe = vdev_probe,
>> - .find_device = vdev_find_device,
>> - .plug = vdev_plug,
>> - .unplug = vdev_unplug,
>> - .parse = vdev_parse,
>> -};
>> -
>> -RTE_REGISTER_BUS(vdev, rte_vdev_bus);
>> diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
>> index 5386d3a..8bfc343 100644
>> --- a/lib/librte_eal/common/include/rte_dev.h
>> +++ b/lib/librte_eal/common/include/rte_dev.h
>> @@ -166,28 +166,6 @@ struct rte_device {
>> };
>>
>> /**
>> - * Initialize a driver specified by name.
>> - *
>> - * @param name
>> - * The pointer to a driver name to be initialized.
>> - * @param args
>> - * The pointer to arguments used by driver initialization.
>> - * @return
>> - * 0 on success, negative on error
>> - */
>> -int rte_vdev_init(const char *name, const char *args);
>> -
>> -/**
>> - * Uninitalize a driver specified by name.
>> - *
>> - * @param name
>> - * The pointer to a driver name to be initialized.
>> - * @return
>> - * 0 on success, negative on error
>> - */
>> -int rte_vdev_uninit(const char *name);
>> -
>> -/**
>> * Attach a device to a registered driver.
>> *
>> * @param name
>> @@ -312,4 +290,4 @@ __attribute__((used)) = str
>> }
>> #endif
>>
>> -#endif /* _RTE_VDEV_H_ */
>> +#endif /* _RTE_DEV_H_ */
>> diff --git a/lib/librte_eal/common/include/rte_vdev.h b/lib/librte_eal/common/include/rte_vdev.h
>> deleted file mode 100644
>> index 29f5a52..0000000
>> --- a/lib/librte_eal/common/include/rte_vdev.h
>> +++ /dev/null
>> @@ -1,131 +0,0 @@
>> -/*-
>> - * BSD LICENSE
>> - *
>> - * Copyright(c) 2016 RehiveTech. 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 RehiveTech 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_VDEV_H
>> -#define RTE_VDEV_H
>> -
>> -#ifdef __cplusplus
>> -extern "C" {
>> -#endif
>> -
>> -#include <sys/queue.h>
>> -#include <rte_dev.h>
>> -#include <rte_devargs.h>
>> -
>> -struct rte_vdev_device {
>> - TAILQ_ENTRY(rte_vdev_device) next; /**< Next attached vdev */
>> - struct rte_device device; /**< Inherit core device */
>> -};
>> -
>> -/**
>> - * @internal
>> - * Helper macro for drivers that need to convert to struct rte_vdev_device.
>> - */
>> -#define RTE_DEV_TO_VDEV(ptr) \
>> - container_of(ptr, struct rte_vdev_device, device)
>> -
>> -static inline const char *
>> -rte_vdev_device_name(const struct rte_vdev_device *dev)
>> -{
>> - if (dev && dev->device.name)
>> - return dev->device.name;
>> - return NULL;
>> -}
>> -
>> -static inline const char *
>> -rte_vdev_device_args(const struct rte_vdev_device *dev)
>> -{
>> - if (dev && dev->device.devargs)
>> - return dev->device.devargs->args;
>> - return "";
>> -}
>> -
>> -/** Double linked list of virtual device drivers. */
>> -TAILQ_HEAD(vdev_driver_list, rte_vdev_driver);
>> -
>> -/**
>> - * Probe function called for each virtual device driver once.
>> - */
>> -typedef int (rte_vdev_probe_t)(struct rte_vdev_device *dev);
>> -
>> -/**
>> - * Remove function called for each virtual device driver once.
>> - */
>> -typedef int (rte_vdev_remove_t)(struct rte_vdev_device *dev);
>> -
>> -/**
>> - * A virtual device driver abstraction.
>> - */
>> -struct rte_vdev_driver {
>> - TAILQ_ENTRY(rte_vdev_driver) next; /**< Next in list. */
>> - struct rte_driver driver; /**< Inherited general driver. */
>> - rte_vdev_probe_t *probe; /**< Virtual device probe function. */
>> - rte_vdev_remove_t *remove; /**< Virtual device remove function. */
>> -};
>> -
>> -/**
>> - * Register a virtual device driver.
>> - *
>> - * @param driver
>> - * A pointer to a rte_vdev_driver structure describing the driver
>> - * to be registered.
>> - */
>> -void rte_vdev_register(struct rte_vdev_driver *driver);
>> -
>> -/**
>> - * Unregister a virtual device driver.
>> - *
>> - * @param driver
>> - * A pointer to a rte_vdev_driver structure describing the driver
>> - * to be unregistered.
>> - */
>> -void rte_vdev_unregister(struct rte_vdev_driver *driver);
>> -
>> -#define RTE_PMD_REGISTER_VDEV(nm, vdrv)\
>> -RTE_INIT(vdrvinitfn_ ##vdrv);\
>> -static const char *vdrvinit_ ## nm ## _alias;\
>> -static void vdrvinitfn_ ##vdrv(void)\
>> -{\
>> - (vdrv).driver.name = RTE_STR(nm);\
>> - (vdrv).driver.alias = vdrvinit_ ## nm ## _alias;\
>> - rte_vdev_register(&vdrv);\
>> -} \
>> -RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
>> -
>> -#define RTE_PMD_REGISTER_ALIAS(nm, alias)\
>> -static const char *vdrvinit_ ## nm ## _alias = RTE_STR(alias)
>> -
>> -#ifdef __cplusplus
>> -}
>> -#endif
>> -
>> -#endif
>> diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
>> index 90bca4d..33faa18 100644
>> --- a/lib/librte_eal/linuxapp/eal/Makefile
>> +++ b/lib/librte_eal/linuxapp/eal/Makefile
>> @@ -80,7 +80,6 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_timer.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_memzone.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_log.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_launch.c
>> -SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_vdev.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_pci.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_pci_uio.c
>> SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_memory.c
>> diff --git a/mk/rte.app.mk b/mk/rte.app.mk
>> index c25fdd9..c423bf8 100644
>> --- a/mk/rte.app.mk
>> +++ b/mk/rte.app.mk
>> @@ -97,6 +97,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_MEMPOOL) += -lrte_mempool
>> _LDLIBS-$(CONFIG_RTE_DRIVER_MEMPOOL_RING) += -lrte_mempool_ring
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_RING) += -lrte_ring
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_EAL) += -lrte_eal
>> +_LDLIBS-$(CONFIG_RTE_LIBRTE_VDEV) += -lrte_bus_vdev
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE) += -lrte_cmdline
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder
>>
>> --
>> 2.7.4
>>
More information about the dev
mailing list