>-----Original Message----- >From: Power, Ciara <ciara.po...@intel.com> >Sent: Thursday 15 October 2020 16:23 >To: dev@dpdk.org >Cc: vikto...@rehivetech.com; ruifeng.w...@arm.com; jer...@marvell.com; >d...@linux.vnet.ibm.com; Richardson, Bruce <bruce.richard...@intel.com>; >Ananyev, Konstantin <konstantin.anan...@intel.com>; >david.march...@redhat.com; Power, Ciara <ciara.po...@intel.com>; Nithin >Dabilpuram <ndabilpu...@marvell.com>; Pavan Nikhilesh ><pbhagavat...@marvell.com>; Kiran Kumar K <kirankum...@marvell.com> >Subject: [PATCH v7 17/18] node: choose vector path at runtime > >When choosing the vector path, max SIMD bitwidth is now checked to ensure >the vector path is suitable. To do this, the scalar function is chosen by >default >in the struct, but at node initialisation time, this function pointer is >updated >to the vector version if supported, and if it is within the max SIMD bitwidth >limit. > >Cc: Nithin Dabilpuram <ndabilpu...@marvell.com> >Cc: Pavan Nikhilesh <pbhagavat...@marvell.com> >Cc: Jerin Jacob <jer...@marvell.com> >Cc: Kiran Kumar K <kirankum...@marvell.com> > >Signed-off-by: Ciara Power <ciara.po...@intel.com> > >--- >v6: > - Removed generic process function. > - Change the process function pointer at node init time to vector > function if suitable. >--- > lib/librte_node/ip4_lookup.c | 14 +++++++++----- > lib/librte_node/ip4_lookup_neon.h | 2 +- lib/librte_node/ip4_lookup_sse.h >| 2 +- > 3 files changed, 11 insertions(+), 7 deletions(-) > >diff --git a/lib/librte_node/ip4_lookup.c b/lib/librte_node/ip4_lookup.c index >293c77f39e..934a6d7eab 100644 >--- a/lib/librte_node/ip4_lookup.c >+++ b/lib/librte_node/ip4_lookup.c >@@ -34,10 +34,10 @@ static struct ip4_lookup_node_main ip4_lookup_nm; >#include "ip4_lookup_neon.h" > #elif defined(RTE_ARCH_X86) > #include "ip4_lookup_sse.h" >-#else >+#endif > > static uint16_t >-ip4_lookup_node_process(struct rte_graph *graph, struct rte_node *node, >+ip4_lookup_node_process_scalar(struct rte_graph *graph, struct rte_node >+*node, > void **objs, uint16_t nb_objs) > { > struct rte_ipv4_hdr *ipv4_hdr; >@@ -109,8 +109,6 @@ ip4_lookup_node_process(struct rte_graph *graph, >struct rte_node *node, > return nb_objs; > } > >-#endif >- > int > rte_node_ip4_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop, > enum rte_node_ip4_lookup_next next_node) @@ - >194,13 +192,19 @@ ip4_lookup_node_init(const struct rte_graph *graph, >struct rte_node *node) > init_once = 1; > } > *lpm_p = ip4_lookup_nm.lpm_tbl[graph->socket]; >+ >+#if defined(__ARM_NEON) || defined(RTE_ARCH_X86) >+ if (rte_get_max_simd_bitwidth() >= RTE_SIMD_128) >+ node->process = ip4_lookup_node_process_vec; #endif >+ > node_dbg("ip4_lookup", "Initialized ip4_lookup node"); > > return 0; > } > > static struct rte_node_register ip4_lookup_node = { >- .process = ip4_lookup_node_process, >+ .process = ip4_lookup_node_process_scalar, > .name = "ip4_lookup", > > .init = ip4_lookup_node_init, >diff --git a/lib/librte_node/ip4_lookup_neon.h >b/lib/librte_node/ip4_lookup_neon.h >index 5e5a7d87be..0ad2763b82 100644 >--- a/lib/librte_node/ip4_lookup_neon.h >+++ b/lib/librte_node/ip4_lookup_neon.h >@@ -7,7 +7,7 @@ > > /* ARM64 NEON */ > static uint16_t >-ip4_lookup_node_process(struct rte_graph *graph, struct rte_node *node, >+ip4_lookup_node_process_vec(struct rte_graph *graph, struct rte_node >+*node, > void **objs, uint16_t nb_objs) > { > struct rte_mbuf *mbuf0, *mbuf1, *mbuf2, *mbuf3, **pkts; diff --git >a/lib/librte_node/ip4_lookup_sse.h b/lib/librte_node/ip4_lookup_sse.h >index a071cc5919..264c986071 100644 >--- a/lib/librte_node/ip4_lookup_sse.h >+++ b/lib/librte_node/ip4_lookup_sse.h >@@ -7,7 +7,7 @@ > > /* X86 SSE */ > static uint16_t >-ip4_lookup_node_process(struct rte_graph *graph, struct rte_node *node, >+ip4_lookup_node_process_vec(struct rte_graph *graph, struct rte_node >+*node, > void **objs, uint16_t nb_objs) > { > struct rte_mbuf *mbuf0, *mbuf1, *mbuf2, *mbuf3, **pkts; >-- >2.22.0
Adding Ack missed from v6: Acked-by: Nithin Dabilpuram <ndabilpu...@marvell.com>