From: Willy Tarreau Date: Thu, 13 Apr 2023 13:22:42 +0000 (+0200) Subject: MINOR: fd: optimize fd_claim_tgid() for use in fd_insert() X-Git-Tag: v2.8-dev8~180 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d882bd80089eac21d949bdb6d10a8700fea32c6;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h index 984b151e92..9c0768083b 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; } }