[ovs-dev] [PATCH] netdev-dpdk: Allow changing NON_PMD_CORE_ID for testing purpose.
Alex Wang
alexw at nicira.com
Wed Feb 4 23:14:49 UTC 2015
Hey Daniele,
Do you still remember why you mentioned:
"/* We have to use 0 to allow non pmd threads to perform certain DPDK
* operations, like rte_eth_dev_configure(). */
"
in your commit: db73f716 (netdev-dpdk: Fix race condition with DPDK
mempools in non pmd threads)
This posted commit works during my manual test. And the
rte_eth_dev_configure() in dpdk-1.7.1 does not require the caller lcore id
to
be 0.
But Pravin mentioned that you may know more about why use 0 for non-pmd
threads (to prevent crash?).
Could you share some thoughts?
Thanks,
Alex Wang,
On Wed, Feb 4, 2015 at 2:14 PM, Pravin Shelar <pshelar at nicira.com> wrote:
> On Tue, Feb 3, 2015 at 5:54 PM, Alex Wang <alexw at nicira.com> wrote:
> > For testing purpose, developers may want to change the NON_PMD_CORE_ID
> > and use a different core for non-pmd threads. Since the netdev-dpdk
> > module is hard-coded to assert the non-pmd threads using core 0, such
> > change will cause abortion of OVS.
> >
> > This commit fixes the assertion and allows changing NON_PMD_CORE_ID.
> >
> > Signed-off-by: Alex Wang <alexw at nicira.com>
> > ---
> > lib/dpctl.c | 2 +-
> > lib/dpif-netdev.h | 1 -
> > lib/netdev-dpdk.c | 12 ++++++------
> > lib/netdev-dpdk.h | 2 ++
> > 4 files changed, 9 insertions(+), 8 deletions(-)
> >
> > diff --git a/lib/dpctl.c b/lib/dpctl.c
> > index 4c2614b..125023c 100644
> > --- a/lib/dpctl.c
> > +++ b/lib/dpctl.c
> > @@ -31,11 +31,11 @@
> > #include "dirs.h"
> > #include "dpctl.h"
> > #include "dpif.h"
> > -#include "dpif-netdev.h"
> > #include "dynamic-string.h"
> > #include "flow.h"
> > #include "match.h"
> > #include "netdev.h"
> > +#include "netdev-dpdk.h"
> > #include "netlink.h"
> > #include "odp-util.h"
> > #include "ofp-parse.h"
> > diff --git a/lib/dpif-netdev.h b/lib/dpif-netdev.h
> > index d811507..410fcfa 100644
> > --- a/lib/dpif-netdev.h
> > +++ b/lib/dpif-netdev.h
> > @@ -42,7 +42,6 @@ static inline void dp_packet_pad(struct ofpbuf *b)
> >
> > #define NR_QUEUE 1
> > #define NR_PMD_THREADS 1
> > -#define NON_PMD_CORE_ID 0
> >
> > #ifdef __cplusplus
> > }
> > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> > index 0ede200..391695f 100644
> > --- a/lib/netdev-dpdk.c
> > +++ b/lib/netdev-dpdk.c
> > @@ -1553,8 +1553,8 @@ pmd_thread_setaffinity_cpu(int cpu)
> > VLOG_ERR("Thread affinity error %d",err);
> > return err;
> > }
> > - /* lcore_id 0 is reseved for use by non pmd threads. */
> > - ovs_assert(cpu);
> > + /* NON_PMD_CORE_ID is reserved for use by non pmd threads. */
> > + ovs_assert(cpu != NON_PMD_CORE_ID);
>
> > RTE_PER_LCORE(_lcore_id) = cpu;
> >
> > return 0;
> > @@ -1563,13 +1563,13 @@ pmd_thread_setaffinity_cpu(int cpu)
> > void
> > thread_set_nonpmd(void)
> > {
> > - /* We have to use 0 to allow non pmd threads to perform certain DPDK
> > - * operations, like rte_eth_dev_configure(). */
> > - RTE_PER_LCORE(_lcore_id) = 0;
> > + /* We have to use NON_PMD_CORE_ID to allow non-pmd threads to
> perform
> > + * certain DPDK operations, like rte_eth_dev_configure(). */
>
>
> The is not equivalent comment. have you confirmed that
> rte_eth_dev_configure() works on any core?
>
> > + RTE_PER_LCORE(_lcore_id) = NON_PMD_CORE_ID;
> > }
> >
> > static bool
> > thread_is_pmd(void)
> > {
> > - return rte_lcore_id() != 0;
> > + return rte_lcore_id() != NON_PMD_CORE_ID;
> > }
> > diff --git a/lib/netdev-dpdk.h b/lib/netdev-dpdk.h
> > index c24d6da..9a47165 100644
> > --- a/lib/netdev-dpdk.h
> > +++ b/lib/netdev-dpdk.h
> > @@ -5,6 +5,8 @@
> >
> > struct dpif_packet;
> >
> > +#define NON_PMD_CORE_ID 0
> > +
> > #ifdef DPDK_NETDEV
> >
> > #include <rte_config.h>
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list