[ovs-dev] [PATCH 1/2] dpdk: allow init to fail

Kevin Traynor ktraynor at redhat.com
Thu May 17 20:44:33 UTC 2018


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 <ktraynor at redhat.com>

> Signed-off-by: Aaron Conole <aconole at redhat.com>
> ---
>  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");
> 



More information about the dev mailing list