rx: Include rx_lwp.h et al in fallback rx_atomic.h

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 <buildbot@rampaginggeek.com>
Reviewed-by: Ben Huntsman <ben@huntsmans.net>
Tested-by: Ben Huntsman <ben@huntsmans.net>
Reviewed-by: Marcio Brito Barbosa <mbarbosa@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
This commit is contained in:
Andrew Deason 2025-01-07 16:25:35 -06:00
parent 3ce2749b21
commit 18b4243772

View File

@ -388,6 +388,14 @@ rx_atomic_sub(rx_atomic_t *atomic, int change)
* This won't be the quickest thing ever. * 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 # ifdef RX_ENABLE_LOCKS
extern afs_kmutex_t rx_atomic_mutex; extern afs_kmutex_t rx_atomic_mutex;
# endif # endif