Prevent pthread_setaffinity_np() being called with a potentially invalid cpu_set_t and add a default (core 0x1).
Also, only call pthread_getaffinity_np() if no dpdk-lcore-mask specified. CC: Aaron Conole <acon...@redhat.com> Signed-off-by: Kevin Traynor <kevin.tray...@intel.com> --- lib/netdev-dpdk.c | 35 ++++++++++++++++++++--------------- 1 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 79fcd1a..66b2ab4 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -3125,14 +3125,6 @@ dpdk_init__(const struct smap *ovs_other_config) #endif } - /* Get the main thread affinity */ - CPU_ZERO(&cpuset); - err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), - &cpuset); - if (err) { - VLOG_ERR("Thread getaffinity error %d.", err); - } - argv = grow_argv(&argv, 0, 1); argc = 1; argv[0] = xstrdup(ovs_get_program_name()); @@ -3153,13 +3145,26 @@ dpdk_init__(const struct smap *ovs_other_config) */ if (auto_determine) { int i; - for (i = 0; i < CPU_SETSIZE; i++) { - if (CPU_ISSET(i, &cpuset)) { - argv = grow_argv(&argv, argc, 2); - argv[argc++] = xstrdup("-c"); - argv[argc++] = xasprintf("0x%08llX", (1ULL<<i)); - i = CPU_SETSIZE; + /* Get the main thread affinity */ + CPU_ZERO(&cpuset); + err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), + &cpuset); + if (!err) { + for (i = 0; i < CPU_SETSIZE; i++) { + if (CPU_ISSET(i, &cpuset)) { + argv = grow_argv(&argv, argc, 2); + argv[argc++] = xstrdup("-c"); + argv[argc++] = xasprintf("0x%08llX", (1ULL<<i)); + i = CPU_SETSIZE; + } } + } else { + VLOG_ERR("Thread getaffinity error %d. Using core 0x1", err); + /* User did not set dpdk-lcore-mask and unable to get current + * thread affintity - default to core 0x1 */ + argv = grow_argv(&argv, argc, 2); + argv[argc++] = xstrdup("-c"); + argv[argc++] = xasprintf("0x%X", 1); } } @@ -3188,7 +3193,7 @@ dpdk_init__(const struct smap *ovs_other_config) } /* Set the main thread affinity back to pre rte_eal_init() value */ - if (auto_determine) { + if (auto_determine && !err) { err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); if (err) { -- 1.7.4.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev