From 07a6f5c2d302cdccbbdf3b6f98be8a2238d40a29 Mon Sep 17 00:00:00 2001 From: Santosh Shukla Date: Fri, 13 Oct 2017 11:55:01 +0000 Subject: [PATCH] eal: call plugin init before device parse Default eal_init code calls 0. eal_plugins_init 1. eal_option_device_parse 2. rte_bus_scan IOVA commit:cf408c224 missed on calling eal_plugins_init before eal_option_device_parse, rte_bus_scan and that introduced below regression for shared mode: with CONFIG_RTE_BUILD_SHARED_LIB=y: 'net_vhost0,iface=/tmp/vhost-user2' -d ./install/lib/librte_pmd_vhost.so -- --portmask=1 --disable-hw-vlan -i --rxq=1 --txq=1 --nb-cores=1 --eth-peer=0,52:54:00:11:22:12 EAL: Detected 4 lcore(s) ERROR: failed to parse device "net_vhost0" EAL: Unable to parse device 'net_vhost0,iface=/tmp/vhost-user2' PANIC in main(): Cannot init EAL Fixes: cf408c224 ("eal: auto detect IOVA mode") Reported-by: Maxime Coquelin Signed-off-by: Santosh Shukla Tested-by: Maxime Coquelin --- lib/librte_eal/bsdapp/eal/eal.c | 10 +++++++--- lib/librte_eal/linuxapp/eal/eal.c | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 30d3bd5b5f..e981721aa6 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -551,6 +551,13 @@ rte_eal_init(int argc, char **argv) return -1; } + if (eal_plugins_init() < 0) { + rte_eal_init_alert("Cannot init plugins\n"); + rte_errno = EINVAL; + rte_atomic32_clear(&run_once); + return -1; + } + if (eal_option_device_parse()) { rte_errno = ENODEV; rte_atomic32_clear(&run_once); @@ -635,9 +642,6 @@ rte_eal_init(int argc, char **argv) eal_check_mem_on_local_socket(); - if (eal_plugins_init() < 0) - rte_eal_init_alert("Cannot init plugins\n"); - eal_thread_init_master(rte_config.master_lcore); ret = eal_thread_dump_affinity(cpuset, RTE_CPU_AFFINITY_STR_LEN); diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index ec37c52c03..ad7278989a 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -786,6 +786,13 @@ rte_eal_init(int argc, char **argv) return -1; } + if (eal_plugins_init() < 0) { + rte_eal_init_alert("Cannot init plugins\n"); + rte_errno = EINVAL; + rte_atomic32_clear(&run_once); + return -1; + } + if (eal_option_device_parse()) { rte_errno = ENODEV; rte_atomic32_clear(&run_once); @@ -882,9 +889,6 @@ rte_eal_init(int argc, char **argv) eal_check_mem_on_local_socket(); - if (eal_plugins_init() < 0) - rte_eal_init_alert("Cannot init plugins\n"); - eal_thread_init_master(rte_config.master_lcore); ret = eal_thread_dump_affinity(cpuset, RTE_CPU_AFFINITY_STR_LEN); -- 2.20.1