DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Gavin Hu (Arm Technology China)" <Gavin.Hu@arm.com>
To: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: nd <nd@arm.com>, "thomas@monjalon.net" <thomas@monjalon.net>,
	"stephen@networkplumber.org" <stephen@networkplumber.org>,
	"hemant.agrawal@nxp.com" <hemant.agrawal@nxp.com>,
	"jerinj@marvell.com" <jerinj@marvell.com>,
	"pbhagavatula@marvell.com" <pbhagavatula@marvell.com>,
	Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>,
	"Ruifeng Wang (Arm Technology China)" <Ruifeng.Wang@arm.com>,
	"Phil Yang (Arm Technology China)" <Phil.Yang@arm.com>,
	Steve Capper <Steve.Capper@arm.com>, nd <nd@arm.com>,
	nd <nd@arm.com>
Subject: Re: [dpdk-dev] [PATCH v7 2/7] eal: add the APIs to wait until equal
Date: Wed, 23 Oct 2019 16:29:41 +0000	[thread overview]
Message-ID: <AM0PR08MB5363F9D1BA158B66B803EA068F6B0@AM0PR08MB5363.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <AM0PR08MB5363A42CA2FE213945F761EF8F6B0@AM0PR08MB5363.eurprd08.prod.outlook.com>

Hi Konstantin,

