* [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup @ 2022-06-01 11:15 Stanislaw Kardach 2022-06-01 11:15 ` [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function Stanislaw Kardach 2022-06-02 20:52 ` [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Thomas Monjalon 0 siblings, 2 replies; 7+ messages in thread From: Stanislaw Kardach @ 2022-06-01 11:15 UTC (permalink / raw) To: Vladimir Medvedkin Cc: Stanislaw Kardach, dev, Frank Zhao, Sam Grove, upstream, Stephen Hemminger All other rte_lpm_lookup* functions take lpm argument as a const. As the basic rte_lpm_lookup() performs the same function, it should also do that. As this function is inline, no API/ABI change happens. Signed-off-by: Stanislaw Kardach <kda@semihalf.com> Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/lpm/rte_lpm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/lpm/rte_lpm.h b/lib/lpm/rte_lpm.h index eb91960e81..1cf863a146 100644 --- a/lib/lpm/rte_lpm.h +++ b/lib/lpm/rte_lpm.h @@ -279,7 +279,7 @@ rte_lpm_delete_all(struct rte_lpm *lpm); * -EINVAL for incorrect arguments, -ENOENT on lookup miss, 0 on lookup hit */ static inline int -rte_lpm_lookup(struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) +rte_lpm_lookup(const struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) { unsigned tbl24_index = (ip >> 8); uint32_t tbl_entry; -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function 2022-06-01 11:15 [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Stanislaw Kardach @ 2022-06-01 11:15 ` Stanislaw Kardach 2022-06-01 11:52 ` Medvedkin, Vladimir 2022-06-02 20:52 ` [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Thomas Monjalon 1 sibling, 1 reply; 7+ messages in thread From: Stanislaw Kardach @ 2022-06-01 11:15 UTC (permalink / raw) To: Vladimir Medvedkin Cc: Michal Mazurek, dev, Frank Zhao, Sam Grove, upstream, Stanislaw Kardach From: Michal Mazurek <maz@semihalf.com> Add an implementation of the rte_lpm_lookupx4() function for platforms without support for vector operations. This will be useful in the upcoming RISC-V port as well as any platform which may want to start with a basic level of LPM support. Signed-off-by: Michal Mazurek <maz@semihalf.com> Signed-off-by: Stanislaw Kardach <kda@semihalf.com> --- doc/guides/rel_notes/release_22_07.rst | 5 ++++ lib/lpm/meson.build | 1 + lib/lpm/rte_lpm.h | 4 ++- lib/lpm/rte_lpm_scalar.h | 37 ++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 lib/lpm/rte_lpm_scalar.h diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst index e49cacecef..0cf3f71269 100644 --- a/doc/guides/rel_notes/release_22_07.rst +++ b/doc/guides/rel_notes/release_22_07.rst @@ -104,6 +104,11 @@ New Features * ``RTE_EVENT_QUEUE_ATTR_WEIGHT`` * ``RTE_EVENT_QUEUE_ATTR_AFFINITY`` +* **Added scalar version of the LPM library.** + + * Added scalar implementation of ``rte_lpm_lookupx4``. This is a fall-back + implementation for platforms that don't support vector operations. + Removed Items ------------- diff --git a/lib/lpm/meson.build b/lib/lpm/meson.build index 78d91d3421..6b47361fce 100644 --- a/lib/lpm/meson.build +++ b/lib/lpm/meson.build @@ -14,6 +14,7 @@ headers = files('rte_lpm.h', 'rte_lpm6.h') indirect_headers += files( 'rte_lpm_altivec.h', 'rte_lpm_neon.h', + 'rte_lpm_scalar.h', 'rte_lpm_sse.h', 'rte_lpm_sve.h', ) diff --git a/lib/lpm/rte_lpm.h b/lib/lpm/rte_lpm.h index 1cf863a146..4f38864fde 100644 --- a/lib/lpm/rte_lpm.h +++ b/lib/lpm/rte_lpm.h @@ -405,8 +405,10 @@ rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], #endif #elif defined(RTE_ARCH_PPC_64) #include "rte_lpm_altivec.h" -#else +#elif defined(RTE_ARCH_X86) #include "rte_lpm_sse.h" +#else +#include "rte_lpm_scalar.h" #endif #ifdef __cplusplus diff --git a/lib/lpm/rte_lpm_scalar.h b/lib/lpm/rte_lpm_scalar.h new file mode 100644 index 0000000000..f0d9f37894 --- /dev/null +++ b/lib/lpm/rte_lpm_scalar.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2022 StarFive + * Copyright(c) 2022 SiFive + * Copyright(c) 2022 Semihalf + */ + +#ifndef _RTE_LPM_SCALAR_H_ +#define _RTE_LPM_SCALAR_H_ + +#include <rte_vect.h> + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void +rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], + uint32_t defv) +{ + uint32_t nh; + int ret; + + ret = rte_lpm_lookup(lpm, ((rte_xmm_t)ip).u32[0], &nh); + hop[0] = (ret == 0) ? nh : defv; + ret = rte_lpm_lookup(lpm, ((rte_xmm_t)ip).u32[1], &nh); + hop[1] = (ret == 0) ? nh : defv; + ret = rte_lpm_lookup(lpm, ((rte_xmm_t)ip).u32[2], &nh); + hop[2] = (ret == 0) ? nh : defv; + ret = rte_lpm_lookup(lpm, ((rte_xmm_t)ip).u32[3], &nh); + hop[3] = (ret == 0) ? nh : defv; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_LPM_SCALAR_H_ */ -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function 2022-06-01 11:15 ` [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function Stanislaw Kardach @ 2022-06-01 11:52 ` Medvedkin, Vladimir 2022-06-03 9:23 ` Thomas Monjalon 0 siblings, 1 reply; 7+ messages in thread From: Medvedkin, Vladimir @ 2022-06-01 11:52 UTC (permalink / raw) To: Stanislaw Kardach; +Cc: Michal Mazurek, dev, Frank Zhao, Sam Grove, upstream On 01/06/2022 12:15, Stanislaw Kardach wrote: > From: Michal Mazurek <maz@semihalf.com> > > Add an implementation of the rte_lpm_lookupx4() function for platforms > without support for vector operations. > > This will be useful in the upcoming RISC-V port as well as any platform > which may want to start with a basic level of LPM support. > > Signed-off-by: Michal Mazurek <maz@semihalf.com> > Signed-off-by: Stanislaw Kardach <kda@semihalf.com> Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com> -- Regards, Vladimir ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function 2022-06-01 11:52 ` Medvedkin, Vladimir @ 2022-06-03 9:23 ` Thomas Monjalon 0 siblings, 0 replies; 7+ messages in thread From: Thomas Monjalon @ 2022-06-03 9:23 UTC (permalink / raw) To: Stanislaw Kardach Cc: dev, Michal Mazurek, Frank Zhao, Sam Grove, upstream, Medvedkin, Vladimir 01/06/2022 13:52, Medvedkin, Vladimir: > On 01/06/2022 12:15, Stanislaw Kardach wrote: > > From: Michal Mazurek <maz@semihalf.com> > > > > Add an implementation of the rte_lpm_lookupx4() function for platforms > > without support for vector operations. > > > > This will be useful in the upcoming RISC-V port as well as any platform > > which may want to start with a basic level of LPM support. > > > > Signed-off-by: Michal Mazurek <maz@semihalf.com> > > Signed-off-by: Stanislaw Kardach <kda@semihalf.com> > > Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com> Series applied, thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup 2022-06-01 11:15 [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Stanislaw Kardach 2022-06-01 11:15 ` [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function Stanislaw Kardach @ 2022-06-02 20:52 ` Thomas Monjalon 2022-06-03 7:29 ` Bruce Richardson 1 sibling, 1 reply; 7+ messages in thread From: Thomas Monjalon @ 2022-06-02 20:52 UTC (permalink / raw) To: Stanislaw Kardach, Stephen Hemminger Cc: Vladimir Medvedkin, dev, dev, Frank Zhao, Sam Grove, upstream 01/06/2022 13:15, Stanislaw Kardach: > All other rte_lpm_lookup* functions take lpm argument as a const. As the > basic rte_lpm_lookup() performs the same function, it should also do > that. > > As this function is inline, no API/ABI change happens. It is an API change and should be noted in the release notes. > static inline int > -rte_lpm_lookup(struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) > +rte_lpm_lookup(const struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup 2022-06-02 20:52 ` [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Thomas Monjalon @ 2022-06-03 7:29 ` Bruce Richardson 2022-06-03 7:43 ` Thomas Monjalon 0 siblings, 1 reply; 7+ messages in thread From: Bruce Richardson @ 2022-06-03 7:29 UTC (permalink / raw) To: Thomas Monjalon Cc: Stanislaw Kardach, Stephen Hemminger, Vladimir Medvedkin, dev, Frank Zhao, Sam Grove, upstream On Thu, Jun 02, 2022 at 10:52:25PM +0200, Thomas Monjalon wrote: > 01/06/2022 13:15, Stanislaw Kardach: > > All other rte_lpm_lookup* functions take lpm argument as a const. As the > > basic rte_lpm_lookup() performs the same function, it should also do > > that. > > > > As this function is inline, no API/ABI change happens. > > It is an API change and should be noted in the release notes. > > > static inline int > > -rte_lpm_lookup(struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) > > +rte_lpm_lookup(const struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) > While I've no particular objection to it appearing in the RN doc, I wonder whether it really counts as an API change. I can't see any practical difference that this change would make to the end user - no source code needs updating for example. /Bruce ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup 2022-06-03 7:29 ` Bruce Richardson @ 2022-06-03 7:43 ` Thomas Monjalon 0 siblings, 0 replies; 7+ messages in thread From: Thomas Monjalon @ 2022-06-03 7:43 UTC (permalink / raw) To: Bruce Richardson Cc: Stanislaw Kardach, Stephen Hemminger, Vladimir Medvedkin, dev, Frank Zhao, Sam Grove, upstream 03/06/2022 09:29, Bruce Richardson: > On Thu, Jun 02, 2022 at 10:52:25PM +0200, Thomas Monjalon wrote: > > 01/06/2022 13:15, Stanislaw Kardach: > > > All other rte_lpm_lookup* functions take lpm argument as a const. As the > > > basic rte_lpm_lookup() performs the same function, it should also do > > > that. > > > > > > As this function is inline, no API/ABI change happens. > > > > It is an API change and should be noted in the release notes. > > > > > static inline int > > > -rte_lpm_lookup(struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) > > > +rte_lpm_lookup(const struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop) > > > While I've no particular objection to it appearing in the RN doc, I wonder > whether it really counts as an API change. I can't see any practical > difference that this change would make to the end user - no source code > needs updating for example. Yes you're right, we can skip the release notes here. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-06-03 9:23 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-06-01 11:15 [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Stanislaw Kardach 2022-06-01 11:15 ` [PATCH v4 2/2] lpm: add a scalar version of lookupx4 function Stanislaw Kardach 2022-06-01 11:52 ` Medvedkin, Vladimir 2022-06-03 9:23 ` Thomas Monjalon 2022-06-02 20:52 ` [PATCH v4 1/2] lpm: add const to lpm arg of rte_lpm_lookup Thomas Monjalon 2022-06-03 7:29 ` Bruce Richardson 2022-06-03 7:43 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).