Add atomic tests to the test-eventdev app which correspond to the order tests but use exclusively atomic queues.
The test detects if port maintenance is required, and so they are compatible with event devices such as the distributed software eventdev. To verify atomicity, a spinlock is used for each combination of stage and flow. It is acquired whenever an event is dequeued for processing and released when processing is finished. The tests will fail if a port attempts to acquire a lock which is already held. Luka Jankovic (4): eventdev: atomic common for test-eventdev app eventdev: add atomic queue test to test-evnetdev app eventdev: add atomic atq to test-eventdev app eventdev: documentation for atomic queue and atomic atq tests app/test-eventdev/evt_common.h | 9 + app/test-eventdev/meson.build | 3 + app/test-eventdev/test_atomic_atq.c | 216 +++ app/test-eventdev/test_atomic_common.c | 134 ++ app/test-eventdev/test_atomic_common.h | 85 + app/test-eventdev/test_atomic_queue.c | 230 +++ .../tools/img/eventdev_atomic_atq_test.svg | 1588 +++++++++++++++ .../tools/img/eventdev_atomic_queue_test.svg | 1701 +++++++++++++++++ doc/guides/tools/testeventdev.rst | 155 ++ 9 files changed, 4121 insertions(+) create mode 100644 app/test-eventdev/test_atomic_atq.c create mode 100644 app/test-eventdev/test_atomic_common.c create mode 100644 app/test-eventdev/test_atomic_common.h create mode 100644 app/test-eventdev/test_atomic_queue.c create mode 100644 doc/guides/tools/img/eventdev_atomic_atq_test.svg create mode 100644 doc/guides/tools/img/eventdev_atomic_queue_test.svg --- v7: * Refactor common atomic test functionality into separate common file. * Implement atomic atq v6: * Revert the use of event.u64 to mbufs as the Marvell CNXK platform assumes event.u64 to be 8-byte aligned, which causes the test to fail. * Clarified deadlock error message. v5: * Updated documentation for dpdk-test-eventdev v4: * Fix code style issues. * Remove unused imports. v3: * Use struct to avoid bit operations when accessing event u64. * Changed __rte_always_inline to inline for processing stages. * Introduce idle timeout constant. * Formatting and cleanup. v2: * Changed to only check queue, flow combination, not port, queue, flow. * Lock is only held when a packet is processed. * Utilize event u64 instead of mbuf. * General cleanup. --- 2.34.1