diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.8.6 [2024.04.16]
+* Use `prim`, not `ccall`, for the `foreign import`s used when building the
+  library with GHC 9.10 or later. This fixes a GHC 9.10-specific build issue.
+
 ## 0.8.5 [2024.02.17]
 * Allow building with GHC 9.10.
 
diff --git a/Data/Atomics.hs b/Data/Atomics.hs
--- a/Data/Atomics.hs
+++ b/Data/Atomics.hs
@@ -1,5 +1,9 @@
-{-# LANGUAGE  MagicHash, UnboxedTuples, ScopedTypeVariables, BangPatterns, CPP #-}
+{-# LANGUAGE MagicHash, UnboxedTuples, ScopedTypeVariables, BangPatterns, CPP #-}
 {-# LANGUAGE ForeignFunctionInterface #-}
+#if __GLASGOW_HASKELL__ >= 909
+{-# LANGUAGE GHCForeignImportPrim #-}
+{-# LANGUAGE UnliftedFFITypes #-}
+#endif
 
 -- | Provides atomic memory operations on IORefs and Mutable Arrays.
 --
@@ -351,19 +355,28 @@
 
 #if __GLASGOW_HASKELL__ >= 909
 
+foreign import prim "hs_atomics_primops_store_load_barrier" storeLoadBarrier#
+  :: State# RealWorld -> State# RealWorld
+
 -- | A memory barrier that prevents future loads occurring before preceding
 -- stores.
-foreign import ccall  unsafe "hs_atomics_primops_store_load_barrier" storeLoadBarrier
-  :: IO ()
+storeLoadBarrier :: IO ()
+storeLoadBarrier = IO $ \s -> case storeLoadBarrier# s of s' -> (# s', () #)
 
+foreign import prim "hs_atomics_primops_load_load_barrier" loadLoadBarrier#
+  :: State# RealWorld -> State# RealWorld
+
 -- | A memory barrier that prevents future loads occurring before earlier loads.
-foreign import ccall unsafe "hs_atomics_primops_load_load_barrier" loadLoadBarrier
-  :: IO ()
+loadLoadBarrier :: IO ()
+loadLoadBarrier = IO $ \s -> case loadLoadBarrier# s of s' -> (# s', () #)
 
+foreign import prim "hs_atomics_primops_write_barrier" writeBarrier#
+  :: State# RealWorld -> State# RealWorld
+
 -- | A memory barrier that prevents future stores occurring before preceding
 -- stores.
-foreign import ccall unsafe "hs_atomics_primops_write_barrier" writeBarrier
-  :: IO ()
+writeBarrier :: IO ()
+writeBarrier = IO $ \s -> case writeBarrier# s of s' -> (# s', () #)
 
 #elif !(defined(mingw32_HOST_OS) && __GLASGOW_HASKELL__ < 802)
 
diff --git a/atomic-primops.cabal b/atomic-primops.cabal
--- a/atomic-primops.cabal
+++ b/atomic-primops.cabal
@@ -1,6 +1,6 @@
 Cabal-version:       3.0
 Name:                atomic-primops
-Version:             0.8.5
+Version:             0.8.6
 License:             BSD-3-Clause
 License-file:        LICENSE
 Author:              Ryan Newton
