Hi, > -----Original Message----- > From: dev <dev-boun...@dpdk.org> On Behalf Of Pavan Nikhilesh > Bhagavatula > Sent: Tuesday, April 23, 2019 17:13 > To: tho...@monjalon.net > Cc: dev@dpdk.org; jer...@marvell.com; Marko Kovacevic > <marko.kovace...@intel.com>; Ori Kam <or...@mellanox.com>; Bruce > Richardson <bruce.richard...@intel.com>; Pablo de Lara > <pablo.de.lara.gua...@intel.com>; Radu Nicolau <radu.nico...@intel.com>; > akhil.go...@nxp.com; Tomasz Kantecki <tomasz.kante...@intel.com>; > sta...@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] examples/l3fwd: fix em mode datapath > selection > > > > >-----Original Message----- > >From: dev <dev-boun...@dpdk.org> On Behalf Of Thomas Monjalon > >Sent: Tuesday, April 23, 2019 2:05 PM > >To: Pavan Nikhilesh Bhagavatula <pbhagavat...@marvell.com> > >Cc: dev@dpdk.org; Jerin Jacob Kollanukkaran <jer...@marvell.com>; Marko > >Kovacevic <marko.kovace...@intel.com>; Ori Kam <or...@mellanox.com>; > >Bruce Richardson <bruce.richard...@intel.com>; Pablo de Lara > ><pablo.de.lara.gua...@intel.com>; Radu Nicolau > ><radu.nico...@intel.com>; Akhil Goyal <akhil.go...@nxp.com>; Tomasz > >Kantecki <tomasz.kante...@intel.com>; sta...@dpdk.org > >Subject: Re: [dpdk-dev] [PATCH] examples/l3fwd: fix em mode datapath > >selection > > > >23/04/2019 04:47, Pavan Nikhilesh Bhagavatula: > >>From: Thomas Monjalon <tho...@monjalon.net> > >> >10/04/2019 09:29, Pavan Nikhilesh Bhagavatula: > >> >> From: Pavan Nikhilesh <pbhagavat...@marvell.com> > >> >> > >> >> Currently, l3wfd em mode has two datapath modes em_sequential > and > >> >> em_hlm. We can select either of them by defining > >> >NO_HASH_MULTI_LOOKUP > >> >> to one or zero. > >> >> The code checks if NO_HASH_MULTI_LOOKUP is defined or not > instead > >> >> of checking for the value. > >> >> > >> >> Fixes: 52c97adc1f0f ("examples/l3fwd: fix exact match > >> >> performance") > >> >> Cc: sta...@dpdk.org > >> >> > >> >> Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> > >> >> --- > >> >> --- a/examples/l3fwd/l3fwd_em.c > >> >> +++ b/examples/l3fwd/l3fwd_em.c > >> >> #if defined RTE_ARCH_X86 || defined > RTE_MACHINE_CPUFLAG_NEON > >-#if > >> >> defined(NO_HASH_MULTI_LOOKUP) > >> >> +#if NO_HASH_MULTI_LOOKUP > >> > > >> >A quick grep shows that it used in another place with #ifdef: > >> > > >> >examples/l3fwd/l3fwd.h:#if !defined(NO_HASH_MULTI_LOOKUP) && > >> >defined(RTE_MACHINE_CPUFLAG_NEON) > >> > > >> > > >> > >> #if !defined(NO_HASH_MULTI_LOOKUP) && > >> defined(RTE_MACHINE_CPUFLAG_NEON) #define > >NO_HASH_MULTI_LOOKUP 1 > >> #endif > >> > >> This macro is used to set l3fwd_em_sequential as the default EM > >> datapath on AARCH64 as its performance is better. > >> (http://patches.dpdk.org/patch/49372/) > >> > >> make -C examples/l3fwd #Selects l3fwd_em_sequential by default > on > >AARCH 64 > >> > >> Currently, we cannot select em_hlm without manually editing the macro > >> as using the below command still sets em_sequential as the default > >> datapath because the macro modified in the patch that selects the > >> datapath > >checks if NO_HASH_MULTI_LOOKUP is defined or not rather than its value. > >> > >> EXTRA_CFLAGS='-DNO_HASH_MULTI_LOOKUP=0' make -C > examples/l3fwd > >> > >> I hope I cleared up things a bit. > > > >In my understanding, we should check the value in the other case too, > >instead of #if defined. > > That will lead to undefined and redefined error: > > [dpdk] # make -C examples/l3fwd > make: Entering directory '/root/pavan/dpdk-int/examples/l3fwd' > CC main.o > CC l3fwd_lpm.o > In file included from /root/dpdk/examples/l3fwd/l3fwd_lpm.c:28:0: > /root/dpdk/examples/l3fwd/l3fwd.h:14:6: error: > "NO_HASH_MULTI_LOOKUP" is not defined, evaluates to 0 [-Werror=undef] > #if !NO_HASH_MULTI_LOOKUP && > defined(RTE_MACHINE_CPUFLAG_NEON) > > [dpdk] # EXTRA_CFLAGS='-DNO_HASH_MULTI_LOOKUP=0' make -C > examples/l3fwd > make: Entering directory '/root/dpdk/examples/l3fwd' > CC main.o > ] > #define NO_HASH_MULTI_LOOKUP 1 > n file included from /root/dpdk/examples/l3fwd/l3fwd_lpm.c:28:0: > <command-line>:0:0: note: > > ] #define > NO_HASH_MULTI_LOOKUP 1is the location of the previous definition > > > > >
Actually I looked at this EM lookup mode selection issue as well, and my first solution is the same as yours :) I didn't find out a way to enable selection without using compile options (-DNO_HASH_MULTI_LOOKUP etc.). Maybe we can use both HASH_MULTI_LOOKUP and NO_HASH_MULTI_LOOKUP like below: --- a/examples/l3fwd/l3fwd.h +++ b/examples/l3fwd/l3fwd.h @@ -11,8 +11,8 @@ #define RTE_LOGTYPE_L3FWD RTE_LOGTYPE_USER1 -#if !defined(NO_HASH_MULTI_LOOKUP) && defined(RTE_MACHINE_CPUFLAG_NEON) -#define NO_HASH_MULTI_LOOKUP 1 +#if !defined(HASH_MULTI_LOOKUP) && defined(RTE_MACHINE_CPUFLAG_NEON) +#define NO_HASH_MULTI_LOOKUP #endif Not sure if this is a good idea. PS: if we are controlling selection using compile options, it is better to be documented somewhere.