[dpdk-dev] [PATCH v2 0/6] Use correct memory ordering in eal functions
Honnappa Nagarahalli
honnappa.nagarahalli at arm.com
Fri Sep 10 01:13:06 CEST 2021
rte_eal_remote_launch and rte_eal_wait_lcore need to provide
correct memory ordering to address the data communication from
main core to worker core.
There are 2 use cases:
1) All the store operations (meant for worker) by main core
should be visible to worker core before the worker core runs the
assigned function
2) All the store operations by the worker core should be visible
to the main core after rte_eal_wait_lcore returns.
For the main to worker communication, the pointer to function
to execute is used as the guard variable. Hence, resetting of
the function pointer is important.
For the worker to main communication, the existing code uses the
lcore state as the guard variable. However, the state is also
modified by the main (where it sets the state to FINISHED) which
breaks the reader-writer semantics. It looks like the FINISHED
state is not really required. Hence the FINISHED state
is removed before using the state as the guard variable.
(For the data that needs to be communicated to the worker after
the rte_eal_remote_launch returns, load-acquire and store-release
semantics should be used)
v2:
1) Added documentation changes
2) Changed rte_eal_wait_lcore API definition to reflect
the removal of FINISHED state.
Honnappa Nagarahalli (6):
eal: reset lcore function pointer and argument
eal: ensure memory operations are visible to worker
eal: lcore state FINISHED is not required
eal: update rte_eal_wait_lcore definition
eal: ensure memory operations are visible to main
test/ring: use relaxed barriers for ring stress test
app/test/test_ring_stress_impl.h | 18 +++----
drivers/event/dpaa2/dpaa2_eventdev_selftest.c | 2 +-
drivers/event/octeontx/ssovf_evdev_selftest.c | 2 +-
drivers/event/sw/sw_evdev_selftest.c | 4 +-
examples/l2fwd-keepalive/main.c | 3 +-
lib/eal/common/eal_common_launch.c | 13 ++---
lib/eal/freebsd/eal_thread.c | 45 +++++++++++++----
lib/eal/include/rte_launch.h | 21 ++++----
lib/eal/include/rte_service.h | 4 +-
lib/eal/linux/eal_thread.c | 48 +++++++++++++------
lib/eal/windows/eal_thread.c | 48 +++++++++++++------
11 files changed, 132 insertions(+), 76 deletions(-)
--
2.25.1
More information about the dev
mailing list