[v5,00/15] fix distributor synchronization issues

Message ID 20201008052323.11547-1-l.wojciechow@partner.samsung.com (mailing list archive)


Lukasz Wojciechowski Oct. 8, 2020, 5:23 a.m. UTC
  During review and verification of the patch created by Sarosh Arif:
"test_distributor: prevent memory leakages from the pool" I found out
that running distributor unit tests multiple times in a row causes fails.
So I investigated all the issues I found.

There are few synchronization issues that might cause deadlocks
or corrupted data. They are fixed with this set of patches for both tests
and librte_distributor library.

* implement missing functionality in burst mode - worker shutdown
* fix shutdown test to always shutdown busy worker
* use atomic stores instead of barrier in tests clear_packet_count()
* reorder patches
* new patch 7: fix call to return_pkt in single mode
* new patch 11: replacing delays with spinlock on atomics in tests
* new patch 12: fix scalar matching algorithm
* new patch 13: new test with marking and checking every packet
* new patch 14: flush also in flight packets
* new patch 15: fix clearing returns buffer
* minor fixes in other patches

* adjust commit name prefixes app/test -> test/distributor:
* reorder patches
* use NULL oldpkt in rte_distributor_get_pkt() calls in tests

* add missing acked and tested by statements from v1

* assign NULL to freed mbufs in distributor test
* fix handshake check on legacy single distributor
* add patch 7 passing NULL to legacy API calls if no bufs are returned
* add patch 8 fixing API documentation

Lukasz Wojciechowski (15):
  distributor: fix missing handshake synchronization
  distributor: fix handshake deadlock
  distributor: do not use oldpkt when not needed
  distributor: handle worker shutdown in burst mode
  test/distributor: fix shutdown of busy worker
  test/distributor: synchronize lcores statistics
  distributor: fix return pkt calls in single mode
  test/distributor: fix freeing mbufs
  test/distributor: collect return mbufs
  distributor: align API documentation with code
  test/distributor: replace delays with spin locks
  distributor: fix scalar matching
  test/distributor: add test with packets marking
  distributor: fix flushing in flight packets
  distributor: fix clearing returns buffer

 app/test/test_distributor.c                   | 321 ++++++++++++++----
 lib/librte_distributor/distributor_private.h  |   3 +
 lib/librte_distributor/rte_distributor.c      | 219 +++++++++---
 lib/librte_distributor/rte_distributor.h      |  23 +-
 .../rte_distributor_single.c                  |   4 +
 5 files changed, 447 insertions(+), 123 deletions(-)