On 05/03/2018 08:08 PM, Aaron Conole wrote: > It's possible for dpdk initialization to fail either due to an internal > error or an invalid configuration. When that happens, it's rather > impolite to immediately abort without any details. > > With this change, a failed dpdk initialization attempt will continue to > trigger a SIGABRT. However, the failure details will be logged, and a > user or administrator may have more information to correct the issue. > A restart of OvS would still be required to re-attempt initialization. > > The refactor to propagate the init error will be used in an upcoming > commit. >
LGTM Acked-by: Kevin Traynor <[email protected]> > Signed-off-by: Aaron Conole <[email protected]> > --- > lib/dpdk.c | 23 ++++++++++++++++------- > 1 file changed, 16 insertions(+), 7 deletions(-) > > diff --git a/lib/dpdk.c b/lib/dpdk.c > index 00dd97470..8bb686c43 100644 > --- a/lib/dpdk.c > +++ b/lib/dpdk.c > @@ -22,6 +22,7 @@ > #include <sys/stat.h> > #include <getopt.h> > > +#include <rte_errno.h> > #include <rte_log.h> > #include <rte_memzone.h> > #include <rte_version.h> > @@ -306,7 +307,7 @@ static cookie_io_functions_t dpdk_log_func = { > .write = dpdk_log_write, > }; > > -static void > +static bool > dpdk_init__(const struct smap *ovs_other_config) > { > char **argv = NULL, **argv_to_release = NULL; > @@ -422,9 +423,6 @@ dpdk_init__(const struct smap *ovs_other_config) > > /* Make sure things are initialized ... */ > result = rte_eal_init(argc, argv); > - if (result < 0) { > - ovs_abort(result, "Cannot init EAL"); > - } > argv_release(argv, argv_to_release, argc); > > /* Set the main thread affinity back to pre rte_eal_init() value */ > @@ -436,6 +434,11 @@ dpdk_init__(const struct smap *ovs_other_config) > } > } > > + if (result < 0) { > + VLOG_EMER("Unable to initialize DPDK: %s", ovs_strerror(rte_errno)); > + return false; > + } > + > rte_memzone_dump(stdout); > > /* We are called from the main thread here */ > @@ -459,6 +462,7 @@ dpdk_init__(const struct smap *ovs_other_config) > > /* Finally, register the dpdk classes */ > netdev_dpdk_register(); > + return true; > } > > void > @@ -476,10 +480,15 @@ dpdk_init(const struct smap *ovs_other_config) > if (ovsthread_once_start(&once_enable)) { > VLOG_INFO("Using %s", rte_version()); > VLOG_INFO("DPDK Enabled - initializing..."); > - dpdk_init__(ovs_other_config); > - enabled = true; > - VLOG_INFO("DPDK Enabled - initialized"); > + enabled = dpdk_init__(ovs_other_config); > + if (enabled) { > + VLOG_INFO("DPDK Enabled - initialized"); > + } else { > + ovs_abort(rte_errno, "Cannot init EAL"); > + } > ovsthread_once_done(&once_enable); > + } else { > + VLOG_ERR_ONCE("DPDK Initialization Failed."); > } > } else { > VLOG_INFO_ONCE("DPDK Disabled - Use other_config:dpdk-init to > enable"); > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
