> > v8: > 1. Enhance functional test for ticketlock by adding extra verification to > ensure correct locking in MT env. > 2. Amortize the cost of getting time in test case. > (Suggested by Konstantin Ananyev) > > v7: > 1. Modify trylock to compare both current and next fields to gurantee the > lock > being obtained only if tl->current==1(lock is free). > As within the trylock function, suppose next==curr=1, then this thread > will > experience really long context switch, and next time it continues its > execution and tl->next wraps around to 1 again and tl_couurent==0(lock > held by another thread),this trylock will return a success, that means > two threads holding the lock. (Suggested by Konstantin Ananyev) > 2. Let all archs use generic ticketlock implementation. > > v6: > Add rte_ticketlock.h in lib/librte_eal/common/include/arch/arm/. > Sort header inside ticketlock files by alphabetical order. > > v5: > Change the variants inside rte_ticket_lock from unint to uint16_t for > binary > compatibility with the plain spin lock(suggested by Honnappa > Nagarahalli)). > > v4: > Change some assignment operation in recursive ticket lock to __atomic. > > V3: > 1.Update ticketlock intrduction(suggested by Honnappa Nagarahalli). > 2.Change the implementation of rte_ticketlock_trylock to CAS(suggested by > Honnappa Nagarahalli). > > V2: > 1.Update commit message(suggested by Jerin Jacob). > 2.Add ticketlock test cases(suggested by Jerin Jacob). > > V1: > Implement ticket lock to improve lock fairness and prdictability. > > As shown on thundex-2 platform: > *** ticketlock_autotest with this patch *** > Core [0] count = 496 > Core [1] count = 495 > Core [2] count = 498 > ... > Core [209] count = 488 > Core [210] count = 490 > Core [211] count = 474 > > Joyce Kong (3): > eal/ticketlock: ticket based to improve fairness > eal/ticketlock: enable generic ticketlock on all arch > test/ticketlock: add ticket lock test case > > MAINTAINERS | 5 + > app/test/Makefile | 1 + > app/test/autotest_data.py | 6 + > app/test/meson.build | 1 + > app/test/test_ticketlock.c | 319 > +++++++++++++++++++++ > doc/api/doxy-api-index.md | 1 + > lib/librte_eal/common/Makefile | 2 +- > .../common/include/arch/arm/rte_ticketlock.h | 22 ++ > .../common/include/arch/ppc_64/rte_ticketlock.h | 18 ++ > .../common/include/arch/x86/rte_ticketlock.h | 18 ++ > .../common/include/generic/rte_ticketlock.h | 215 ++++++++++++++ > lib/librte_eal/common/meson.build | 1 + > 12 files changed, 608 insertions(+), 1 deletion(-) > create mode 100644 app/test/test_ticketlock.c > create mode 100644 lib/librte_eal/common/include/arch/arm/rte_ticketlock.h > create mode 100644 lib/librte_eal/common/include/arch/ppc_64/rte_ticketlock.h > create mode 100644 lib/librte_eal/common/include/arch/x86/rte_ticketlock.h > create mode 100644 lib/librte_eal/common/include/generic/rte_ticketlock.h > > --
Acked-by: Konstantin Ananyev <konstantin.anan...@intel.com> > 2.7.4