From 4d882bd80089eac21d949bdb6d10a8700fea32c6 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 13 Apr 2023 15:22:42 +0200 Subject: [PATCH] MINOR: fd: optimize fd_claim_tgid() for use in fd_insert() fd_claim_tgid() uses a CAS to set the desired TGID on the FD. It's only called from fd_insert() where in the vast majority of cases, the tgid and refcount are zero before the call. However the loop was optimized for the case where it was equal to the desired TGID, systematically causing one extra round in the loop there. Better start assuming a zero value. --- include/haproxy/fd.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h index 984b151..9c07680 100644 --- a/include/haproxy/fd.h +++ b/include/haproxy/fd.h @@ -382,12 +382,12 @@ static inline void fd_claim_tgid(int fd, uint desired_tgid) BUG_ON(!desired_tgid); desired_tgid += 0x10000; // refcount=1 - old = desired_tgid; + old = 0; // assume unused (most likely) while (1) { - old &= 0xffff; if (_HA_ATOMIC_CAS(&fdtab[fd].refc_tgid, &old, desired_tgid)) break; __ha_cpu_relax(); + old &= 0xffff; } } -- 1.7.10.4