> -----Original Message-----
> From: Gavin Hu (Arm Technology China)
> Sent: Thursday, October 24, 2019 12:20 AM
> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; dev@dpdk.org
> Cc: nd <nd@arm.com>; thomas@monjalon.net;
> stephen@networkplumber.org; hemant.agrawal@nxp.com;
> jerinj@marvell.com; pbhagavatula@marvell.com; Honnappa Nagarahalli
> <Honnappa.Nagarahalli@arm.com>; Ruifeng Wang (Arm Technology China)
> <Ruifeng.Wang@arm.com>; Phil Yang (Arm Technology China)
> <Phil.Yang@arm.com>; Steve Capper <Steve.Capper@arm.com>; nd
> <nd@arm.com>
> Subject: RE: [dpdk-dev] [PATCH v7 2/7] eal: add the APIs to wait until equal
> 
> Hi Konstantin,
> 
> > -----Original Message-----
> > From: Ananyev, Konstantin <konstantin.ananyev@intel.com>
> > Sent: Friday, October 18, 2019 12:44 AM
> > To: Gavin Hu (Arm Technology China) <Gavin.Hu@arm.com>;
> > dev@dpdk.org
> > Cc: nd <nd@arm.com>; thomas@monjalon.net;
> > stephen@networkplumber.org; hemant.agrawal@nxp.com;
> > jerinj@marvell.com; pbhagavatula@marvell.com; Honnappa Nagarahalli
> > <Honnappa.Nagarahalli@arm.com>; Ruifeng Wang (Arm Technology
> China)
> > <Ruifeng.Wang@arm.com>; Phil Yang (Arm Technology China)
> > <Phil.Yang@arm.com>; Steve Capper <Steve.Capper@arm.com>
> > Subject: RE: [dpdk-dev] [PATCH v7 2/7] eal: add the APIs to wait until equal
> >
> >
> > >
> > > Hi Gavin,
> > >
> > > >
> > > > The rte_wait_until_equal_xx APIs abstract the functionality of
> > > > 'polling for a memory location to become equal to a given value'.
> > > >
> > > > Add the RTE_ARM_USE_WFE configuration entry for aarch64, disabled
> > > > by default. When it is enabled, the above APIs will call WFE instruction
> > > > to save CPU cycles and power.
> > > >
> > > > Signed-off-by: Gavin Hu <gavin.hu@arm.com>
> > > > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> > > > Reviewed-by: Steve Capper <steve.capper@arm.com>
> > > > Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
> > > > Reviewed-by: Honnappa Nagarahalli
> <honnappa.nagarahalli@arm.com>
> > > > Reviewed-by: Phil Yang <phil.yang@arm.com>
> > > > Acked-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > > ---
> > > >  config/arm/meson.build                             |   1 +
> > > >  config/common_base                                 |   5 +
> > > >  .../common/include/arch/arm/rte_pause_64.h         |  30 ++++++
> > > >  lib/librte_eal/common/include/generic/rte_pause.h  | 106
> > +++++++++++++++++++++
> > > >  4 files changed, 142 insertions(+)
> > > >
> > > > diff --git a/config/arm/meson.build b/config/arm/meson.build
> > > > index 979018e..b4b4cac 100644
> > > > --- a/config/arm/meson.build
> > > > +++ b/config/arm/meson.build
> > > > @@ -26,6 +26,7 @@ flags_common_default = [
> > > >  	['RTE_LIBRTE_AVP_PMD', false],
> > > >
> > > >  	['RTE_SCHED_VECTOR', false],
> > > > +	['RTE_ARM_USE_WFE', false],
> > > >  ]
> > > >
> > > >  flags_generic = [
> > > > diff --git a/config/common_base b/config/common_base
> > > > index 8ef75c2..8861713 100644
> > > > --- a/config/common_base
> > > > +++ b/config/common_base
> > > > @@ -111,6 +111,11 @@ CONFIG_RTE_MAX_VFIO_CONTAINERS=64
> > > >  CONFIG_RTE_MALLOC_DEBUG=n
> > > >  CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n
> > > >  CONFIG_RTE_USE_LIBBSD=n
> > > > +# Use WFE instructions to implement the rte_wait_for_equal_xxx APIs,
> > > > +# calling these APIs put the cores in low power state while waiting
> > > > +# for the memory address to become equal to the expected value.
> > > > +# This is supported only by aarch64.
> > > > +CONFIG_RTE_ARM_USE_WFE=n
> > > >
> > > >  #
> > > >  # Recognize/ignore the AVX/AVX512 CPU flags for performance/power
> > testing.
> > > > diff --git a/lib/librte_eal/common/include/arch/arm/rte_pause_64.h
> > b/lib/librte_eal/common/include/arch/arm/rte_pause_64.h
> > > > index 93895d3..dabde17 100644
> > > > --- a/lib/librte_eal/common/include/arch/arm/rte_pause_64.h
> > > > +++ b/lib/librte_eal/common/include/arch/arm/rte_pause_64.h
> > > > @@ -1,5 +1,6 @@
> > > >  /* SPDX-License-Identifier: BSD-3-Clause
> > > >   * Copyright(c) 2017 Cavium, Inc
> > > > + * Copyright(c) 2019 Arm Limited
> > > >   */
> > > >
> > > >  #ifndef _RTE_PAUSE_ARM64_H_
> > > > @@ -17,6 +18,35 @@ static inline void rte_pause(void)
> > > >  	asm volatile("yield" ::: "memory");
> > > >  }
> > > >
> > > > +#ifdef RTE_ARM_USE_WFE
> > > > +#define __WAIT_UNTIL_EQUAL(name, asm_op, wide, type) \
> > > > +static __rte_always_inline void \
> > > > +rte_wait_until_equal_##name(volatile type * addr, type expected) \
> > > > +{ \
> > > > +	type tmp; \
> > > > +	asm volatile( \
> > > > +		#asm_op " %" #wide "[tmp], %[addr]\n" \
> > > > +		"cmp	%" #wide "[tmp], %" #wide "[expected]\n" \
> > > > +		"b.eq	2f\n" \
> > > > +		"sevl\n" \
> > > > +		"1:	wfe\n" \
> > > > +		#asm_op " %" #wide "[tmp], %[addr]\n" \
> > > > +		"cmp	%" #wide "[tmp], %" #wide "[expected]\n" \
> > > > +		"bne	1b\n" \
> > > > +		"2:\n" \
> > > > +		: [tmp] "=&r" (tmp) \
> > > > +		: [addr] "Q"(*addr), [expected] "r"(expected) \
> > > > +		: "cc", "memory"); \
> > > > +}
> >
> > One more thought:
> > Why do you need to write asm code for the whole procedure?
> > Why not to do like linux kernel:
> > define wfe() and sev() macros and use them inside normal C code?
> >
> > #define sev()		asm volatile("sev" : : : "memory")
> > #define wfe()		asm volatile("wfe" : : : "memory")
> >
> > Then:
> > rte_wait_until_equal_32(volatile uint32_t *addr, uint32_t expected, int
> > memorder)
> > {
> >      if (__atomic_load_n(addr, memorder) != expected) {
> >          sev();
> >          do {
> >              wfe();
> >          } while ((__atomic_load_n(addr, memorder) != expected);
> >      }
> > }
> >
> > ?
> A really good suggestion, I made corresponding changes to v8 already, but it
> missed a armv8 specific feature after internal discussion.
> We call wfe to wait/sleep on the 'monitored' address, it will be waken up
> upon someone write to the monitor address, so before wfe, we have to call
> load-exclusive instruction to 'monitor'.
> __atomic_load_n - disassembled to "ldr" does not do so. We have to use
> "ldxrh" for relaxed mem ordering and "ldaxrh" for acquire ordering, in
> example of 16-bit.
> 
> Let me re-think coming back to the full assembly procedure or implementing
> a 'load-exclusive' function. What do you think?
> /Gavin
Forgot to mention, kernel uses wfe() without preceding load-exclusive instructions because:
1) it replies on the timer, to wake up, i.e. __delay()
2) explicit calling sev to send wake events, for all kinds of locks
3) IPI instructions.

