Subkernel free messages and bugfixes #284

Merged
sb10q merged 1 commits from mwojcik/artiq-zynq:subkernel_free_messages into master 2024-08-17 17:37:23 +08:00
2 changed files with 18 additions and 11 deletions
Showing only changes of commit bfb582f99b - Show all commits

View File

@ -451,12 +451,9 @@ async fn handle_run_kernel(
.await; .await;
} }
#[cfg(has_drtio)] #[cfg(has_drtio)]
kernel::Message::SubkernelMsgSend { kernel::Message::SubkernelMsgSend { id, destination, data } => {
id, let res =
destination, subkernel::message_send(aux_mutex, routing_table, timer, id, destination.unwrap(), data).await;
data,
} => {
let res = subkernel::message_send(aux_mutex, routing_table, timer, id, destination.unwrap(), data).await;
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(e) => { Err(e) => {

View File

@ -26,7 +26,7 @@ enum KernelState {
MsgAwait { MsgAwait {
max_time: Option<Milliseconds>, max_time: Option<Milliseconds>,
id: u32, id: u32,
tags: Vec<u8> tags: Vec<u8>,
}, },
MsgSending, MsgSending,
SubkernelAwaitLoad, SubkernelAwaitLoad,
@ -180,7 +180,13 @@ impl MessageManager {
} }
} }
pub fn handle_incoming(&mut self, status: PayloadStatus, id: u32, length: usize, data: &[u8; MASTER_PAYLOAD_MAX_SIZE]) { pub fn handle_incoming(
&mut self,
status: PayloadStatus,
id: u32,
length: usize,
data: &[u8; MASTER_PAYLOAD_MAX_SIZE],
) {
// called when receiving a message from master // called when receiving a message from master
if status.is_first() { if status.is_first() {
self.in_buffer = None; self.in_buffer = None;
@ -726,7 +732,11 @@ impl<'a> Manager<'_> {
} else { } else {
None None
}; };
self.session.kernel_state = KernelState::MsgAwait { max_time: max_time, id:id, tags: tags }; self.session.kernel_state = KernelState::MsgAwait {
max_time: max_time,
id: id,
tags: tags,
};
} }
kernel::Message::SubkernelLoadRunRequest { kernel::Message::SubkernelLoadRunRequest {
id, id,
@ -772,7 +782,7 @@ impl<'a> Manager<'_> {
fn process_external_messages(&mut self, timer: &GlobalTimer) -> Result<(), Error> { fn process_external_messages(&mut self, timer: &GlobalTimer) -> Result<(), Error> {
match &self.session.kernel_state { match &self.session.kernel_state {
KernelState::MsgAwait {max_time , id, tags } => { KernelState::MsgAwait { max_time, id, tags } => {
if let Some(max_time) = *max_time { if let Some(max_time) = *max_time {
if timer.get_time() > max_time { if timer.get_time() > max_time {
self.control.tx.send(kernel::Message::SubkernelMsgRecvReply { self.control.tx.send(kernel::Message::SubkernelMsgRecvReply {