From 18b4243772c361c460ee255f7ddabbecbee5071c Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 7 Jan 2025 16:25:35 -0600 Subject: [PATCH] rx: Include rx_lwp.h et al in fallback rx_atomic.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In rx_atomic.h, our "fallback" implementation of atomics uses a global lock, using our afs_kmutex_t/MUTEX_ENTER() abstractions, but rx_atomic.h doesn't include any headers to define afs_kmutex_t et al. Most callers include rx_lwp.h or an equivalent before rx_atomic.h, but this is not guaranteed, and tests/rx/atomic-t.c (for example) does not do this. If someone tries to build OpenAFS on a platform that doesn't have a more specific rx atomic implementation, this means that building atomic-t fails: In file included from /.../tests/rx/atomic-t.c:34: /.../include/rx/rx_atomic.h: In function ‘rx_atomic_set’: /.../include/rx/rx_atomic.h:402:5: error: implicit declaration of function ‘MUTEX_ENTER’ [-Werror=implicit-function-declaration] MUTEX_ENTER(&rx_atomic_mutex); ^~~~~~~~~~~ /.../include/rx/rx_atomic.h:402:18: error: ‘rx_atomic_mutex’ undeclared (first use in this function); did you mean ‘rx_atomic_set’? MUTEX_ENTER(&rx_atomic_mutex); ^~~~~~~~~~~~~~~ rx_atomic_set To fix this, include rx_lwp.h in the "fallback" branch of rx_atomic.h (or rx_kmutex.h for the kernel, or rx_pthread.h for pthreads). This should ensure that our locking abstractions are defined appropriately so we can use the rx_atomic_mutex global lock. Change-Id: Ie281161f4920a5b6b5b23acd77f7677806245673 Reviewed-on: https://gerrit.openafs.org/16062 Tested-by: BuildBot Reviewed-by: Ben Huntsman Tested-by: Ben Huntsman Reviewed-by: Marcio Brito Barbosa Reviewed-by: Mark Vitale Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason --- src/rx/rx_atomic.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/rx/rx_atomic.h b/src/rx/rx_atomic.h index b075e2942c..cbe3587b9e 100644 --- a/src/rx/rx_atomic.h +++ b/src/rx/rx_atomic.h @@ -388,6 +388,14 @@ rx_atomic_sub(rx_atomic_t *atomic, int change) * This won't be the quickest thing ever. */ +# if defined(KERNEL) +# include "rx_kmutex.h" +# elif defined(AFS_PTHREAD_ENV) +# include "rx_pthread.h" +# else +# include "rx_lwp.h" +# endif + # ifdef RX_ENABLE_LOCKS extern afs_kmutex_t rx_atomic_mutex; # endif