[dpdk-dev] arm64: change rte_memcpy to inline function

Message ID 1462869064-9423-1-git-send-email-jianbo.liu@linaro.org (mailing list archive)
State Changes Requested, archived
Delegated to: Thomas Monjalon
Headers

Commit Message

Jianbo Liu May 10, 2016, 8:31 a.m. UTC
  Other APP may call rte_memcpy by function pointer,
so change it to an inline function.

Signed-off-by: Jianbo Liu <jianbo.liu@linaro.org>
---
 lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
  

Comments

Jerin Jacob May 13, 2016, 9:12 a.m. UTC | #1
On Tue, May 10, 2016 at 02:01:04PM +0530, Jianbo Liu wrote:
> Other APP may call rte_memcpy by function pointer,

Instead of "Other APP" may be better to use DPDK application

> so change it to an inline function.
> 
> Signed-off-by: Jianbo Liu <jianbo.liu@linaro.org>

Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>

> ---
>  lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> index 917cdc1..3abe7cd 100644
> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> @@ -78,7 +78,11 @@ rte_mov256(uint8_t *dst, const uint8_t *src)
>  	memcpy(dst, src, 256);
>  }
>  
> -#define rte_memcpy(d, s, n)	memcpy((d), (s), (n))
> +static inline void *
> +rte_memcpy(void *dst, const void *src, size_t n)
> +{
> +	return memcpy(dst, src, n);
> +}
>  
>  static inline void *
>  rte_memcpy_func(void *dst, const void *src, size_t n)
> -- 
> 2.4.11
>
  
Thomas Monjalon May 13, 2016, 3:49 p.m. UTC | #2
2016-05-10 14:01, Jianbo Liu:
> Other APP may call rte_memcpy by function pointer,
> so change it to an inline function.

Any example in mind?

> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> -#define rte_memcpy(d, s, n)	memcpy((d), (s), (n))
> +static inline void *
> +rte_memcpy(void *dst, const void *src, size_t n)
> +{
> +	return memcpy(dst, src, n);
> +}

It has no sense if other archs (arm32, ppc64, tile) are not updated.
  
Jianbo Liu May 19, 2016, 1:48 p.m. UTC | #3
On 13 May 2016 at 23:49, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> 2016-05-10 14:01, Jianbo Liu:
>> Other APP may call rte_memcpy by function pointer,
>> so change it to an inline function.
>
> Any example in mind?
>
It's for ODP-DPDK.
>> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
>> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
>> -#define rte_memcpy(d, s, n)  memcpy((d), (s), (n))
>> +static inline void *
>> +rte_memcpy(void *dst, const void *src, size_t n)
>> +{
>> +     return memcpy(dst, src, n);
>> +}
>
> It has no sense if other archs (arm32, ppc64, tile) are not updated.
>
But it also an inline function on x86.
Sorry for my late reply...
  
Thomas Monjalon May 19, 2016, 3:56 p.m. UTC | #4
2016-05-19 21:48, Jianbo Liu:
> On 13 May 2016 at 23:49, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> > 2016-05-10 14:01, Jianbo Liu:
> >> Other APP may call rte_memcpy by function pointer,
> >> so change it to an inline function.
> >
> > Any example in mind?
> >
> It's for ODP-DPDK.

Given that ODP is open (dataplane), you should also consider ppc64 and tile.

> >> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> >> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> >> -#define rte_memcpy(d, s, n)  memcpy((d), (s), (n))
> >> +static inline void *
> >> +rte_memcpy(void *dst, const void *src, size_t n)
> >> +{
> >> +     return memcpy(dst, src, n);
> >> +}
> >
> > It has no sense if other archs (arm32, ppc64, tile) are not updated.
> >
> But it also an inline function on x86.

In x86, it was implemented as a function because there is some code.
If you want to make sure it is always a function, even in the case
of just calling memcpy from libc, you should put a doxygen comment in
the generic part and adapt every archs.
  
Thomas Monjalon June 17, 2016, 10:30 a.m. UTC | #5
2016-05-19 17:56, Thomas Monjalon:
> 2016-05-19 21:48, Jianbo Liu:
> > On 13 May 2016 at 23:49, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> > > 2016-05-10 14:01, Jianbo Liu:
> > >> Other APP may call rte_memcpy by function pointer,
> > >> so change it to an inline function.
> > >
> > > Any example in mind?
> > >
> > It's for ODP-DPDK.
> 
> Given that ODP is open (dataplane), you should also consider ppc64 and tile.
> 
> > >> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> > >> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
> > >> -#define rte_memcpy(d, s, n)  memcpy((d), (s), (n))
> > >> +static inline void *
> > >> +rte_memcpy(void *dst, const void *src, size_t n)
> > >> +{
> > >> +     return memcpy(dst, src, n);
> > >> +}
> > >
> > > It has no sense if other archs (arm32, ppc64, tile) are not updated.
> > >
> > But it also an inline function on x86.
> 
> In x86, it was implemented as a function because there is some code.
> If you want to make sure it is always a function, even in the case
> of just calling memcpy from libc, you should put a doxygen comment in
> the generic part and adapt every archs.

no news?
a v2 would be welcome
  
Jianbo Liu June 22, 2016, 8:10 a.m. UTC | #6
On 17 June 2016 at 18:30, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> 2016-05-19 17:56, Thomas Monjalon:
>> 2016-05-19 21:48, Jianbo Liu:
>> > On 13 May 2016 at 23:49, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
>> > > 2016-05-10 14:01, Jianbo Liu:
>> > >> Other APP may call rte_memcpy by function pointer,
>> > >> so change it to an inline function.
>> > >
>> > > Any example in mind?
>> > >
>> > It's for ODP-DPDK.
>>
>> Given that ODP is open (dataplane), you should also consider ppc64 and tile.
>>
>> > >> --- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
>> > >> +++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
>> > >> -#define rte_memcpy(d, s, n)  memcpy((d), (s), (n))
>> > >> +static inline void *
>> > >> +rte_memcpy(void *dst, const void *src, size_t n)
>> > >> +{
>> > >> +     return memcpy(dst, src, n);
>> > >> +}
>> > >
>> > > It has no sense if other archs (arm32, ppc64, tile) are not updated.
>> > >
>> > But it also an inline function on x86.
>>
>> In x86, it was implemented as a function because there is some code.
>> If you want to make sure it is always a function, even in the case
>> of just calling memcpy from libc, you should put a doxygen comment in
>> the generic part and adapt every archs.
>
> no news?
> a v2 would be welcome

Hi Thomas,
Please close it, since there is already a solution to this issue in odp-dpdk.

Thanks!
Jianbo
  

Patch

diff --git a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
index 917cdc1..3abe7cd 100644
--- a/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
+++ b/lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h
@@ -78,7 +78,11 @@  rte_mov256(uint8_t *dst, const uint8_t *src)
 	memcpy(dst, src, 256);
 }
 
-#define rte_memcpy(d, s, n)	memcpy((d), (s), (n))
+static inline void *
+rte_memcpy(void *dst, const void *src, size_t n)
+{
+	return memcpy(dst, src, n);
+}
 
 static inline void *
 rte_memcpy_func(void *dst, const void *src, size_t n)