Our patches can't count on these events, due to of lack of these events or performance  impact. 
/Gavin
> 
> > > > +/* Wait for *addr to be updated with expected value */
> > > > +__WAIT_UNTIL_EQUAL(relaxed_16, ldxrh, w, uint16_t)
> > > > +__WAIT_UNTIL_EQUAL(acquire_16, ldaxrh, w, uint16_t)
> > > > +__WAIT_UNTIL_EQUAL(relaxed_32, ldxr, w, uint32_t)
> > > > +__WAIT_UNTIL_EQUAL(acquire_32, ldaxr, w, uint32_t)
> > > > +__WAIT_UNTIL_EQUAL(relaxed_64, ldxr, x, uint64_t)
> > > > +__WAIT_UNTIL_EQUAL(acquire_64, ldaxr, x, uint64_t)
> > > > +#endif
> > > > +
> > > >  #ifdef __cplusplus
> > > >  }
> > > >  #endif
> > > > diff --git a/lib/librte_eal/common/include/generic/rte_pause.h
> > b/lib/librte_eal/common/include/generic/rte_pause.h
> > > > index 52bd4db..8906473 100644
> > > > --- a/lib/librte_eal/common/include/generic/rte_pause.h
> > > > +++ b/lib/librte_eal/common/include/generic/rte_pause.h
> > > > @@ -1,5 +1,6 @@
> > > >  /* SPDX-License-Identifier: BSD-3-Clause
> > > >   * Copyright(c) 2017 Cavium, Inc
> > > > + * Copyright(c) 2019 Arm Limited
> > > >   */
> > > >
> > > >  #ifndef _RTE_PAUSE_H_
> > > > @@ -12,6 +13,10 @@
> > > >   *
> > > >   */
> > > >
> > > > +#include <stdint.h>
> > > > +#include <rte_common.h>
> > > > +#include <rte_atomic.h>
> > > > +
> > > >  /**
> > > >   * Pause CPU execution for a short while
> > > >   *
> > > > @@ -20,4 +25,105 @@
> > > >   */
> > > >  static inline void rte_pause(void);
> > > >
> > > > +/**
> > > > + * Wait for *addr to be updated with a 16-bit expected value, with a
> > relaxed
> > > > + * memory ordering model meaning the loads around this API can be
> > reordered.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 16-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_relaxed_16(volatile uint16_t *addr, uint16_t
> > expected);
> > > > +
> > > > +/**
> > > > + * Wait for *addr to be updated with a 32-bit expected value, with a
> > relaxed
> > > > + * memory ordering model meaning the loads around this API can be
> > reordered.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 32-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_relaxed_32(volatile uint32_t *addr, uint32_t
> > expected);
> > > > +
> > > > +/**
> > > > + * Wait for *addr to be updated with a 64-bit expected value, with a
> > relaxed
> > > > + * memory ordering model meaning the loads around this API can be
> > reordered.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 64-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_relaxed_64(volatile uint64_t *addr, uint64_t
> > expected);
> > > > +
> > > > +/**
> > > > + * Wait for *addr to be updated with a 16-bit expected value, with an
> > acquire
> > > > + * memory ordering model meaning the loads after this API can't be
> > observed
> > > > + * before this API.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 16-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_acquire_16(volatile uint16_t *addr, uint16_t
> > expected);
> > > > +
> > > > +/**
> > > > + * Wait for *addr to be updated with a 32-bit expected value, with an
> > acquire
> > > > + * memory ordering model meaning the loads after this API can't be
> > observed
> > > > + * before this API.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 32-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_acquire_32(volatile uint32_t *addr, uint32_t
> > expected);
> > >
> > > LGTM in general.
> > > One stylish thing: wouldn't it be better to have an API like that:
> > > rte_wait_until_equal_acquire_X(addr, expected, memory_order)
> > > ?
> > >
> > > I.E. - pass memorder as parameter, not to incorporate it into function
> > name?
> > > Less functions, plus user can specify order himself.
> > > Plus looks similar to C11 atomic instrincts.
> > >
> > >
> > > > +
> > > > +/**
> > > > + * Wait for *addr to be updated with a 64-bit expected value, with an
> > acquire
> > > > + * memory ordering model meaning the loads after this API can't be
> > observed
> > > > + * before this API.
> > > > + *
> > > > + * @param addr
> > > > + *  A pointer to the memory location.
> > > > + * @param expected
> > > > + *  A 64-bit expected value to be in the memory location.
> > > > + */
> > > > +__rte_always_inline
> > > > +static void
> > > > +rte_wait_until_equal_acquire_64(volatile uint64_t *addr, uint64_t
> > expected);
> > > > +
> > > > +#if !defined(RTE_ARM_USE_WFE)
> > > > +#define __WAIT_UNTIL_EQUAL(op_name, size, type, memorder) \
> > > > +__rte_always_inline \
> > > > +static void	\
> > > > +rte_wait_until_equal_##op_name##_##size(volatile type *addr, \
> > > > +	type expected) \
> > > > +{ \
> > > > +	while (__atomic_load_n(addr, memorder) != expected) \
> > > > +		rte_pause(); \
> > > > +}
> > > > +
> > > > +/* Wait for *addr to be updated with expected value */
> > > > +__WAIT_UNTIL_EQUAL(relaxed, 16, uint16_t, __ATOMIC_RELAXED)
> > > > +__WAIT_UNTIL_EQUAL(acquire, 16, uint16_t, __ATOMIC_ACQUIRE)
> > > > +__WAIT_UNTIL_EQUAL(relaxed, 32, uint32_t, __ATOMIC_RELAXED)
> > > > +__WAIT_UNTIL_EQUAL(acquire, 32, uint32_t, __ATOMIC_ACQUIRE)
> > > > +__WAIT_UNTIL_EQUAL(relaxed, 64, uint64_t, __ATOMIC_RELAXED)
> > > > +__WAIT_UNTIL_EQUAL(acquire, 64, uint64_t, __ATOMIC_ACQUIRE)
> > > > +#endif /* RTE_ARM_USE_WFE */
> > > > +
> > > >  #endif /* _RTE_PAUSE_H_ */
> > > > --
> > > > 2.7.4


  reply	other threads:[~2019-10-23 16:29 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-30 16:21 [dpdk-dev] [RFC 0/5] use WFE for locks and ring on aarch64 Gavin Hu
2019-06-30 16:21 ` [dpdk-dev] [RFC 1/5] eal: add the APIs to wait until equal Gavin Hu
2019-06-30 20:27   ` Stephen Hemminger
2019-07-01  7:16     ` Gavin Hu (Arm Technology China)
2019-07-01  7:43       ` Thomas Monjalon
2019-07-02 14:07         ` Gavin Hu (Arm Technology China)
2019-07-01  9:58   ` Pavan Nikhilesh Bhagavatula
2019-07-02 14:08     ` Gavin Hu (Arm Technology China)
2019-06-30 16:21 ` [dpdk-dev] [RFC 2/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-06-30 16:21 ` [dpdk-dev] [RFC 3/5] ring: use wfe to wait for ring tail update " Gavin Hu
2019-06-30 16:21 ` [dpdk-dev] [RFC 4/5] spinlock: use wfe to reduce contention " Gavin Hu
2019-06-30 16:21 ` [dpdk-dev] [RFC 5/5] config: add WFE config entry for aarch64 Gavin Hu
2019-06-30 20:29 ` [dpdk-dev] [RFC 0/5] use WFE for locks and ring on aarch64 Stephen Hemminger
2019-07-01  9:12   ` Gavin Hu (Arm Technology China)
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 " Gavin Hu
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 1/5] eal: add the APIs to wait until equal Gavin Hu
2019-07-20  6:46   ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 2/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-07-20  6:57   ` Pavan Nikhilesh Bhagavatula
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 3/5] ring: use wfe to wait for ring tail update " Gavin Hu
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 4/5] spinlock: use wfe to reduce contention " Gavin Hu
2019-07-20  6:59   ` Pavan Nikhilesh Bhagavatula
2019-07-03  8:58 ` [dpdk-dev] [RFC v2 5/5] config: add WFE config entry for aarch64 Gavin Hu
2019-07-20  7:03   ` Pavan Nikhilesh Bhagavatula
2019-07-23 15:47     ` Gavin Hu (Arm Technology China)
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 0/5] use WFE for locks and ring on aarch64 Gavin Hu
2019-07-23 19:15   ` Honnappa Nagarahalli
2019-07-23 21:27     ` Thomas Monjalon
2019-07-24  2:44       ` Honnappa Nagarahalli
2019-07-24  7:43         ` Thomas Monjalon
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 1/5] eal: add the APIs to wait until equal Gavin Hu
2019-07-24 11:52   ` [dpdk-dev] [EXT] " Jerin Jacob Kollanukkaran
2019-07-24 18:10     ` Gavin Hu (Arm Technology China)
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 2/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 3/5] ring: use wfe to wait for ring tail update " Gavin Hu
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 4/5] spinlock: use wfe to reduce contention " Gavin Hu
2019-07-24 12:17   ` [dpdk-dev] [EXT] " Jerin Jacob Kollanukkaran
2019-07-23 15:43 ` [dpdk-dev] [PATCH v3 5/5] config: add WFE config entry for aarch64 Gavin Hu
2019-07-23 18:05   ` Stephen Hemminger
2019-07-23 19:10     ` Honnappa Nagarahalli
2019-07-24 17:59       ` Gavin Hu (Arm Technology China)
2019-07-24 12:25   ` [dpdk-dev] [EXT] " Jerin Jacob Kollanukkaran
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 0/6] use WFE for locks and ring on aarch64 Gavin Hu
2019-10-16  8:08   ` David Marchand
2019-10-24 20:26     ` David Christensen
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 1/6] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 2/6] eal: add the APIs to wait until equal Gavin Hu
2019-09-11 12:26   ` Jerin Jacob
2019-09-12  8:25     ` Gavin Hu (Arm Technology China)
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 3/6] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 4/6] ring: use wfe to wait for ring tail update " Gavin Hu
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 5/6] spinlock: use wfe to reduce contention " Gavin Hu
     [not found]   ` <CY4PR1801MB1863AF9695BB10930E817D78DEB00@CY4PR1801MB1863.namprd18.prod.outlook.com>
     [not found]     ` <VI1PR08MB5376BEBCC1FD1E03F0B8A8848FB00@VI1PR08MB5376.eurprd08.prod.outlook.com>
