[ovs-dev] [RFC v2 1/2] dpdk: allow init to fail
Aaron Conole
aconole at redhat.com
Wed Apr 25 17:06:34 UTC 2018
Kevin Traynor <ktraynor at redhat.com> writes:
Thanks, Kevin!
> 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
Good point.
>> @@ -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