diff options
Diffstat (limited to 'embassy-stm32-wpan/src/wb55/sub/mm.rs')
| -rw-r--r-- | embassy-stm32-wpan/src/wb55/sub/mm.rs | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/embassy-stm32-wpan/src/wb55/sub/mm.rs b/embassy-stm32-wpan/src/wb55/sub/mm.rs index cbb5f130b..0ca7d1835 100644 --- a/embassy-stm32-wpan/src/wb55/sub/mm.rs +++ b/embassy-stm32-wpan/src/wb55/sub/mm.rs | |||
| @@ -4,7 +4,6 @@ use core::mem::MaybeUninit; | |||
| 4 | use core::task::Poll; | 4 | use core::task::Poll; |
| 5 | 5 | ||
| 6 | use aligned::{A4, Aligned}; | 6 | use aligned::{A4, Aligned}; |
| 7 | use cortex_m::interrupt; | ||
| 8 | use embassy_stm32::ipcc::IpccTxChannel; | 7 | use embassy_stm32::ipcc::IpccTxChannel; |
| 9 | use embassy_sync::waitqueue::AtomicWaker; | 8 | use embassy_sync::waitqueue::AtomicWaker; |
| 10 | 9 | ||
| @@ -52,7 +51,7 @@ impl<'a> MemoryManager<'a> { | |||
| 52 | loop { | 51 | loop { |
| 53 | poll_fn(|cx| unsafe { | 52 | poll_fn(|cx| unsafe { |
| 54 | MM_WAKER.register(cx.waker()); | 53 | MM_WAKER.register(cx.waker()); |
| 55 | if LinkedListNode::is_empty(LOCAL_FREE_BUF_QUEUE.as_mut_ptr()) { | 54 | if critical_section::with(|cs| LinkedListNode::is_empty(cs, LOCAL_FREE_BUF_QUEUE.as_mut_ptr())) { |
| 56 | Poll::Pending | 55 | Poll::Pending |
| 57 | } else { | 56 | } else { |
| 58 | Poll::Ready(()) | 57 | Poll::Ready(()) |
| @@ -62,10 +61,9 @@ impl<'a> MemoryManager<'a> { | |||
| 62 | 61 | ||
| 63 | self.ipcc_mm_release_buffer_channel | 62 | self.ipcc_mm_release_buffer_channel |
| 64 | .send(|| { | 63 | .send(|| { |
| 65 | interrupt::free(|_| unsafe { | 64 | critical_section::with(|cs| unsafe { |
| 66 | // CS required while moving nodes | 65 | while let Some(node_ptr) = LinkedListNode::remove_head(cs, LOCAL_FREE_BUF_QUEUE.as_mut_ptr()) { |
| 67 | while let Some(node_ptr) = LinkedListNode::remove_head(LOCAL_FREE_BUF_QUEUE.as_mut_ptr()) { | 66 | LinkedListNode::insert_head(cs, FREE_BUF_QUEUE.as_mut_ptr(), node_ptr); |
| 68 | LinkedListNode::insert_head(FREE_BUF_QUEUE.as_mut_ptr(), node_ptr); | ||
| 69 | } | 67 | } |
| 70 | }) | 68 | }) |
| 71 | }) | 69 | }) |
| @@ -77,8 +75,8 @@ impl<'a> MemoryManager<'a> { | |||
| 77 | impl<'a> evt::MemoryManager for MemoryManager<'a> { | 75 | impl<'a> evt::MemoryManager for MemoryManager<'a> { |
| 78 | /// SAFETY: passing a pointer to something other than a managed event packet is UB | 76 | /// SAFETY: passing a pointer to something other than a managed event packet is UB |
| 79 | unsafe fn drop_event_packet(evt: *mut EvtPacket) { | 77 | unsafe fn drop_event_packet(evt: *mut EvtPacket) { |
| 80 | interrupt::free(|_| unsafe { | 78 | critical_section::with(|cs| unsafe { |
| 81 | LinkedListNode::insert_head(LOCAL_FREE_BUF_QUEUE.as_mut_ptr(), evt as *mut _); | 79 | LinkedListNode::insert_head(cs, LOCAL_FREE_BUF_QUEUE.as_mut_ptr(), evt as *mut _); |
| 82 | }); | 80 | }); |
| 83 | 81 | ||
| 84 | MM_WAKER.wake(); | 82 | MM_WAKER.wake(); |
