From ba3e38db11d3922a26b368c98b5e98af86136b43 Mon Sep 17 00:00:00 2001 From: Simon Renblad Date: Tue, 6 Aug 2024 13:43:34 +0800 Subject: [PATCH] read idle kernel config after experiment end --- src/runtime/src/comms.rs | 19 ++++++++++--------- src/runtime/src/mgmt.rs | 3 +-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/runtime/src/comms.rs b/src/runtime/src/comms.rs index 0e21c98..584a811 100644 --- a/src/runtime/src/comms.rs +++ b/src/runtime/src/comms.rs @@ -777,7 +777,6 @@ pub fn main(timer: GlobalTimer, cfg: Config) { moninj::start(timer, &aux_mutex, &drtio_routing_table); let control: Rc> = Rc::new(RefCell::new(kernel::Control::start())); - let idle_kernel = Rc::new(cfg.read("idle_kernel").ok()); if let Ok(buffer) = cfg.read("startup_kernel") { info!("Loading startup kernel..."); let routing_table = drtio_routing_table.borrow(); @@ -804,14 +803,15 @@ pub fn main(timer: GlobalTimer, cfg: Config) { } } - mgmt::start(cfg); - + let cfg: Rc = Rc::new(cfg); + mgmt::start(cfg.clone()); + task::spawn(async move { let connection = Rc::new(Semaphore::new(0, 1)); let terminate = Rc::new(Semaphore::new(0, 1)); { let control = control.clone(); - let idle_kernel = idle_kernel.clone(); + let cfg = cfg.clone(); let connection = connection.clone(); let terminate = terminate.clone(); let up_destinations = up_destinations.clone(); @@ -819,9 +819,10 @@ pub fn main(timer: GlobalTimer, cfg: Config) { let routing_table = drtio_routing_table.clone(); task::spawn(async move { let routing_table = routing_table.borrow(); + let idle_kernel = cfg.read("idle_kernel").ok(); select_biased! { _ = (async { - if let Some(buffer) = &*idle_kernel { + if let Some(buffer) = &idle_kernel { load_and_run_idle_kernel(&buffer, &control, &up_destinations, &aux_mutex, &routing_table, timer).await; } }).fuse() => (), @@ -841,7 +842,7 @@ pub fn main(timer: GlobalTimer, cfg: Config) { } let control = control.clone(); - let idle_kernel = idle_kernel.clone(); + let cfg = cfg.clone(); let connection = connection.clone(); let terminate = terminate.clone(); let up_destinations = up_destinations.clone(); @@ -852,12 +853,13 @@ pub fn main(timer: GlobalTimer, cfg: Config) { let _ = terminate.try_wait(); task::spawn(async move { let routing_table = routing_table.borrow(); + let idle_kernel = cfg.read("idle_kernel").ok(); select_biased! { _ = (async { let _ = handle_connection(&mut stream, control.clone(), &up_destinations, &aux_mutex, &routing_table, timer) .await .map_err(|e| warn!("connection terminated: {}", e)); - if let Some(buffer) = &*idle_kernel { + if let Some(buffer) = &idle_kernel { load_and_run_idle_kernel(&buffer, &control, &up_destinations, &aux_mutex, &routing_table, timer).await; } }).fuse() => (), @@ -913,8 +915,7 @@ pub fn soft_panic_main(timer: GlobalTimer, cfg: Config) -> ! { }; Sockets::init(32); - - mgmt::start(cfg); + mgmt::start(Rc::new(cfg)); // getting eth settings disables the LED as it resets GPIO // need to re-enable it here diff --git a/src/runtime/src/mgmt.rs b/src/runtime/src/mgmt.rs index bfeed9b..77113ed 100644 --- a/src/runtime/src/mgmt.rs +++ b/src/runtime/src/mgmt.rs @@ -229,10 +229,9 @@ async fn handle_connection(stream: &mut TcpStream, pull_id: Rc>, cf } } -pub fn start(cfg: Config) { +pub fn start(cfg: Rc) { task::spawn(async move { let pull_id = Rc::new(RefCell::new(0u32)); - let cfg = Rc::new(cfg); loop { let mut stream = TcpStream::accept(1380, 2048, 2048).await.unwrap(); let pull_id = pull_id.clone(); -- 2.44.1