From 8b5793e1d08a76a6ad8ddea73e1784f6bb791017 Mon Sep 17 00:00:00 2001 From: okhsunrog Date: Wed, 14 Jan 2026 23:20:47 +0300 Subject: [PATCH] Use portable-atomic in cs.rs for ESP32 compatibility The critical-section coordination module (cs.rs) was using core::sync::atomic types directly, which don't work on targets like riscv32imc (ESP32-C3) that lack native atomic support. This change: - Uses portable-atomic for AtomicBool and AtomicUsize in cs.rs - Adds portable-atomic as an optional dependency enabled by the critical-section feature - Removes maitake-sync?/critical-section propagation since cs.rs doesn't need it, and it enables portable-atomic/critical-section which conflicts with esp-hal's unsafe-assume-single-core cfg This allows bbqueue to work on ESP32 chips where esp-hal configures portable-atomic with unsafe-assume-single-core for atomic operations. --- bbqueue/Cargo.toml | 7 ++++++- bbqueue/src/lib.rs | 2 +- bbqueue/src/traits/coordination/cs.rs | 7 +++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/bbqueue/Cargo.toml b/bbqueue/Cargo.toml index 0b22f57..7fc2691 100644 --- a/bbqueue/Cargo.toml +++ b/bbqueue/Cargo.toml @@ -33,6 +33,11 @@ version = "1.0" default-features = false optional = true +[dependencies.portable-atomic] +version = "1.0" +default-features = false +optional = true + [dev-dependencies.tokio] version = "1.0" features = ["macros", "rt", "time"] @@ -45,7 +50,7 @@ default = [ ] critical-section = [ "dep:critical-section", - "maitake-sync?/critical-section", + "dep:portable-atomic", ] disable-cache-padding = [ "maitake-sync?/no-cache-pad", diff --git a/bbqueue/src/lib.rs b/bbqueue/src/lib.rs index 6a6d303..74bfbf4 100644 --- a/bbqueue/src/lib.rs +++ b/bbqueue/src/lib.rs @@ -127,9 +127,9 @@ pub mod prod_cons; /// Queue storage /// mod queue; -pub use queue::BBQueue; #[cfg(feature = "alloc")] pub use queue::ArcBBQueue; +pub use queue::BBQueue; /// Generic traits /// diff --git a/bbqueue/src/traits/coordination/cs.rs b/bbqueue/src/traits/coordination/cs.rs index 5c5dd47..16dec32 100644 --- a/bbqueue/src/traits/coordination/cs.rs +++ b/bbqueue/src/traits/coordination/cs.rs @@ -6,10 +6,9 @@ use const_init::ConstInit; use super::{Coord, ReadGrantError, WriteGrantError}; -use core::{ - cmp::min, - sync::atomic::{AtomicBool, AtomicUsize, Ordering}, -}; +use core::cmp::min; +use core::sync::atomic::Ordering; +use portable_atomic::{AtomicBool, AtomicUsize}; /// Coordination that uses a critical section to perform coordination operations ///