[ovs-dev] [PATCH] netdev-dpdk: Allow changing NON_PMD_CORE_ID for testing purpose.

Pravin Shelar pshelar at nicira.com
Wed Feb 4 22:14:18 UTC 2015


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