From: Amaury Denoyelle Date: Thu, 17 Aug 2023 09:04:42 +0000 (+0200) Subject: BUILD/IMPORT: fix compilation with PLOCK_DISABLE_EBO=1 X-Git-Tag: v2.9-dev4~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd97ba147c4ff11e33d6683ec6a756957602405b;p=thirdparty%2Fhaproxy.git BUILD/IMPORT: fix compilation with PLOCK_DISABLE_EBO=1 Compilation is broken due to missing __pl_wait_unlock_long() definition when building with PLOCK_DISABLE_EBO=1. This has been introduced since the following commit which activates the inlining version of pl_wait_unlock_long() : commit 071d689a514dac522ac3654f53bc22214b5716d0 MINOR: threads: inline the wait function for pthread_rwlock emulation Add an extra check on PLOCK_DISABLE_EBO before choosing the inline or default version of pl_wait_unlock_long() to fix this. --- diff --git a/include/import/plock.h b/include/import/plock.h index 7f2179491e..4fc258d0bc 100644 --- a/include/import/plock.h +++ b/include/import/plock.h @@ -1318,7 +1318,7 @@ static inline void pl_lorw_rdlock(unsigned long *lock) * lock to be empty of visitors. */ if (lk & PLOCK_LORW_WRQ_MASK) -#if defined(PLOCK_LORW_INLINE_WAIT) +#if defined(PLOCK_LORW_INLINE_WAIT) && !defined(PLOCK_DISABLE_EBO) lk = __pl_wait_unlock_long(lock, PLOCK_LORW_WRQ_MASK); #else lk = pl_wait_unlock_long(lock, PLOCK_LORW_WRQ_MASK); @@ -1329,7 +1329,7 @@ static inline void pl_lorw_rdlock(unsigned long *lock) /* wait for end of exclusive access if any */ if (lk & PLOCK_LORW_EXC_MASK) -#if defined(PLOCK_LORW_INLINE_WAIT) +#if defined(PLOCK_LORW_INLINE_WAIT) && !defined(PLOCK_DISABLE_EBO) lk = __pl_wait_unlock_long(lock, PLOCK_LORW_EXC_MASK); #else lk = pl_wait_unlock_long(lock, PLOCK_LORW_EXC_MASK); @@ -1349,7 +1349,7 @@ static inline void pl_lorw_wrlock(unsigned long *lock) */ lk = pl_deref_long(lock); if (__builtin_expect(lk & PLOCK_LORW_WRQ_MASK, 1)) -#if defined(PLOCK_LORW_INLINE_WAIT) +#if defined(PLOCK_LORW_INLINE_WAIT) && !defined(PLOCK_DISABLE_EBO) lk = __pl_wait_unlock_long(lock, PLOCK_LORW_WRQ_MASK); #else lk = pl_wait_unlock_long(lock, PLOCK_LORW_WRQ_MASK); @@ -1366,7 +1366,7 @@ static inline void pl_lorw_wrlock(unsigned long *lock) /* note below, an OR is significantly cheaper than BTS or XADD */ if (!(lk & PLOCK_LORW_WRQ_MASK)) pl_or_noret(lock, PLOCK_LORW_WRQ_BASE); -#if defined(PLOCK_LORW_INLINE_WAIT) +#if defined(PLOCK_LORW_INLINE_WAIT) && !defined(PLOCK_DISABLE_EBO) lk = __pl_wait_unlock_long(lock, PLOCK_LORW_SHR_MASK); #else lk = pl_wait_unlock_long(lock, PLOCK_LORW_SHR_MASK); @@ -1375,7 +1375,7 @@ static inline void pl_lorw_wrlock(unsigned long *lock) /* And also wait for a previous writer to finish. */ if (lk & PLOCK_LORW_EXC_MASK) -#if defined(PLOCK_LORW_INLINE_WAIT) +#if defined(PLOCK_LORW_INLINE_WAIT) && !defined(PLOCK_DISABLE_EBO) lk = __pl_wait_unlock_long(lock, PLOCK_LORW_EXC_MASK); #else lk = pl_wait_unlock_long(lock, PLOCK_LORW_EXC_MASK);