* [dpdk-dev] [PATCH 02/19] pmd: Add PMD_INIT_NONPCI macros
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 03/19] eal: dlopen the DSO built poll mode drivers before init Neil Horman
` (16 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
This macro will allow nonpci based pmd driver to register an init function with
the core eal library so that they don't need to be referenced at link time. The
macro expands to a constructor that calls an eal library registration function,
passing a pointer to the pmd's init routine.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/common/Makefile | 2 +-
lib/librte_eal/common/eal_common_nonpci_devs.c | 60 +++++++++++++++++++++++++-
lib/librte_eal/common/include/rte_pmd.h | 59 +++++++++++++++++++++++++
3 files changed, 119 insertions(+), 2 deletions(-)
create mode 100644 lib/librte_eal/common/include/rte_pmd.h
diff --git a/lib/librte_eal/common/Makefile b/lib/librte_eal/common/Makefile
index b9f3b88..e52b665 100644
--- a/lib/librte_eal/common/Makefile
+++ b/lib/librte_eal/common/Makefile
@@ -38,7 +38,7 @@ INC += rte_pci_dev_ids.h rte_per_lcore.h rte_prefetch.h rte_random.h
INC += rte_rwlock.h rte_spinlock.h rte_tailq.h rte_interrupts.h rte_alarm.h
INC += rte_string_fns.h rte_cpuflags.h rte_version.h rte_tailq_elem.h
INC += rte_eal_memconfig.h rte_malloc_heap.h
-INC += rte_hexdump.h rte_devargs.h
+INC += rte_hexdump.h rte_devargs.h rte_pmd.h
ifeq ($(CONFIG_RTE_INSECURE_FUNCTION_WARNING),y)
INC += rte_warnings.h
diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c
index 71cbb1e..0f94b65 100644
--- a/lib/librte_eal/common/eal_common_nonpci_devs.c
+++ b/lib/librte_eal/common/eal_common_nonpci_devs.c
@@ -34,6 +34,8 @@
#include <string.h>
#include <inttypes.h>
+#include <string.h>
+#include <sys/queue.h>
#include <rte_string_fns.h>
#ifdef RTE_LIBRTE_PMD_RING
#include <rte_eth_ring.h>
@@ -46,6 +48,8 @@
#endif
#include <rte_debug.h>
#include <rte_devargs.h>
+#include <rte_pmd.h>
+#include <rte_log.h>
#include "eal_private.h"
struct device_init {
@@ -79,17 +83,54 @@ struct device_init dev_types[] = {
}
};
+TAILQ_HEAD(pmd_nonpci_list, pmd_nonpci_entry);
+
+/* Definition for shared object drivers. */
+struct pmd_nonpci_entry {
+ TAILQ_ENTRY(pmd_noncpi_entry) next;
+
+ char name[PATH_MAX];
+ int (*pmd_initfn)(const char *, const char *);
+};
+
+/* List of external loadable drivers */
+static struct pmd_nonpci_list pmd_nonpci_init_list =
+TAILQ_HEAD_INITIALIZER(pmd_nonpci_init_list);
+
+void rte_eal_nonpci_dev_init_register(const char *name, int (*dev_initfn)(const char *, const char *))
+{
+ struct pmd_nonpci_entry *new = malloc(sizeof(struct pmd_nonpci_entry));
+
+ if (!new) {
+ printf("Not enough memory to register %s\n", name);
+ goto out;
+ }
+
+ memset(new->name, 0, PATH_MAX);
+ strncpy(new->name, name, PATH_MAX);
+ new->name[PATH_MAX-1] = 0;
+ new->pmd_initfn = dev_initfn;
+ printf("REGISTERING INIT ROUTINE FOR %s\n", new->name);
+ TAILQ_INSERT_TAIL(&pmd_nonpci_init_list, new, next);
+out:
+ return;
+}
+
+
int
rte_eal_non_pci_ethdev_init(void)
{
struct rte_devargs *devargs;
+ struct pmd_nonpci_entry *entry;
uint8_t i;
+ int found = 0;
/* call the init function for each virtual device */
TAILQ_FOREACH(devargs, &devargs_list, next) {
if (devargs->type != RTE_DEVTYPE_VIRTUAL)
continue;
+ found = 0;
for (i = 0; i < NUM_DEV_TYPES; i++) {
/* search a driver prefix in virtual device name */
@@ -98,14 +139,31 @@ rte_eal_non_pci_ethdev_init(void)
sizeof(dev_types[i].dev_prefix) - 1)) {
dev_types[i].init_fn(devargs->virtual.drv_name,
devargs->args);
+ found = 1;
break;
}
}
- if (i == NUM_DEV_TYPES) {
+ if (found)
+ continue;
+
+ TAILQ_FOREACH(entry, &pmd_nonpci_init_list, next) {
+ if (!entry->name)
+ continue;
+ if (!strncmp(entry->name,
+ devargs->virtual.drv_name,
+ strlen(entry->name))) {
+ RTE_LOG(INFO, PMD, "Initalizing pmd %s\n", devargs->virtual.drv_name);
+ found = 1;
+ entry->pmd_initfn(devargs->virtual.drv_name, devargs->args);
+ }
+ }
+
+ if (!found) {
rte_panic("no driver found for %s\n",
devargs->virtual.drv_name);
}
}
+
return 0;
}
diff --git a/lib/librte_eal/common/include/rte_pmd.h b/lib/librte_eal/common/include/rte_pmd.h
new file mode 100644
index 0000000..75a4895
--- /dev/null
+++ b/lib/librte_eal/common/include/rte_pmd.h
@@ -0,0 +1,59 @@
+/*-
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2014 Neil Horman <nhorman@tuxdriver.com.
+ * 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.
+ */
+
+/**
+ * @file
+ *
+ * API for error cause tracking
+ */
+
+#ifndef _RTE_PMD_H_
+#define _RTE_PMD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void rte_eal_nonpci_dev_init_register(const char *name, int (*dev_initfn)(const char *, const char *));
+#define PMD_INIT_NONPCI(x,n)\
+void devinitfn_ ##x(void);\
+void __attribute__((constructor, used)) devinitfn_ ##x(void)\
+{\
+ rte_eal_nonpci_dev_init_register(n,x);\
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTE_PMD_H_ */
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 03/19] eal: dlopen the DSO built poll mode drivers before init
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 02/19] pmd: Add PMD_INIT_NONPCI macros Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 04/19] pcap: Convert pcap poll mode driver to use new PMD_INIT_NONPCI macro Neil Horman
` (15 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
We need to call dlopen on any DSO's referenced on the command line before
calling their init routines. This provides the DSO's the opportunity to run the
constructors created by the PMD_INIT_NONPCI macro prior to the init list being
traversed.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/linuxapp/eal/eal.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 905ce37..a4ad0eb 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -1046,9 +1046,6 @@ rte_eal_init(int argc, char **argv)
rte_eal_mcfg_complete();
- if (rte_eal_non_pci_ethdev_init() < 0)
- rte_panic("Cannot init non-PCI eth_devs\n");
-
TAILQ_FOREACH(solib, &solib_list, next) {
solib->lib_handle = dlopen(solib->name, RTLD_NOW);
if ((solib->lib_handle == NULL) && (solib->name[0] != '/')) {
@@ -1061,6 +1058,9 @@ rte_eal_init(int argc, char **argv)
RTE_LOG(WARNING, EAL, "%s\n", dlerror());
}
+ if (rte_eal_non_pci_ethdev_init() < 0)
+ rte_panic("Cannot init non-PCI eth_devs\n");
+
RTE_LOG(DEBUG, EAL, "Master core %u is ready (tid=%x)\n",
rte_config.master_lcore, (int)thread_id);
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 04/19] pcap: Convert pcap poll mode driver to use new PMD_INIT_NONPCI macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 02/19] pmd: Add PMD_INIT_NONPCI macros Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 03/19] eal: dlopen the DSO built poll mode drivers before init Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 05/19] ring: convert the ring pmd driver to use the " Neil Horman
` (14 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
Convert the pcap poll mode driver to link itself to libpcap and register a init
routine via the PMD_INIT_NONPCI macro
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/common/eal_common_nonpci_devs.c | 9 ---------
lib/librte_pmd_pcap/Makefile | 2 ++
lib/librte_pmd_pcap/rte_eth_pcap.c | 2 ++
3 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c
index 0f94b65..d925b7f 100644
--- a/lib/librte_eal/common/eal_common_nonpci_devs.c
+++ b/lib/librte_eal/common/eal_common_nonpci_devs.c
@@ -40,9 +40,6 @@
#ifdef RTE_LIBRTE_PMD_RING
#include <rte_eth_ring.h>
#endif
-#ifdef RTE_LIBRTE_PMD_PCAP
-#include <rte_eth_pcap.h>
-#endif
#ifdef RTE_LIBRTE_PMD_XENVIRT
#include <rte_eth_xenvirt.h>
#endif
@@ -65,12 +62,6 @@ struct device_init dev_types[] = {
.init_fn = rte_pmd_ring_init
},
#endif
-#ifdef RTE_LIBRTE_PMD_PCAP
- {
- .dev_prefix = RTE_ETH_PCAP_PARAM_NAME,
- .init_fn = rte_pmd_pcap_init
- },
-#endif
#ifdef RTE_LIBRTE_PMD_XENVIRT
{
.dev_prefix = RTE_ETH_XENVIRT_PARAM_NAME,
diff --git a/lib/librte_pmd_pcap/Makefile b/lib/librte_pmd_pcap/Makefile
index 5218f28..f7653fb 100644
--- a/lib/librte_pmd_pcap/Makefile
+++ b/lib/librte_pmd_pcap/Makefile
@@ -37,6 +37,8 @@ include $(RTE_SDK)/mk/rte.vars.mk
#
LIB = librte_pmd_pcap.a
+CPU_LDFLAGS += -lpcap
+
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c
index fe94a79..5bc81f7 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.c
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.c
@@ -40,6 +40,7 @@
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
+#include <rte_pmd.h>
#include <net/if.h>
@@ -766,3 +767,4 @@ rte_pmd_pcap_init(const char *name, const char *params)
}
+PMD_INIT_NONPCI(rte_pmd_pcap_init, RTE_ETH_PCAP_PARAM_NAME);
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 05/19] ring: convert the ring pmd driver to use the PMD_INIT_NONPCI macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (2 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 04/19] pcap: Convert pcap poll mode driver to use new PMD_INIT_NONPCI macro Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 06/19] xenvert: Convert xenvirt pmd to use " Neil Horman
` (13 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
Separate the ring pmd from calls within the core eal library so that it will
not be loaded unless needed (or compiled in statically)
Note: The demo test application calls directly into the ring pmd driver, and
that needs to be cleaned up, so that the -d option is used on the command line
to test the proper pmd. for now I've just added linkage to the pmd directly to
avoid build breaks and will fix up the application operation in a subsequent
patch
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
app/test/Makefile | 2 ++
lib/librte_eal/common/eal_common_nonpci_devs.c | 10 +---------
lib/librte_pmd_ring/rte_eth_ring.c | 3 +++
mk/rte.app.mk | 4 ----
4 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/app/test/Makefile b/app/test/Makefile
index b49785e..978e331 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -36,6 +36,8 @@ include $(RTE_SDK)/mk/rte.vars.mk
#
APP = test
+LDLIBS += -lrte_ring -lrte_pmd_ring
+
#
# all sources are stored in SRCS-y
#
diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c
index d925b7f..51497fd 100644
--- a/lib/librte_eal/common/eal_common_nonpci_devs.c
+++ b/lib/librte_eal/common/eal_common_nonpci_devs.c
@@ -34,12 +34,10 @@
#include <string.h>
#include <inttypes.h>
+#include <limits.h>
#include <string.h>
#include <sys/queue.h>
#include <rte_string_fns.h>
-#ifdef RTE_LIBRTE_PMD_RING
-#include <rte_eth_ring.h>
-#endif
#ifdef RTE_LIBRTE_PMD_XENVIRT
#include <rte_eth_xenvirt.h>
#endif
@@ -56,12 +54,6 @@ struct device_init {
#define NUM_DEV_TYPES (sizeof(dev_types)/sizeof(dev_types[0]))
struct device_init dev_types[] = {
-#ifdef RTE_LIBRTE_PMD_RING
- {
- .dev_prefix = RTE_ETH_RING_PARAM_NAME,
- .init_fn = rte_pmd_ring_init
- },
-#endif
#ifdef RTE_LIBRTE_PMD_XENVIRT
{
.dev_prefix = RTE_ETH_XENVIRT_PARAM_NAME,
diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
index 24635f3..9fec098 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.c
+++ b/lib/librte_pmd_ring/rte_eth_ring.c
@@ -37,6 +37,7 @@
#include <rte_malloc.h>
#include <rte_memcpy.h>
#include <rte_string_fns.h>
+#include <rte_pmd.h>
struct ring_queue {
struct rte_ring *rng;
@@ -395,3 +396,5 @@ rte_pmd_ring_init(const char *name, const char *params)
}
return 0;
}
+
+PMD_INIT_NONPCI(rte_pmd_ring_init, RTE_ETH_RING_PARAM_NAME);
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 072718a..cf8b942 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -133,10 +133,6 @@ ifeq ($(CONFIG_RTE_LIBRTE_ETHER),y)
LDLIBS += -lethdev
endif
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_RING),y)
-LDLIBS += -lrte_pmd_ring
-endif
-
ifeq ($(CONFIG_RTE_LIBRTE_MALLOC),y)
LDLIBS += -lrte_malloc
endif
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 06/19] xenvert: Convert xenvirt pmd to use PMD_INIT_NONPCI macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (3 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 05/19] ring: convert the ring pmd driver to use the " Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 07/19] pmd: remove dead code Neil Horman
` (12 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
Convert the xenvirt driver to use the PMD_INIT_NONPCI macro so that we can break
the linkages between it and the core library to avoid unnneded loading when
built as a DSO
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/common/eal_common_nonpci_devs.c | 9 ---------
lib/librte_pmd_xenvirt/Makefile | 2 ++
lib/librte_pmd_xenvirt/rte_eth_xenvirt.c | 3 +++
mk/rte.app.mk | 6 ------
4 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c
index 51497fd..c65621e 100644
--- a/lib/librte_eal/common/eal_common_nonpci_devs.c
+++ b/lib/librte_eal/common/eal_common_nonpci_devs.c
@@ -38,9 +38,6 @@
#include <string.h>
#include <sys/queue.h>
#include <rte_string_fns.h>
-#ifdef RTE_LIBRTE_PMD_XENVIRT
-#include <rte_eth_xenvirt.h>
-#endif
#include <rte_debug.h>
#include <rte_devargs.h>
#include <rte_pmd.h>
@@ -54,12 +51,6 @@ struct device_init {
#define NUM_DEV_TYPES (sizeof(dev_types)/sizeof(dev_types[0]))
struct device_init dev_types[] = {
-#ifdef RTE_LIBRTE_PMD_XENVIRT
- {
- .dev_prefix = RTE_ETH_XENVIRT_PARAM_NAME,
- .init_fn = rte_pmd_xenvirt_init
- },
-#endif
{
.dev_prefix = "-nodev-",
.init_fn = NULL
diff --git a/lib/librte_pmd_xenvirt/Makefile b/lib/librte_pmd_xenvirt/Makefile
index bf6d432..d5fff3b 100644
--- a/lib/librte_pmd_xenvirt/Makefile
+++ b/lib/librte_pmd_xenvirt/Makefile
@@ -39,6 +39,8 @@ LIB = librte_pmd_xenvirt.a
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
+CPU_LDFLAGS += -lxenvirt
+
#
# all source are stored in SRCS-y
#
diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
index bad8dd4..20d35dc 100644
--- a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
+++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
@@ -53,6 +53,7 @@
#include <rte_malloc.h>
#include <rte_memcpy.h>
#include <rte_string_fns.h>
+#include <rte_pmd.h>
#include <cmdline_parse.h>
#include <cmdline_parse_etheraddr.h>
@@ -704,3 +705,5 @@ rte_pmd_xenvirt_init(const char *name, const char *params)
eth_dev_xenvirt_create(name, params, rte_socket_id(), DEV_CREATE);
return 0;
}
+
+PMD_INIT_NONPCI(rte_pmd_xenvirt_init, RTE_ETH_XENVIRT_PARAM_NAME);
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index cf8b942..d6fdf9e 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -158,12 +158,6 @@ ifeq ($(CONFIG_RTE_LIBRTE_EAL),y)
LDLIBS += -lrte_eal
endif
-
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_XENVIRT),y)
-LDLIBS += -lrte_pmd_xenvirt
-LDLIBS += -lxenstore
-endif
-
ifeq ($(CONFIG_RTE_LIBRTE_CMDLINE),y)
LDLIBS += -lrte_cmdline
endif
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 07/19] pmd: remove dead code
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (4 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 06/19] xenvert: Convert xenvirt pmd to use " Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 08/19] test: fix test app to dynamically link pmd_pcap when needed Neil Horman
` (11 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
Now that we've converted the available PMD drivers to use the PMD_INIT_NONPCI
macro, we can remove the rest of the old init code
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/common/eal_common_nonpci_devs.c | 34 +-------------------------
1 file changed, 1 insertion(+), 33 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c
index c65621e..78bedf3 100644
--- a/lib/librte_eal/common/eal_common_nonpci_devs.c
+++ b/lib/librte_eal/common/eal_common_nonpci_devs.c
@@ -44,19 +44,6 @@
#include <rte_log.h>
#include "eal_private.h"
-struct device_init {
- const char *dev_prefix;
- int (*init_fn)(const char*, const char *);
-};
-
-#define NUM_DEV_TYPES (sizeof(dev_types)/sizeof(dev_types[0]))
-struct device_init dev_types[] = {
- {
- .dev_prefix = "-nodev-",
- .init_fn = NULL
- }
-};
-
TAILQ_HEAD(pmd_nonpci_list, pmd_nonpci_entry);
/* Definition for shared object drivers. */
@@ -96,31 +83,12 @@ rte_eal_non_pci_ethdev_init(void)
{
struct rte_devargs *devargs;
struct pmd_nonpci_entry *entry;
- uint8_t i;
- int found = 0;
+ int found;
- /* call the init function for each virtual device */
TAILQ_FOREACH(devargs, &devargs_list, next) {
-
if (devargs->type != RTE_DEVTYPE_VIRTUAL)
continue;
found = 0;
-
- for (i = 0; i < NUM_DEV_TYPES; i++) {
- /* search a driver prefix in virtual device name */
- if (!strncmp(dev_types[i].dev_prefix,
- devargs->virtual.drv_name,
- sizeof(dev_types[i].dev_prefix) - 1)) {
- dev_types[i].init_fn(devargs->virtual.drv_name,
- devargs->args);
- found = 1;
- break;
- }
- }
-
- if (found)
- continue;
-
TAILQ_FOREACH(entry, &pmd_nonpci_init_list, next) {
if (!entry->name)
continue;
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 08/19] test: fix test app to dynamically link pmd_pcap when needed
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (5 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 07/19] pmd: remove dead code Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:49 ` [dpdk-dev] [PATCH 09/19] testpmd: only link pcap pmd when statically linking Neil Horman
` (10 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
the test application calls functions in the pmd_pcap driver directly. We should fix this properly, but for now just link in the library
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
mk/rte.app.mk | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index d6fdf9e..0499050 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -162,8 +162,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_CMDLINE),y)
LDLIBS += -lrte_cmdline
endif
+ifeq ($(RTE_BUILD_SHARED_LIB),n)
ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)
-LDLIBS += -lrte_pmd_pcap -lpcap
+LDLIBS += -lrte_pmd_pcap
+endif
endif
LDLIBS += $(EXECENV_LDLIBS)
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 09/19] testpmd: only link pcap pmd when statically linking
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (6 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 08/19] test: fix test app to dynamically link pmd_pcap when needed Neil Horman
@ 2014-04-10 20:49 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 10/19] make: include whole archive on static link Neil Horman
` (9 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:49 UTC (permalink / raw)
To: dev
when doing a static link, we need to add -lpacp to testpmd because it will need
to resolve those symbols when it links in librte_pmd_pcap.a
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
mk/rte.app.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 0499050..2f2ff16 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -164,7 +164,7 @@ endif
ifeq ($(RTE_BUILD_SHARED_LIB),n)
ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)
-LDLIBS += -lrte_pmd_pcap
+LDLIBS += -lrte_pmd_pcap -lpcap
endif
endif
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 10/19] make: include whole archive on static link
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (7 preceding siblings ...)
2014-04-10 20:49 ` [dpdk-dev] [PATCH 09/19] testpmd: only link pcap pmd when statically linking Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 11/19] pmd: Move rte_pmd_init_all to be non-inline Neil Horman
` (8 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
This happens automatically on dyanmic linking, but when linking an archive we
need to to include the whole archive to make sure we call all the constructors.
Not doing this causes them to be discarded due to the fact theres no symbolic
reference connecting the pmds to the application.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
mk/rte.app.mk | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 2f2ff16..41eab08 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -198,6 +198,8 @@ endif
ifeq ($(LINK_USING_CC),1)
comma := ,
LDLIBS := $(addprefix -Wl$(comma),$(LDLIBS))
+LDLIBS := -Wl$(comma)--whole-archive $(LDLIBS)
+LDLIBS += -Wl,--no-whole-archive -Wl,-z -Wl,muldefs
LDFLAGS := $(addprefix -Wl$(comma),$(LDFLAGS))
override EXTRA_LDFLAGS := $(addprefix -Wl$(comma),$(EXTRA_LDFLAGS))
O_TO_EXE = $(CC) $(CFLAGS) $(LDFLAGS_$(@)) \
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 11/19] pmd: Move rte_pmd_init_all to be non-inline
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (8 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 10/19] make: include whole archive on static link Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 12/19] pmd: Add PMD_INIT macro for use in pci based PMDs Neil Horman
` (7 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev; +Cc: Neil Horman
Organizational change in support of doing dynamic init routine registration
Signed-off-by: Neil Horman <nhorman@tuxdrver.com>
---
lib/librte_ether/rte_ethdev.c | 52 ++++++++++++++++++++++++++++++++++++++++++
lib/librte_ether/rte_ethdev.h | 53 +------------------------------------------
2 files changed, 53 insertions(+), 52 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index a5727dd..dd378f0 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -112,6 +112,58 @@ static uint8_t nb_ports = 0;
/* spinlock for eth device callbacks */
static rte_spinlock_t rte_eth_dev_cb_lock = RTE_SPINLOCK_INITIALIZER;
+int rte_pmd_init_all(void)
+{
+ int ret = -ENODEV;
+
+#ifdef RTE_LIBRTE_IGB_PMD
+ if ((ret = rte_igb_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init igb PMD\n");
+ return (ret);
+ }
+ if ((ret = rte_igbvf_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init igbvf PMD\n");
+ return (ret);
+ }
+#endif /* RTE_LIBRTE_IGB_PMD */
+
+#ifdef RTE_LIBRTE_EM_PMD
+ if ((ret = rte_em_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init em PMD\n");
+ return (ret);
+ }
+#endif /* RTE_LIBRTE_EM_PMD */
+
+#ifdef RTE_LIBRTE_IXGBE_PMD
+ if ((ret = rte_ixgbe_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init ixgbe PMD\n");
+ return (ret);
+ }
+ if ((ret = rte_ixgbevf_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init ixgbevf PMD\n");
+ return (ret);
+ }
+#endif /* RTE_LIBRTE_IXGBE_PMD */
+
+#ifdef RTE_LIBRTE_VIRTIO_PMD
+ if ((ret = rte_virtio_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init virtio PMD\n");
+ return (ret);
+ }
+#endif /* RTE_LIBRTE_VIRTIO_PMD */
+
+#ifdef RTE_LIBRTE_VMXNET3_PMD
+ if ((ret = rte_vmxnet3_pmd_init()) != 0) {
+ RTE_LOG(ERR, PMD, "Cannot init vmxnet3 PMD\n");
+ return (ret);
+ }
+#endif /* RTE_LIBRTE_VMXNET3_PMD */
+
+ if (ret == -ENODEV)
+ RTE_LOG(ERR, PMD, "No PMD(s) are configured\n");
+ return (ret);
+}
+
/**
* The user application callback description.
*
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index dea7471..bf2ded4 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1396,58 +1396,7 @@ extern int rte_vmxnet3_pmd_init(void);
* -ENODEV if there are no drivers available
* (e.g. if all driver config options are = n).
*/
-static inline
-int rte_pmd_init_all(void)
-{
- int ret = -ENODEV;
-
-#ifdef RTE_LIBRTE_IGB_PMD
- if ((ret = rte_igb_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init igb PMD\n");
- return (ret);
- }
- if ((ret = rte_igbvf_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init igbvf PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_IGB_PMD */
-
-#ifdef RTE_LIBRTE_EM_PMD
- if ((ret = rte_em_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init em PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_EM_PMD */
-
-#ifdef RTE_LIBRTE_IXGBE_PMD
- if ((ret = rte_ixgbe_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init ixgbe PMD\n");
- return (ret);
- }
- if ((ret = rte_ixgbevf_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init ixgbevf PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_IXGBE_PMD */
-
-#ifdef RTE_LIBRTE_VIRTIO_PMD
- if ((ret = rte_virtio_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init virtio PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_VIRTIO_PMD */
-
-#ifdef RTE_LIBRTE_VMXNET3_PMD
- if ((ret = rte_vmxnet3_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init vmxnet3 PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_VMXNET3_PMD */
-
- if (ret == -ENODEV)
- RTE_LOG(ERR, PMD, "No PMD(s) are configured\n");
- return (ret);
-}
+extern int rte_pmd_init_all(void);
/**
* Configure an Ethernet device.
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 12/19] pmd: Add PMD_INIT macro for use in pci based PMDs
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (9 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 11/19] pmd: Move rte_pmd_init_all to be non-inline Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 13/19] igb: Convert PMD to use new PMD_INIT macro Neil Horman
` (6 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Like their non-pci counterparts, the PMD_INIT macro can be used by pci based
PMD's to register an init routine without having the core libraries reference
symbols in them directly.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_eal/common/include/rte_pmd.h | 9 +++++++
lib/librte_ether/rte_ethdev.c | 44 +++++++++++++++++++++++++++++++--
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/lib/librte_eal/common/include/rte_pmd.h b/lib/librte_eal/common/include/rte_pmd.h
index 75a4895..bcba8f8 100644
--- a/lib/librte_eal/common/include/rte_pmd.h
+++ b/lib/librte_eal/common/include/rte_pmd.h
@@ -44,7 +44,9 @@
extern "C" {
#endif
+extern void rte_pmd_register_init(int (*pmd_initfn)(void));
extern void rte_eal_nonpci_dev_init_register(const char *name, int (*dev_initfn)(const char *, const char *));
+
#define PMD_INIT_NONPCI(x,n)\
void devinitfn_ ##x(void);\
void __attribute__((constructor, used)) devinitfn_ ##x(void)\
@@ -52,6 +54,13 @@ void __attribute__((constructor, used)) devinitfn_ ##x(void)\
rte_eal_nonpci_dev_init_register(n,x);\
}
+#define PMD_INIT(x)\
+void devinitfn_ ##x(void);\
+void __attribute__((constructor, used)) devinitfn_ ##x(void)\
+{\
+ rte_pmd_register_init(x);\
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index dd378f0..a9efe73 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -64,6 +64,7 @@
#include <rte_mbuf.h>
#include <rte_errno.h>
#include <rte_spinlock.h>
+#include <rte_pmd.h>
#include "rte_ether.h"
#include "rte_ethdev.h"
@@ -112,9 +113,38 @@ static uint8_t nb_ports = 0;
/* spinlock for eth device callbacks */
static rte_spinlock_t rte_eth_dev_cb_lock = RTE_SPINLOCK_INITIALIZER;
+TAILQ_HEAD(pmd_list, pmd_entry);
+
+/* Definition for shared object drivers. */
+struct pmd_entry {
+ TAILQ_ENTRY(pmd_entry) next;
+ int (*pmd_initfn)(void);
+};
+
+/* List of external loadable drivers */
+static struct pmd_list pmd_init_list =
+TAILQ_HEAD_INITIALIZER(pmd_init_list);
+
+void rte_pmd_register_init(int (*pmd_initfn)(void))
+{
+ struct pmd_entry *new = malloc(sizeof(struct pmd_entry));
+
+ if (!new) {
+ printf("Not enough memory to register pci pmd\n");
+ goto out;
+ }
+
+ new->pmd_initfn = pmd_initfn;
+ TAILQ_INSERT_TAIL(&pmd_init_list, new, next);
+out:
+ return;
+
+}
+
int rte_pmd_init_all(void)
{
int ret = -ENODEV;
+ struct pmd_entry *entry;
#ifdef RTE_LIBRTE_IGB_PMD
if ((ret = rte_igb_pmd_init()) != 0) {
@@ -159,9 +189,19 @@ int rte_pmd_init_all(void)
}
#endif /* RTE_LIBRTE_VMXNET3_PMD */
- if (ret == -ENODEV)
+ if (ret == -ENODEV) {
RTE_LOG(ERR, PMD, "No PMD(s) are configured\n");
- return (ret);
+ goto out;
+ }
+
+ TAILQ_FOREACH(entry, &pmd_init_list, next) {
+ ret = entry->pmd_initfn();
+ if (ret != 0)
+ break;
+ }
+
+out:
+ return ret;
}
/**
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 13/19] igb: Convert PMD to use new PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (10 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 12/19] pmd: Add PMD_INIT macro for use in pci based PMDs Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 14/19] igbvf: move igbvf pmd to use " Neil Horman
` (5 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Use the PMD init macro to allow separation of the pmd from the rest of the dpdk
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
examples/dpdk_qat/main.c | 8 +++-----
lib/librte_ether/rte_ethdev.c | 4 ----
lib/librte_ether/rte_ethdev.h | 9 ---------
lib/librte_pmd_e1000/igb_ethdev.c | 5 ++++-
4 files changed, 7 insertions(+), 19 deletions(-)
diff --git a/examples/dpdk_qat/main.c b/examples/dpdk_qat/main.c
index cdf6832..39f7df7 100644
--- a/examples/dpdk_qat/main.c
+++ b/examples/dpdk_qat/main.c
@@ -696,11 +696,9 @@ MAIN(int argc, char **argv)
if (ret < 0)
return -1;
- /* init driver */
-#ifdef RTE_LIBRTE_IGB_PMD
- if (rte_igb_pmd_init() < 0)
- rte_panic("Cannot init igb pmd\n");
-#endif
+ /* init drivers */
+ if (rte_pmd_init_all() < 0)
+ rte_panic("PMD driver failed to init\n");
#ifdef RTE_LIBRTE_IXGBE_PMD
if (rte_ixgbe_pmd_init() < 0)
rte_panic("Cannot init ixgbe pmd\n");
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index a9efe73..6e85451 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -147,10 +147,6 @@ int rte_pmd_init_all(void)
struct pmd_entry *entry;
#ifdef RTE_LIBRTE_IGB_PMD
- if ((ret = rte_igb_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init igb PMD\n");
- return (ret);
- }
if ((ret = rte_igbvf_pmd_init()) != 0) {
RTE_LOG(ERR, PMD, "Cannot init igbvf PMD\n");
return (ret);
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index bf2ded4..d5f2922 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1317,15 +1317,6 @@ extern void rte_eth_driver_register(struct eth_driver *eth_drv);
/**
* The initialization function of the driver for
- * Intel(r) IGB Gigabit Ethernet Controller devices.
- * This function is invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_igb_pmd_init(void);
-
-/**
- * The initialization function of the driver for
* Intel(r) EM Gigabit Ethernet Controller devices.
* This function is invoked once at EAL start time.
* @return
diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c
index 673b4de..df615e0 100644
--- a/lib/librte_pmd_e1000/igb_ethdev.c
+++ b/lib/librte_pmd_e1000/igb_ethdev.c
@@ -51,6 +51,7 @@
#include <rte_eal.h>
#include <rte_atomic.h>
#include <rte_malloc.h>
+#include <rte_pmd.h>
#include "e1000_logs.h"
#include "e1000/e1000_api.h"
@@ -619,7 +620,7 @@ static struct eth_driver rte_igbvf_pmd = {
.dev_private_size = sizeof(struct e1000_adapter),
};
-int
+static int
rte_igb_pmd_init(void)
{
rte_eth_driver_register(&rte_igb_pmd);
@@ -2182,3 +2183,5 @@ eth_igb_rss_reta_query(struct rte_eth_dev *dev,
return 0;
}
+
+PMD_INIT(rte_igb_pmd_init);
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 14/19] igbvf: move igbvf pmd to use PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (11 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 13/19] igb: Convert PMD to use new PMD_INIT macro Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 15/19] em: move em/e1000 " Neil Horman
` (4 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Removed references to core library so that it can be linked in whenever needed
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_ether/rte_ethdev.c | 7 -------
lib/librte_ether/rte_ethdev.h | 9 ---------
lib/librte_pmd_e1000/igb_ethdev.c | 3 ++-
3 files changed, 2 insertions(+), 17 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 6e85451..29eeef3 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -146,13 +146,6 @@ int rte_pmd_init_all(void)
int ret = -ENODEV;
struct pmd_entry *entry;
-#ifdef RTE_LIBRTE_IGB_PMD
- if ((ret = rte_igbvf_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init igbvf PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_IGB_PMD */
-
#ifdef RTE_LIBRTE_EM_PMD
if ((ret = rte_em_pmd_init()) != 0) {
RTE_LOG(ERR, PMD, "Cannot init em PMD\n");
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index d5f2922..6cf7a03 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1325,15 +1325,6 @@ extern void rte_eth_driver_register(struct eth_driver *eth_drv);
extern int rte_em_pmd_init(void);
/**
- * The initialization function of the driver for 1Gbps Intel IGB_VF
- * Ethernet devices.
- * Invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_igbvf_pmd_init(void);
-
-/**
* The initialization function of the driver for 10Gbps Intel IXGBE
* Ethernet devices.
* Invoked once at EAL start time.
diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c
index df615e0..14e43b2 100644
--- a/lib/librte_pmd_e1000/igb_ethdev.c
+++ b/lib/librte_pmd_e1000/igb_ethdev.c
@@ -643,7 +643,7 @@ igb_vmdq_vlan_hw_filter_enable(struct rte_eth_dev *dev)
* Invoked one at EAL init time.
* Register itself as the [Virtual Poll Mode] Driver of PCI IGB devices.
*/
-int
+static int
rte_igbvf_pmd_init(void)
{
DEBUGFUNC("rte_igbvf_pmd_init");
@@ -2185,3 +2185,4 @@ eth_igb_rss_reta_query(struct rte_eth_dev *dev,
}
PMD_INIT(rte_igb_pmd_init);
+PMD_INIT(rte_igbvf_pmd_init);
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 15/19] em: move em/e1000 pmd to use PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (12 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 14/19] igbvf: move igbvf pmd to use " Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 16/19] ixgbe: move ixgbe[vf] pmd's " Neil Horman
` (3 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Modify the em pmd to use the PMD_INIT macro
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_ether/rte_ethdev.c | 7 -------
lib/librte_ether/rte_ethdev.h | 9 ---------
lib/librte_pmd_e1000/em_ethdev.c | 5 ++++-
mk/rte.app.mk | 2 ++
4 files changed, 6 insertions(+), 17 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 29eeef3..9a0a26a 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -146,13 +146,6 @@ int rte_pmd_init_all(void)
int ret = -ENODEV;
struct pmd_entry *entry;
-#ifdef RTE_LIBRTE_EM_PMD
- if ((ret = rte_em_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init em PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_EM_PMD */
-
#ifdef RTE_LIBRTE_IXGBE_PMD
if ((ret = rte_ixgbe_pmd_init()) != 0) {
RTE_LOG(ERR, PMD, "Cannot init ixgbe PMD\n");
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 6cf7a03..d06308b 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1316,15 +1316,6 @@ struct eth_driver {
extern void rte_eth_driver_register(struct eth_driver *eth_drv);
/**
- * The initialization function of the driver for
- * Intel(r) EM Gigabit Ethernet Controller devices.
- * This function is invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_em_pmd_init(void);
-
-/**
* The initialization function of the driver for 10Gbps Intel IXGBE
* Ethernet devices.
* Invoked once at EAL start time.
diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c
index d8c9a9b..accb7d7 100644
--- a/lib/librte_pmd_e1000/em_ethdev.c
+++ b/lib/librte_pmd_e1000/em_ethdev.c
@@ -51,6 +51,7 @@
#include <rte_eal.h>
#include <rte_atomic.h>
#include <rte_malloc.h>
+#include <rte_pmd.h>
#include "e1000_logs.h"
#include "e1000/e1000_api.h"
@@ -285,7 +286,7 @@ static struct eth_driver rte_em_pmd = {
.dev_private_size = sizeof(struct e1000_adapter),
};
-int
+static int
rte_em_pmd_init(void)
{
rte_eth_driver_register(&rte_em_pmd);
@@ -1433,3 +1434,5 @@ eth_em_rar_clear(struct rte_eth_dev *dev, uint32_t index)
e1000_rar_set(hw, addr, index);
}
+
+PMD_INIT(rte_em_pmd_init);
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 41eab08..7435d97 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -73,9 +73,11 @@ LDLIBS += -lrte_ivshmem
endif
endif
+ifeq ($(RTE_BUILD_SHARED_LIB),n)
ifeq ($(CONFIG_RTE_LIBRTE_E1000_PMD),y)
LDLIBS += -lrte_pmd_e1000
endif
+endif
ifeq ($(CONFIG_RTE_LIBRTE_IXGBE_PMD),y)
LDLIBS += -lrte_pmd_ixgbe
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 16/19] ixgbe: move ixgbe[vf] pmd's to use PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (13 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 15/19] em: move em/e1000 " Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 17/19] virtio: Move to using " Neil Horman
` (2 subsequent siblings)
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev; +Cc: Neil Horman
Move the ixgbe and ixgbevf pmds to use the PMD_INIT macro
Signed-off-by: Neil Horman <nhroman@tuxdriver.com>
---
examples/dpdk_qat/main.c | 4 ----
examples/vmdq_dcb/main.c | 2 +-
lib/librte_ether/rte_ethdev.c | 11 -----------
lib/librte_ether/rte_ethdev.h | 18 ------------------
lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 8 ++++++--
mk/rte.app.mk | 2 ++
6 files changed, 9 insertions(+), 36 deletions(-)
diff --git a/examples/dpdk_qat/main.c b/examples/dpdk_qat/main.c
index 39f7df7..38c64c0 100644
--- a/examples/dpdk_qat/main.c
+++ b/examples/dpdk_qat/main.c
@@ -699,10 +699,6 @@ MAIN(int argc, char **argv)
/* init drivers */
if (rte_pmd_init_all() < 0)
rte_panic("PMD driver failed to init\n");
-#ifdef RTE_LIBRTE_IXGBE_PMD
- if (rte_ixgbe_pmd_init() < 0)
- rte_panic("Cannot init ixgbe pmd\n");
-#endif
if (rte_eal_pci_probe() < 0)
rte_panic("Cannot probe PCI\n");
diff --git a/examples/vmdq_dcb/main.c b/examples/vmdq_dcb/main.c
index 844f334..42fc1b2 100644
--- a/examples/vmdq_dcb/main.c
+++ b/examples/vmdq_dcb/main.c
@@ -455,7 +455,7 @@ MAIN(int argc, char *argv[])
if (ret < 0)
rte_exit(EXIT_FAILURE, "Invalid VMDQ argument\n");
- if (rte_ixgbe_pmd_init() != 0 ||
+ if (rte_pmd_init_all() != 0) ||
rte_eal_pci_probe() != 0)
rte_exit(EXIT_FAILURE, "Error with NIC driver initialization\n");
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 9a0a26a..3d87733 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -146,17 +146,6 @@ int rte_pmd_init_all(void)
int ret = -ENODEV;
struct pmd_entry *entry;
-#ifdef RTE_LIBRTE_IXGBE_PMD
- if ((ret = rte_ixgbe_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init ixgbe PMD\n");
- return (ret);
- }
- if ((ret = rte_ixgbevf_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init ixgbevf PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_IXGBE_PMD */
-
#ifdef RTE_LIBRTE_VIRTIO_PMD
if ((ret = rte_virtio_pmd_init()) != 0) {
RTE_LOG(ERR, PMD, "Cannot init virtio PMD\n");
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index d06308b..d9f4705 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1316,24 +1316,6 @@ struct eth_driver {
extern void rte_eth_driver_register(struct eth_driver *eth_drv);
/**
- * The initialization function of the driver for 10Gbps Intel IXGBE
- * Ethernet devices.
- * Invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_ixgbe_pmd_init(void);
-
-/**
- * The initialization function of the driver for 10Gbps Intel IXGBE_VF
- * Ethernet devices.
- * Invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_ixgbevf_pmd_init(void);
-
-/**
* The initialization function of the driver for Qumranet virtio-net
* Ethernet devices.
* Invoked once at EAL start time.
diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
index a5a7f9a..c6bfa71 100644
--- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
+++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
@@ -58,6 +58,7 @@
#include <rte_ethdev.h>
#include <rte_atomic.h>
#include <rte_malloc.h>
+#include <rte_pmd.h>
#include "ixgbe_logs.h"
#include "ixgbe/ixgbe_api.h"
@@ -955,7 +956,7 @@ static struct eth_driver rte_ixgbevf_pmd = {
* Invoked once at EAL init time.
* Register itself as the [Poll Mode] Driver of PCI IXGBE devices.
*/
-int
+static int
rte_ixgbe_pmd_init(void)
{
PMD_INIT_FUNC_TRACE();
@@ -969,7 +970,7 @@ rte_ixgbe_pmd_init(void)
* Invoked one at EAL init time.
* Register itself as the [Virtual Poll Mode] Driver of PCI niantic devices.
*/
-int
+static int
rte_ixgbevf_pmd_init(void)
{
DEBUGFUNC("rte_ixgbevf_pmd_init");
@@ -3060,3 +3061,6 @@ ixgbe_mirror_rule_reset(struct rte_eth_dev *dev, uint8_t rule_id)
return 0;
}
+
+PMD_INIT(rte_ixgbe_pmd_init);
+PMD_INIT(rte_ixgbevf_pmd_init);
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 7435d97..498b425 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -79,9 +79,11 @@ LDLIBS += -lrte_pmd_e1000
endif
endif
+ifeq ($(RTE_BUILD_SHARED_LIB),n)
ifeq ($(CONFIG_RTE_LIBRTE_IXGBE_PMD),y)
LDLIBS += -lrte_pmd_ixgbe
endif
+endif
ifeq ($(CONFIG_RTE_LIBRTE_VIRTIO_PMD),y)
LDLIBS += -lrte_pmd_virtio_uio
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 17/19] virtio: Move to using PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (14 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 16/19] ixgbe: move ixgbe[vf] pmd's " Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 18/19] vmxnet3: move " Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 19/19] pmd: Not having any pci dev pmds shouldn't be fatal Neil Horman
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Move the virtio pmd to make use of the PMD_INIT macro
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_ether/rte_ethdev.c | 7 -------
lib/librte_ether/rte_ethdev.h | 9 ---------
lib/librte_pmd_virtio/virtio_ethdev.c | 6 +++++-
mk/rte.app.mk | 3 ++-
4 files changed, 7 insertions(+), 18 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 3d87733..8a3bbd1 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -146,13 +146,6 @@ int rte_pmd_init_all(void)
int ret = -ENODEV;
struct pmd_entry *entry;
-#ifdef RTE_LIBRTE_VIRTIO_PMD
- if ((ret = rte_virtio_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init virtio PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_VIRTIO_PMD */
-
#ifdef RTE_LIBRTE_VMXNET3_PMD
if ((ret = rte_vmxnet3_pmd_init()) != 0) {
RTE_LOG(ERR, PMD, "Cannot init vmxnet3 PMD\n");
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index d9f4705..4c57864 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1316,15 +1316,6 @@ struct eth_driver {
extern void rte_eth_driver_register(struct eth_driver *eth_drv);
/**
- * The initialization function of the driver for Qumranet virtio-net
- * Ethernet devices.
- * Invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_virtio_pmd_init(void);
-
-/**
* The initialization function of the driver for VMware VMXNET3
* Ethernet devices.
* Invoked once at EAL start time.
diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c b/lib/librte_pmd_virtio/virtio_ethdev.c
index f107161..f7366df 100644
--- a/lib/librte_pmd_virtio/virtio_ethdev.c
+++ b/lib/librte_pmd_virtio/virtio_ethdev.c
@@ -50,6 +50,7 @@
#include <rte_memory.h>
#include <rte_eal.h>
+#include <rte_pmd.h>
#include "virtio_ethdev.h"
#include "virtio_pci.h"
@@ -486,7 +487,7 @@ static struct eth_driver rte_virtio_pmd = {
* Register itself as the [Poll Mode] Driver of PCI virtio devices.
* Returns 0 on success.
*/
-int
+static int
rte_virtio_pmd_init(void)
{
rte_eth_driver_register(&rte_virtio_pmd);
@@ -643,3 +644,6 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
dev_info->max_rx_pktlen = VIRTIO_MAX_RX_PKTLEN;
dev_info->max_mac_addrs = VIRTIO_MAX_MAC_ADDRS;
}
+
+PMD_INIT(rte_virtio_pmd_init);
+
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 498b425..2aa71e4 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -83,11 +83,12 @@ ifeq ($(RTE_BUILD_SHARED_LIB),n)
ifeq ($(CONFIG_RTE_LIBRTE_IXGBE_PMD),y)
LDLIBS += -lrte_pmd_ixgbe
endif
-endif
ifeq ($(CONFIG_RTE_LIBRTE_VIRTIO_PMD),y)
LDLIBS += -lrte_pmd_virtio_uio
endif
+endif
+
ifeq ($(CONFIG_RTE_LIBRTE_VMXNET3_PMD),y)
LDLIBS += -lrte_pmd_vmxnet3_uio
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 18/19] vmxnet3: move to using PMD_INIT macro
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (15 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 17/19] virtio: Move to using " Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
2014-04-10 20:50 ` [dpdk-dev] [PATCH 19/19] pmd: Not having any pci dev pmds shouldn't be fatal Neil Horman
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Move teh vmxnet3 pmd to use the PMD_INIT macro
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_ether/rte_ethdev.c | 13 -------------
lib/librte_ether/rte_ethdev.h | 10 ----------
lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c | 5 ++++-
mk/rte.app.mk | 3 +--
4 files changed, 5 insertions(+), 26 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 8a3bbd1..0b4888c 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -146,25 +146,12 @@ int rte_pmd_init_all(void)
int ret = -ENODEV;
struct pmd_entry *entry;
-#ifdef RTE_LIBRTE_VMXNET3_PMD
- if ((ret = rte_vmxnet3_pmd_init()) != 0) {
- RTE_LOG(ERR, PMD, "Cannot init vmxnet3 PMD\n");
- return (ret);
- }
-#endif /* RTE_LIBRTE_VMXNET3_PMD */
-
- if (ret == -ENODEV) {
- RTE_LOG(ERR, PMD, "No PMD(s) are configured\n");
- goto out;
- }
-
TAILQ_FOREACH(entry, &pmd_init_list, next) {
ret = entry->pmd_initfn();
if (ret != 0)
break;
}
-out:
return ret;
}
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 4c57864..0b38df2 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1316,16 +1316,6 @@ struct eth_driver {
extern void rte_eth_driver_register(struct eth_driver *eth_drv);
/**
- * The initialization function of the driver for VMware VMXNET3
- * Ethernet devices.
- * Invoked once at EAL start time.
- * @return
- * 0 on success
- */
-extern int rte_vmxnet3_pmd_init(void);
-
-
-/**
* The initialization function of *all* supported and enabled drivers.
* Right now, the following PMDs are supported:
* - igb
diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
index 8259cfe..ce649a4 100644
--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
@@ -60,6 +60,7 @@
#include <rte_atomic.h>
#include <rte_string_fns.h>
#include <rte_malloc.h>
+#include <rte_pmd.h>
#include "vmxnet3/vmxnet3_defs.h"
@@ -278,7 +279,7 @@ static struct eth_driver rte_vmxnet3_pmd = {
* Invoked once at EAL init time.
* Register itself as the [Poll Mode] Driver of Virtual PCI VMXNET3 devices.
*/
-int
+static int
rte_vmxnet3_pmd_init(void)
{
PMD_INIT_FUNC_TRACE();
@@ -763,3 +764,5 @@ vmxnet3_process_events(struct vmxnet3_hw *hw)
}
#endif
+
+PMD_INIT(rte_vmxnet3_pmd_init);
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 2aa71e4..15dbf2e 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -87,12 +87,11 @@ endif
ifeq ($(CONFIG_RTE_LIBRTE_VIRTIO_PMD),y)
LDLIBS += -lrte_pmd_virtio_uio
endif
-endif
-
ifeq ($(CONFIG_RTE_LIBRTE_VMXNET3_PMD),y)
LDLIBS += -lrte_pmd_vmxnet3_uio
endif
+endif
ifeq ($(CONFIG_RTE_LIBRTE_TIMER),y)
LDLIBS += -lrte_timer
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [dpdk-dev] [PATCH 19/19] pmd: Not having any pci dev pmds shouldn't be fatal
2014-04-10 20:49 ` [dpdk-dev] [PATCH 01/19] makefiles: Fixed -share command line option error Neil Horman
` (16 preceding siblings ...)
2014-04-10 20:50 ` [dpdk-dev] [PATCH 18/19] vmxnet3: move " Neil Horman
@ 2014-04-10 20:50 ` Neil Horman
17 siblings, 0 replies; 23+ messages in thread
From: Neil Horman @ 2014-04-10 20:50 UTC (permalink / raw)
To: dev
Since we support non-pci pmds, we shouldn't return a fatal error if we didn't
load any pmds, as we may just be using a non-pci pmd
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
lib/librte_ether/rte_ethdev.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 0b4888c..a835311 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -149,9 +149,11 @@ int rte_pmd_init_all(void)
TAILQ_FOREACH(entry, &pmd_init_list, next) {
ret = entry->pmd_initfn();
if (ret != 0)
- break;
+ goto out;
}
+ ret = 0;
+out:
return ret;
}
--
1.8.3.1
^ permalink raw reply [flat|nested] 23+ messages in thread