-
Notifications
You must be signed in to change notification settings - Fork 241
Open
Description
It appears that using a 64-bit backed rtic-monotonics counter, on armv7 portable-atomics will polyfill with a AtomicU64 implementation that can deadlock.
To be fair this is expected behavior of portable-atomics, it's just that because the polyfill is automatic it's easy to not realise that you've introduced a deadlock.
Could this at least be outlined in the docs? Or even better, prevent armv7 targets from using 64bit systick at all? In either case I am happy to open the PR if someone is able to point me in the right direction.
Here's a stack trace from when using systick-64bit locks up:
#0 0x08017168 in core::iter::range::{impl#5}::spec_next<i32> (self=<optimized out>) at /Users/liam/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/range.rs:764
#1 core::iter::range::{impl#6}::next<i32> (self=<optimized out>) at /Users/liam/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/range.rs:849
#2 portable_atomic::imp::fallback::utils::Backoff::snooze (self=<optimized out>) at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/portable-atomic-1.11.1/src/imp/fallback/utils.rs:138
#3 portable_atomic::imp::fallback::seq_lock::SeqLock::write (self=0x20007480 <portable_atomic::imp::fallback::lock::LOCKS+768>)
at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/portable-atomic-1.11.1/src/imp/fallback/seq_lock_wide.rs:97
#4 0x080170c4 in portable_atomic::imp::fallback::AtomicU64::fetch_add (self=0x200079e0 <rtic_monotonics::systick::SYSTICK_CNT>, val=1, _order=core::sync::atomic::Ordering::AcqRel)
at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/portable-atomic-1.11.1/src/imp/fallback/mod.rs:322
#5 portable_atomic::AtomicU64::fetch_add (self=0x200079e0 <rtic_monotonics::systick::SYSTICK_CNT>, val=1, order=core::sync::atomic::Ordering::AcqRel)
at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/portable-atomic-1.11.1/src/lib.rs:3241
#6 0x0800c720 in rtic_monotonics::systick::{impl#1}::on_interrupt () at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rtic-monotonics-2.1.0/src/systick.rs:130
#7 rtic_time::timer_queue::TimerQueue<rtic_monotonics::systick::SystickBackend>::on_monotonic_interrupt<rtic_monotonics::systick::SystickBackend> (self=<optimized out>)
at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rtic-time-2.0.1/src/timer_queue.rs:102
#8 pdm_36::{impl#0}::start::SysTick () at /Users/liam/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rtic-monotonics-2.1.0/src/systick.rs:181
Metadata
Metadata
Assignees
Labels
No labels