[ovs-dev] [RFC v2 1/2] dpdk: allow init to fail
Kevin Traynor
ktraynor at redhat.com
Wed Apr 25 16:47:57 UTC 2018
On 04/18/2018 07:30 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.
>
> Signed-off-by: Aaron Conole <aconole at redhat.com>
> ---
> lib/dpdk.c | 20 ++++++++++++++------
> 1 file changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/lib/dpdk.c b/lib/dpdk.c
> index 00dd97470..641474cde 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,10 +423,11 @@ dpdk_init__(const struct smap *ovs_other_config)
>
> /* Make sure things are initialized ... */
> result = rte_eal_init(argc, argv);
> + argv_release(argv, argv_to_release, argc);
> if (result < 0) {
> - ovs_abort(result, "Cannot init EAL");
> + VLOG_EMER("Unable to initialize DPDK: %s", ovs_strerror(rte_errno));
> + return false;
> }
> - argv_release(argv, argv_to_release, argc);
>
> /* Set the main thread affinity back to pre rte_eal_init() value */
> if (auto_determine && !err) {
On eal init failure, I think you should still execute this code block
before returning to (possibly) restore the threads
> @@ -459,6 +461,7 @@ dpdk_init__(const struct smap *ovs_other_config)
>
> /* Finally, register the dpdk classes */
> netdev_dpdk_register();
> + return true;
> }
>
> void
> @@ -476,10 +479,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");
>
More information about the dev
mailing list