[v10,5/5] event/opdl: use new API to save cycles on aarch64
Checks
Commit Message
Use the new API to wait in low power state instead of continuous
polling 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: Jerin Jacob <jerinj@marvell.com>
---
drivers/event/opdl/Makefile | 1 +
drivers/event/opdl/meson.build | 1 +
drivers/event/opdl/opdl_ring.c | 5 ++---
3 files changed, 4 insertions(+), 3 deletions(-)
@@ -9,6 +9,7 @@ LIB = librte_pmd_opdl_event.a
# build flags
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
# for older GCC versions, allow us to initialize an event using
# designated initializers.
ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
+allow_experimental_apis = true
sources = files(
'opdl_evdev.c',
'opdl_evdev_init.c',
@@ -16,6 +16,7 @@
#include <rte_memcpy.h>
#include <rte_memory.h>
#include <rte_memzone.h>
+#include <rte_atomic.h>
#include "opdl_ring.h"
#include "opdl_log.h"
@@ -474,9 +475,7 @@ opdl_ring_input_multithread(struct opdl_ring *t, const void *entries,
/* If another thread started inputting before this one, but hasn't
* finished, we need to wait for it to complete to update the tail.
*/
- while (unlikely(__atomic_load_n(&s->shared.tail, __ATOMIC_ACQUIRE) !=
- old_head))
- rte_pause();
+ rte_wait_until_equal_32(&s->shared.tail, old_head, __ATOMIC_ACQUIRE);
__atomic_store_n(&s->shared.tail, old_head + num_entries,
__ATOMIC_RELEASE);