Message ID | SN1PR0701MB1983D90562E2FCFB71B6F0888C3B0@SN1PR0701MB1983.namprd07.prod.outlook.com |
---|---|
State | New |
Headers | show |
If consensus is that this is a net plus then I have no objections to including this sort of capability. We should make use of it internally, however if that's what we want to promote. On Sun, Oct 18, 2015 at 5:10 AM, Jacob, Jerin < Jerin.Jacob@caviumnetworks.com> wrote: > +1 > > > Unlike embedded platform, Sometimes Enterprise platforms may not > have luxury to run the apps built on its own toolchain. > > For instance, A armv8 Linaro tool chain can build the app and run on any > armv8 compatible SoC's but > > it may not high optimized for specific platform as armv8 specification > there lot of IMPLEMENTATION defined feature like > > prefetch etc. > > > > > Jerin > > > ------------------------------ > *From:* lng-odp <lng-odp-bounces@lists.linaro.org> on behalf of > Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com> > *Sent:* Friday, October 16, 2015 5:52 PM > *To:* EXT Bill Fischofer > > *Cc:* LNG ODP Mailman List > *Subject:* Re: [lng-odp] [API-NEXT PATCH] api: clib: added standard c > library api > > > If that’s the case an platform can implement these without extra effort. > But when that’s not the case, an implementation can use whatever special > instructions, vector engines or DMA HW it has to speed up these calls. See > e.g. rte_memcpy in DPDK - it’s not just plain memcpy wrapper (they must > have had a reason for optimizing it). > > > > -Petri > > > > *From:* EXT Bill Fischofer [mailto:bill.fischofer@linaro.org] > *Sent:* Friday, October 16, 2015 3:17 PM > *To:* Savolainen, Petri (Nokia - FI/Espoo) > *Cc:* LNG ODP Mailman List > *Subject:* Re: [lng-odp] [API-NEXT PATCH] api: clib: added standard c > library api > > > > Why would you not expect a platform to provide an optimized implementation > of these stdlib functions itself? GCC, in particular, seems to do a good > job of this for most platforms. > > > > On Fri, Oct 16, 2015 at 7:13 AM, Petri Savolainen < > petri.savolainen@nokia.com> wrote: > > Some C library calls are often used in data plane code. This > API enables possibility to HW optimized implementation of those. > Added first memcpy and memset. > > Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> > --- > include/odp.h | 1 + > include/odp/api/std_clib.h | 64 > +++++++++++++++++++++++++++ > platform/linux-generic/Makefile.am | 2 + > platform/linux-generic/include/odp/std_clib.h | 30 +++++++++++++ > 4 files changed, 97 insertions(+) > create mode 100644 include/odp/api/std_clib.h > create mode 100644 platform/linux-generic/include/odp/std_clib.h > > diff --git a/include/odp.h b/include/odp.h > index 825c7e1..f2cd2d3 100644 > --- a/include/odp.h > +++ b/include/odp.h > @@ -56,6 +56,7 @@ extern "C" { > #include <odp/thrmask.h> > #include <odp/spinlock_recursive.h> > #include <odp/rwlock_recursive.h> > +#include <odp/std_clib.h> > > #ifdef __cplusplus > } > diff --git a/include/odp/api/std_clib.h b/include/odp/api/std_clib.h > new file mode 100644 > index 0000000..2119ec4 > --- /dev/null > +++ b/include/odp/api/std_clib.h > @@ -0,0 +1,64 @@ > +/* Copyright (c) 2015, Linaro Limited > + * All rights reserved. > + * > + * SPDX-License-Identifier: BSD-3-Clause > + */ > + > +/** > + * @file > + * > + * ODP version of often used C library calls > + */ > + > +#ifndef ODP_API_STD_CLIB_H_ > +#define ODP_API_STD_CLIB_H_ > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/** > + * @defgroup odp_std_clib ODP STD CLIB > + * @details > + * ODP version of often used C library calls > + * @{ > + */ > + > +/** > + * Memcpy > + * > + * ODP version of C library memcpy function. It copies 'num' bytes from > source > + * to destination address. Source and destination memory blocks must not > + * overlap. > + * > + * @param dst Pointer to destination memory block > + * @param src Pointer to source memory block > + * @param num Number of bytes to copy > + * > + * @return 'dst' address > + */ > +void *odp_memcpy(void *dst, const void *src, size_t num); > + > +/** > + * Memset > + * > + * ODP version of C library memset function. It sets 'value' to first > 'num' > + * bytes of memory block pointed by 'ptr'. > + * > + * @param ptr Pointer to the memory block > + * @param value Value to be set > + * @param num Number of bytes to set > + * > + * @return 'ptr' address > + */ > +void *odp_memset(void *ptr, int value, size_t num); > + > +/** > + * @} > + */ > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif > diff --git a/platform/linux-generic/Makefile.am > b/platform/linux-generic/Makefile.am > index 85c976d..fc202cc 100644 > --- a/platform/linux-generic/Makefile.am > +++ b/platform/linux-generic/Makefile.am > @@ -41,6 +41,7 @@ odpinclude_HEADERS = \ > $(srcdir)/include/odp/shared_memory.h \ > $(srcdir)/include/odp/spinlock.h \ > $(srcdir)/include/odp/spinlock_recursive.h \ > + $(srcdir)/include/odp/std_clib.h \ > $(srcdir)/include/odp/std_types.h \ > $(srcdir)/include/odp/sync.h \ > $(srcdir)/include/odp/system_info.h \ > @@ -108,6 +109,7 @@ odpapiinclude_HEADERS = \ > $(top_srcdir)/include/odp/api/shared_memory.h \ > $(top_srcdir)/include/odp/api/spinlock.h \ > $(top_srcdir)/include/odp/api/spinlock_recursive.h \ > + $(top_srcdir)/include/odp/api/std_clib.h \ > $(top_srcdir)/include/odp/api/std_types.h \ > $(top_srcdir)/include/odp/api/sync.h \ > $(top_srcdir)/include/odp/api/system_info.h \ > diff --git a/platform/linux-generic/include/odp/std_clib.h > b/platform/linux-generic/include/odp/std_clib.h > new file mode 100644 > index 0000000..c939c48 > --- /dev/null > +++ b/platform/linux-generic/include/odp/std_clib.h > @@ -0,0 +1,30 @@ > +/* Copyright (c) 2015, Linaro Limited > + * All rights reserved. > + * > + * SPDX-License-Identifier: BSD-3-Clause > + */ > + > +#ifndef ODP_PLAT_STD_CLIB_H_ > +#define ODP_PLAT_STD_CLIB_H_ > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#include <odp/api/std_types.h> > + > +static inline void *odp_memcpy(void *dst, const void *src, size_t num) > +{ > + return memcpy(dst, src, num); > +} > + > +static inline void *odp_memset(void *ptr, int value, size_t num) > +{ > + return memset(ptr, value, num); > +} > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif > -- > 2.6.0 > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp > > >
diff --git a/include/odp.h b/include/odp.h index 825c7e1..f2cd2d3 100644 --- a/include/odp.h +++ b/include/odp.h @@ -56,6 +56,7 @@ extern "C" { #include <odp/thrmask.h> #include <odp/spinlock_recursive.h> #include <odp/rwlock_recursive.h> +#include <odp/std_clib.h> #ifdef __cplusplus } diff --git a/include/odp/api/std_clib.h b/include/odp/api/std_clib.h new file mode 100644 index 0000000..2119ec4 --- /dev/null +++ b/include/odp/api/std_clib.h @@ -0,0 +1,64 @@ +/* Copyright (c) 2015, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP version of often used C library calls + */ + +#ifndef ODP_API_STD_CLIB_H_ +#define ODP_API_STD_CLIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup odp_std_clib ODP STD CLIB + * @details + * ODP version of often used C library calls + * @{ + */ + +/** + * Memcpy + * + * ODP version of C library memcpy function. It copies 'num' bytes from source + * to destination address. Source and destination memory blocks must not + * overlap. + * + * @param dst Pointer to destination memory block + * @param src Pointer to source memory block + * @param num Number of bytes to copy + * + * @return 'dst' address + */ +void *odp_memcpy(void *dst, const void *src, size_t num); + +/** + * Memset + * + * ODP version of C library memset function. It sets 'value' to first 'num' + * bytes of memory block pointed by 'ptr'. + * + * @param ptr Pointer to the memory block + * @param value Value to be set + * @param num Number of bytes to set + * + * @return 'ptr' address + */ +void *odp_memset(void *ptr, int value, size_t num); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 85c976d..fc202cc 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -41,6 +41,7 @@ odpinclude_HEADERS = \ $(srcdir)/include/odp/shared_memory.h \ $(srcdir)/include/odp/spinlock.h \ $(srcdir)/include/odp/spinlock_recursive.h \ + $(srcdir)/include/odp/std_clib.h \ $(srcdir)/include/odp/std_types.h \ $(srcdir)/include/odp/sync.h \ $(srcdir)/include/odp/system_info.h \ @@ -108,6 +109,7 @@ odpapiinclude_HEADERS = \ $(top_srcdir)/include/odp/api/shared_memory.h \ $(top_srcdir)/include/odp/api/spinlock.h \ $(top_srcdir)/include/odp/api/spinlock_recursive.h \ + $(top_srcdir)/include/odp/api/std_clib.h \ $(top_srcdir)/include/odp/api/std_types.h \ $(top_srcdir)/include/odp/api/sync.h \ $(top_srcdir)/include/odp/api/system_info.h \ diff --git a/platform/linux-generic/include/odp/std_clib.h b/platform/linux-generic/include/odp/std_clib.h new file mode 100644 index 0000000..c939c48 --- /dev/null +++ b/platform/linux-generic/include/odp/std_clib.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2015, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_STD_CLIB_H_ +#define ODP_PLAT_STD_CLIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> + +static inline void *odp_memcpy(void *dst, const void *src, size_t num) +{ + return memcpy(dst, src, num); +} + +static inline void *odp_memset(void *ptr, int value, size_t num) +{ + return memset(ptr, value, num); +} + +#ifdef __cplusplus +} +#endif + +#endif