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 -- 2.7.4