On Tue, Aug 13, 2019 at 8:30 AM Ilya Maximets <i.maxim...@samsung.com> wrote: > > This allows to decrease code duplication and avoid using Linux-specific > functions (this might be useful in the future if we'll try to allow > running OvS+DPDK on FreeBSD). > > Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
LGTM Acked-by: William Tu <u9012...@gmail.com> > --- > lib/dpdk.c | 27 ++++++++++++--------------- > 1 file changed, 12 insertions(+), 15 deletions(-) > > diff --git a/lib/dpdk.c b/lib/dpdk.c > index fc58de55a..6f297d918 100644 > --- a/lib/dpdk.c > +++ b/lib/dpdk.c > @@ -275,7 +275,7 @@ dpdk_init__(const struct smap *ovs_other_config) > int result; > bool auto_determine = true; > int err = 0; > - cpu_set_t cpuset; > + struct ovs_numa_dump *affinity = NULL; > struct svec args = SVEC_EMPTY_INITIALIZER; > > log_stream = fopencookie(NULL, "w+", dpdk_log_func); > @@ -357,22 +357,22 @@ dpdk_init__(const struct smap *ovs_other_config) > * lcore for the DPDK Master. > */ > if (auto_determine) { > + const struct ovs_numa_info_core *core; > int cpu = 0; > > /* Get the main thread affinity */ > - CPU_ZERO(&cpuset); > - err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), > - &cpuset); > - if (!err) { > - for (cpu = 0; cpu < CPU_SETSIZE; cpu++) { > - if (CPU_ISSET(cpu, &cpuset)) { > - break; > + affinity = ovs_numa_thread_getaffinity_dump(); > + if (affinity) { > + cpu = INT_MAX; > + FOR_EACH_CORE_ON_DUMP (core, affinity) { > + if (cpu > core->core_id) { > + cpu = core->core_id; > } > } > } else { > /* User did not set dpdk-lcore-mask and unable to get current > * thread affintity - default to core #0 */ > - VLOG_ERR("Thread getaffinity error %d. Using core #0", err); > + VLOG_ERR("Thread getaffinity failed. Using core #0"); > } > svec_add(&args, "-l"); > svec_add_nocopy(&args, xasprintf("%d", cpu)); > @@ -403,12 +403,9 @@ dpdk_init__(const struct smap *ovs_other_config) > svec_destroy(&args); > > /* Set the main thread affinity back to pre rte_eal_init() value */ > - if (auto_determine && !err) { > - err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), > - &cpuset); > - if (err) { > - VLOG_ERR("Thread setaffinity error %d", err); > - } > + if (affinity) { > + ovs_numa_thread_setaffinity_dump(affinity); > + ovs_numa_dump_destroy(affinity); > } > > if (result < 0) { > -- > 2.17.1 > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev