Skip to content

Commit

Permalink
dpdk: allow init to fail
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
  • Loading branch information
apconole authored and istokes committed May 25, 2018
1 parent 47e1b3b commit d7e2509
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions lib/dpdk.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 */
Expand All @@ -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 */
Expand All @@ -459,6 +462,7 @@ dpdk_init__(const struct smap *ovs_other_config)

/* Finally, register the dpdk classes */
netdev_dpdk_register();
return true;
}

void
Expand All @@ -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");
Expand Down

0 comments on commit d7e2509

Please sign in to comment.