2019-09-14 15:21       ` [dpdk-dev] [EXT] " Gavin Hu (Arm Technology China)
2019-08-22  6:12 ` [dpdk-dev] [PATCH v4 6/6] config: add WFE config entry for aarch64 Gavin Hu
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 0/8] use WFE " Gavin Hu
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 1/8] config: add WFE config entry " Gavin Hu
2019-09-12 15:48   ` Jerin Jacob
2019-09-13 16:01     ` Gavin Hu (Arm Technology China)
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 2/8] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 3/8] eal: add the APIs to wait until equal Gavin Hu
2019-09-12 16:11   ` Jerin Jacob
2019-09-13 17:05     ` Gavin Hu (Arm Technology China)
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 4/8] spinlock: use wfe to reduce contention on aarch64 Gavin Hu
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 5/8] ticketlock: use new API " Gavin Hu
2019-09-12 16:14   ` Jerin Jacob
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 6/8] ring: use wfe to wait for ring tail update " Gavin Hu
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 7/8] net/thunderx: use new API to save cycles " Gavin Hu
2019-09-12 16:15   ` Jerin Jacob
2019-09-12 11:24 ` [dpdk-dev] [PATCH v5 8/8] event/opdl: " Gavin Hu
2019-09-12 16:16   ` Jerin Jacob
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 0/7] use WFE for aarch64 Gavin Hu
2019-09-26 13:41   ` Jerin Jacob
2019-09-27  5:45     ` Gavin Hu (Arm Technology China)
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 1/7] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 2/7] eal: add the APIs to wait until equal Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 3/7] spinlock: use wfe to reduce contention on aarch64 Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 4/7] ticketlock: use new API " Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 5/7] ring: use wfe to wait for ring tail update " Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 6/7] net/thunderx: use new API to save cycles " Gavin Hu
2019-09-14 14:59 ` [dpdk-dev] [PATCH v6 7/7] event/opdl: " Gavin Hu
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 0/7] use WFE for aarch64 Gavin Hu
2019-10-17 18:37   ` David Marchand
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 1/7] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-09-27  8:24   ` Hemant Agrawal
2019-10-17 15:06   ` David Marchand
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 2/7] eal: add the APIs to wait until equal Gavin Hu
2019-09-27 11:03   ` Jerin Jacob
2019-10-17 13:14   ` Ananyev, Konstantin
2019-10-21  7:21     ` Gavin Hu (Arm Technology China)
2019-10-17 15:45   ` David Marchand
2019-10-21  7:38     ` Gavin Hu (Arm Technology China)
2019-10-21 19:17       ` David Marchand
2019-10-17 16:44   ` Ananyev, Konstantin
2019-10-23 16:20     ` Gavin Hu (Arm Technology China)
2019-10-23 16:29       ` Gavin Hu (Arm Technology China) [this message]
2019-10-24 10:21         ` Ananyev, Konstantin
2019-10-24 10:52           ` Gavin Hu (Arm Technology China)
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 3/7] spinlock: use wfe to reduce contention on aarch64 Gavin Hu
2019-10-17 18:27   ` David Marchand
2019-10-18  5:45     ` Gavin Hu (Arm Technology China)
2019-10-21  7:27     ` Gavin Hu (Arm Technology China)
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 4/7] ticketlock: use new API " Gavin Hu
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 5/7] ring: use wfe to wait for ring tail update " Gavin Hu
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 6/7] net/thunderx: use new API to save cycles " Gavin Hu
2019-09-27  5:41 ` [dpdk-dev] [PATCH v7 7/7] event/opdl: " Gavin Hu
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 0/6] use WFE for aarch64 Gavin Hu
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 1/6] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-10-21 19:00   ` David Marchand
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 2/6] eal: add the APIs to wait until equal Gavin Hu
2019-10-21 19:19   ` David Marchand
2019-10-22  9:36     ` Ananyev, Konstantin
2019-10-22 10:17       ` David Marchand
2019-10-22 16:05         ` Gavin Hu (Arm Technology China)
2019-10-22 16:03       ` Gavin Hu (Arm Technology China)
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 3/6] spinlock: use wfe to reduce contention on aarch64 Gavin Hu
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 4/6] ticketlock: use new API " Gavin Hu
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 5/6] net/thunderx: use new API to save cycles " Gavin Hu
2019-10-21  9:47 ` [dpdk-dev] [PATCH v8 6/6] event/opdl: " Gavin Hu
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 0/5] use WFE for aarch64 Gavin Hu
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 1/5] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 2/5] eal: add the APIs to wait until equal Gavin Hu
2019-10-24 13:52   ` Ananyev, Konstantin
2019-10-24 13:57     ` Ananyev, Konstantin
2019-10-24 17:00     ` Gavin Hu (Arm Technology China)
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 3/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 4/5] net/thunderx: use new API to save cycles " Gavin Hu
2019-10-24 10:42 ` [dpdk-dev] [PATCH v9 5/5] event/opdl: " Gavin Hu
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 0/5] use WFE for aarch64 Gavin Hu
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 1/5] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 2/5] eal: add the APIs to wait until equal Gavin Hu
2019-10-25 17:27   ` Ananyev, Konstantin
2019-10-27 13:03     ` Gavin Hu (Arm Technology China)
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 3/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 4/5] net/thunderx: use new API to save cycles " Gavin Hu
2019-10-25 15:39 ` [dpdk-dev] [PATCH v10 5/5] event/opdl: " Gavin Hu
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 0/5] use WFE for aarch64 Gavin Hu
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 1/5] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 2/5] eal: add the APIs to wait until equal Gavin Hu
2019-10-27 20:49   ` David Marchand
2019-10-28  5:08     ` Gavin Hu (Arm Technology China)
2019-10-27 22:19   ` Ananyev, Konstantin
2019-10-28  5:04     ` Gavin Hu (Arm Technology China)
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 3/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 4/5] net/thunderx: use new API to save cycles " Gavin Hu
2019-10-27 12:52 ` [dpdk-dev] [PATCH v11 5/5] event/opdl: " Gavin Hu
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 0/5] use WFE for aarch64 Gavin Hu
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 1/5] bus/fslmc: fix the conflicting dmb function Gavin Hu
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 2/5] eal: add the APIs to wait until equal Gavin Hu
2019-11-07 15:03   ` Ananyev, Konstantin
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 3/5] ticketlock: use new API to reduce contention on aarch64 Gavin Hu
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 4/5] net/thunderx: use new API to save cycles " Gavin Hu
2019-11-04 15:32 ` [dpdk-dev] [PATCH v12 5/5] event/opdl: " Gavin Hu
2019-11-07 21:35 ` [dpdk-dev] [PATCH v13 0/5] use WFE for aarch64 David Marchand
2019-11-07 21:35   ` [dpdk-dev] [PATCH v13 1/5] bus/fslmc: fix the conflicting dmb function David Marchand
2019-12-10  6:13     ` Honnappa Nagarahalli
2019-11-07 21:35   ` [dpdk-dev] [PATCH v13 2/5] eal: add the APIs to wait until equal David Marchand
2019-11-08 16:38     ` Ananyev, Konstantin
2019-11-08 17:00       ` Thomas Monjalon
2019-11-08 18:36         ` Ananyev, Konstantin
2019-11-11  5:11           ` Jerin Jacob
2019-11-11  5:51             ` Gavin Hu (Arm Technology China)
2019-12-10  7:51               ` Honnappa Nagarahalli
2020-01-16 21:38                 ` David Marchand
2020-01-17  2:46                   ` Gavin Hu
2019-11-07 21:35   ` [dpdk-dev] [PATCH v13 3/5] ticketlock: use new API to reduce contention on aarch64 David Marchand
2019-11-07 21:35   ` [dpdk-dev] [PATCH v13 4/5] net/thunderx: use new API to save cycles " David Marchand
2019-11-07 21:35   ` [dpdk-dev] [PATCH v13 5/5] event/opdl: " David Marchand
2020-01-17 11:15   ` [dpdk-dev] [PATCH v13 0/5] use WFE for aarch64 David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AM0PR08MB5363F9D1BA158B66B803EA068F6B0@AM0PR08MB5363.eurprd08.prod.outlook.com \
    --to=gavin.hu@arm.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=Phil.Yang@arm.com \
    --cc=Ruifeng.Wang@arm.com \
    --cc=Steve.Capper@arm.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerinj@marvell.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=nd@arm.com \
    --cc=pbhagavatula@marvell.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).