dma: fix nested block_on panic
This commit is contained in:
parent
f6193769ef
commit
b8ba7ea929
|
@ -329,7 +329,7 @@ async fn handle_run_kernel(
|
||||||
}
|
}
|
||||||
kernel::Message::DmaEraseRequest(name) => {
|
kernel::Message::DmaEraseRequest(name) => {
|
||||||
// prevent possible OOM when we have large DMA record replacement.
|
// prevent possible OOM when we have large DMA record replacement.
|
||||||
rtio_dma::erase(name, aux_mutex, routing_table, timer);
|
rtio_dma::erase(name, aux_mutex, routing_table, timer).await;
|
||||||
}
|
}
|
||||||
kernel::Message::DmaGetRequest(name) => {
|
kernel::Message::DmaGetRequest(name) => {
|
||||||
let result = rtio_dma::retrieve(name);
|
let result = rtio_dma::retrieve(name);
|
||||||
|
|
|
@ -235,14 +235,14 @@ pub mod remote_dma {
|
||||||
trace_set.await_done(timeout, timer).await
|
trace_set.await_done(timeout, timer).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn erase(
|
pub async fn erase(
|
||||||
aux_mutex: &Rc<Mutex<bool>>,
|
aux_mutex: &Rc<Mutex<bool>>,
|
||||||
routing_table: &RoutingTable,
|
routing_table: &RoutingTable,
|
||||||
timer: GlobalTimer,
|
timer: GlobalTimer,
|
||||||
id: u32
|
id: u32
|
||||||
) {
|
) {
|
||||||
let trace_set = unsafe { TRACES.get_mut(&id).unwrap() };
|
let trace_set = unsafe { TRACES.get_mut(&id).unwrap() };
|
||||||
task::block_on(trace_set.erase(aux_mutex, routing_table, timer));
|
trace_set.erase(aux_mutex, routing_table, timer).await;
|
||||||
unsafe { TRACES.remove(&id); }
|
unsafe { TRACES.remove(&id); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,6 +304,7 @@ pub fn put_record(mut recorder: DmaRecorder) -> u32 {
|
||||||
// sends whole chunks, to limit comms/kernel CPU communication,
|
// sends whole chunks, to limit comms/kernel CPU communication,
|
||||||
// and as only comms core has access to varios DMA buffers.
|
// and as only comms core has access to varios DMA buffers.
|
||||||
let mut ptr = 0;
|
let mut ptr = 0;
|
||||||
|
recorder.buffer.push(0);
|
||||||
while recorder.buffer[ptr] != 0 {
|
while recorder.buffer[ptr] != 0 {
|
||||||
// ptr + 3 = tgt >> 24 (destination)
|
// ptr + 3 = tgt >> 24 (destination)
|
||||||
let len = recorder.buffer[ptr] as usize;
|
let len = recorder.buffer[ptr] as usize;
|
||||||
|
@ -347,13 +348,13 @@ pub fn put_record(mut recorder: DmaRecorder) -> u32 {
|
||||||
ptr
|
ptr
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn erase(name: String, _aux_mutex: &Rc<Mutex<bool>>,
|
pub async fn erase(name: String, _aux_mutex: &Rc<Mutex<bool>>,
|
||||||
_routing_table: &RoutingTable, _timer: GlobalTimer
|
_routing_table: &RoutingTable, _timer: GlobalTimer
|
||||||
) {
|
) {
|
||||||
let _entry = DMA_RECORD_STORE.lock().remove(&name);
|
let _entry = DMA_RECORD_STORE.lock().remove(&name);
|
||||||
#[cfg(has_drtio)]
|
#[cfg(has_drtio)]
|
||||||
if let Some((id, _v, _d)) = _entry {
|
if let Some((id, _v, _d)) = _entry {
|
||||||
remote_dma::erase(_aux_mutex, _routing_table, _timer, id);
|
remote_dma::erase(_aux_mutex, _routing_table, _timer, id).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue