aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2024-07-30 22:12:42 +1200
committerThomas Munro <tmunro@postgresql.org>2024-07-30 22:59:30 +1200
commita011dc399cc82be07326c89c926bd5880160b1ba (patch)
tree0f6704d08dd5d86c95a132715553728a8f1881e8 /src
parent81385261362962deb9861b39b509aeffe213721d (diff)
downloadpostgresql-a011dc399cc82be07326c89c926bd5880160b1ba.tar.gz
postgresql-a011dc399cc82be07326c89c926bd5880160b1ba.zip
Require compiler barrier support.
Previously we had a fallback implementation of pg_compiler_barrier() that called an empty function across a translation unit boundary so the compiler couldn't see what it did. That shouldn't be needed on any current systems, and might not even work with a link time optimizer. Since we now require compiler-specific knowledge of how to implement atomics, we should also know how to implement compiler barriers on a hypothetical new system. Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi> Suggested-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/721bf39a-ed8a-44b0-8b8e-be3bd81db748%40technowledgy.de Discussion: https://postgr.es/m/3351991.1697728588%40sss.pgh.pa.us
Diffstat (limited to 'src')
-rw-r--r--src/backend/port/atomics.c8
-rw-r--r--src/include/port/atomics.h3
-rw-r--r--src/include/port/atomics/fallback.h15
3 files changed, 3 insertions, 23 deletions
diff --git a/src/backend/port/atomics.c b/src/backend/port/atomics.c
index 6f1e014d0b8..19a84a7849d 100644
--- a/src/backend/port/atomics.c
+++ b/src/backend/port/atomics.c
@@ -40,14 +40,6 @@ pg_spinlock_barrier(void)
}
#endif
-#ifdef PG_HAVE_COMPILER_BARRIER_EMULATION
-void
-pg_extern_compiler_barrier(void)
-{
- /* do nothing */
-}
-#endif
-
#ifdef PG_HAVE_ATOMIC_U64_SIMULATION
diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h
index c2ce10a718f..edb0ae40dc0 100644
--- a/src/include/port/atomics.h
+++ b/src/include/port/atomics.h
@@ -98,6 +98,9 @@
#if !defined(PG_HAVE_ATOMIC_U32_SUPPORT)
#error "could not find an implementation of pg_atomic_uint32"
#endif
+#if !defined(pg_compiler_barrier_impl)
+#error "could not find an implementation of pg_compiler_barrier"
+#endif
/*
* Provide a spinlock-based implementation of the 64 bit variants, if
diff --git a/src/include/port/atomics/fallback.h b/src/include/port/atomics/fallback.h
index 8ffd1a8fd32..9f83827d83f 100644
--- a/src/include/port/atomics/fallback.h
+++ b/src/include/port/atomics/fallback.h
@@ -33,21 +33,6 @@ extern void pg_spinlock_barrier(void);
#define pg_memory_barrier_impl pg_spinlock_barrier
#endif
-#ifndef pg_compiler_barrier_impl
-/*
- * If the compiler/arch combination does not provide compiler barriers,
- * provide a fallback. The fallback simply consists of a function call into
- * an externally defined function. That should guarantee compiler barrier
- * semantics except for compilers that do inter translation unit/global
- * optimization - those better provide an actual compiler barrier.
- *
- * A native compiler barrier for sure is a lot faster than this...
- */
-#define PG_HAVE_COMPILER_BARRIER_EMULATION
-extern void pg_extern_compiler_barrier(void);
-#define pg_compiler_barrier_impl pg_extern_compiler_barrier
-#endif
-
#if !defined(PG_HAVE_ATOMIC_U64_SUPPORT)