From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.tuxdriver.com (charlotte.tuxdriver.com [70.61.120.58]) by dpdk.org (Postfix) with ESMTP id D28386936 for ; Thu, 10 Apr 2014 16:43:36 +0200 (CEST) Received: from uucp by smtp.tuxdriver.com with local-rmail (Exim 4.63) (envelope-from ) id 1WYGE5-0002Kz-1G for dev@dpdk.org; Thu, 10 Apr 2014 10:45:13 -0400 Received: from linville-x1.hq.tuxdriver.com (localhost.localdomain [127.0.0.1]) by linville-x1.hq.tuxdriver.com (8.14.8/8.14.6) with ESMTP id s3AEfpnX017895 for ; Thu, 10 Apr 2014 10:41:51 -0400 Received: (from linville@localhost) by linville-x1.hq.tuxdriver.com (8.14.8/8.14.8/Submit) id s3AEfpgR017894 for dev@dpdk.org; Thu, 10 Apr 2014 10:41:51 -0400 X-Authentication-Warning: linville-x1.hq.tuxdriver.com: linville set sender to linville@tuxdriver.com using -f From: "John W. Linville" To: dev@dpdk.org Date: Thu, 10 Apr 2014 10:41:47 -0400 Message-Id: <1397140907-17856-1-git-send-email-linville@tuxdriver.com> X-Mailer: git-send-email 1.9.0 Subject: [dpdk-dev] [PATCH] rte_pmd_init_all: initialize non-PCI PMDs provided by EAL X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Apr 2014 14:43:37 -0000 These PMDs were being initialized by the EAL layer, but many apps were relying on the return value of rte_pmd_init_all to indicate that ethernet interfaces were available for use. Move the initialization of the non-PCI PMDs to this centralized function to have all of the PMDs treated equally. Signed-off-by: John W. Linville --- lib/librte_eal/bsdapp/eal/eal.c | 3 --- lib/librte_eal/common/eal_common_nonpci_devs.c | 2 +- lib/librte_eal/common/include/eal_private.h | 7 ------- lib/librte_eal/common/include/rte_common.h | 7 +++++++ lib/librte_eal/linuxapp/eal/eal.c | 3 --- lib/librte_ether/rte_ethdev.h | 11 +++++++++++ 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index be00f9120a65..a1cd683c6ff6 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -854,9 +854,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"); - RTE_LCORE_FOREACH_SLAVE(i) { /* diff --git a/lib/librte_eal/common/eal_common_nonpci_devs.c b/lib/librte_eal/common/eal_common_nonpci_devs.c index 1c9c88b61535..bf645e3f6449 100644 --- a/lib/librte_eal/common/eal_common_nonpci_devs.c +++ b/lib/librte_eal/common/eal_common_nonpci_devs.c @@ -76,7 +76,7 @@ struct device_init dev_types[] = { }; int -rte_eal_non_pci_ethdev_init(void) +rte_eal_non_pci_pmd_init(void) { uint8_t i, j; for (i = 0; i < NUM_DEV_TYPES; i++) { diff --git a/lib/librte_eal/common/include/eal_private.h b/lib/librte_eal/common/include/eal_private.h index 251f15e71b74..a7806a957096 100644 --- a/lib/librte_eal/common/include/eal_private.h +++ b/lib/librte_eal/common/include/eal_private.h @@ -234,11 +234,4 @@ int eal_dev_is_whitelisted(const char *device_str, const char **params); */ void eal_dev_whitelist_clear(void); -/** - * This function initialises any non-PCI i.e. dummy ethernet devices - * - * This function is private to the EAL. - */ -int rte_eal_non_pci_ethdev_init(void); - #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h index b6ea7f06741a..1a69711e4589 100644 --- a/lib/librte_eal/common/include/rte_common.h +++ b/lib/librte_eal/common/include/rte_common.h @@ -382,6 +382,13 @@ rte_exit(int exit_code, const char *format, ...) __attribute__((noreturn)) __attribute__((format(printf, 2, 3))); +/** + * This function initialises any non-PCI i.e. dummy ethernet devices + * + * This function is private to the EAL. + */ +int rte_eal_non_pci_pmd_init(void); + #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 72b4dd7b1333..cdd8ecd2e004 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -1029,9 +1029,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] != '/')) { diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index dea7471d71a4..f6622990fe0a 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -1389,6 +1389,9 @@ extern int rte_vmxnet3_pmd_init(void); * - ixgbevf * - virtio * - vmxnet3 + * - pcap + * - ring + * - xenvirt * This function is invoked once at EAL start time. * @return * 0 on success. @@ -1444,6 +1447,14 @@ int rte_pmd_init_all(void) } #endif /* RTE_LIBRTE_VMXNET3_PMD */ +#if defined(RTE_LIBRTE_PMD_PCAP) || defined(RTE_LIBRTE_PMD_RING) || \ + defined(RTE_LIBRTE_PMD_XENVIRT) + if ((ret = rte_eal_non_pci_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init non-PCI PMDs\n"); + return (ret); + } +#endif /* PMD_PCAP || PMD_RING || PMD_XENVIRT */ + if (ret == -ENODEV) RTE_LOG(ERR, PMD, "No PMD(s) are configured\n"); return (ret); -- 1.9.0