From 9bba5cbe4d0ca0bc67951b60a685dd3decb703fb Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Sun, 9 Aug 2020 19:02:05 +0800 Subject: [PATCH] server: pass memory buffer to server init Signed-off-by: Sean Cross --- kernel/src/arch/riscv/process.rs | 5 +++++ kernel/src/server.rs | 6 +++--- kernel/src/services.rs | 17 +++++++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/kernel/src/arch/riscv/process.rs b/kernel/src/arch/riscv/process.rs index 7c327f391..ebc3d6deb 100644 --- a/kernel/src/arch/riscv/process.rs +++ b/kernel/src/arch/riscv/process.rs @@ -96,6 +96,11 @@ impl Process { Process { pid: unsafe { PROCESS_TABLE.borrow().current } } } + /// Mark this process as running on the current core + pub fn activate(&mut self) -> Result<(), xous::Error> { + Ok(()) + } + /// Calls the provided function with the current inner process state. pub fn with_inner(f: F) -> R where diff --git a/kernel/src/server.rs b/kernel/src/server.rs index 7811cb797..f49191bb9 100644 --- a/kernel/src/server.rs +++ b/kernel/src/server.rs @@ -168,7 +168,7 @@ impl Server { new: &mut Option, pid: PID, sid: SID, - // memory_page: MemoryPage, + _backing: MemoryRange, ) -> Result<(), xous::Error> { if new != &None { return Err(xous::Error::MemoryInUse); @@ -177,8 +177,8 @@ impl Server { #[cfg(baremetal)] let mut queue = unsafe { core::slice::from_raw_parts_mut( - queue_addr as *mut QueuedMessage, - queue_size / mem::size_of::(), + _backing.as_mut_ptr() as *mut QueuedMessage, + _backing.len() / mem::size_of::(), ) }; diff --git a/kernel/src/services.rs b/kernel/src/services.rs index 8b2302af9..56cdbd5bc 100644 --- a/kernel/src/services.rs +++ b/kernel/src/services.rs @@ -2,6 +2,7 @@ use crate::arch; use crate::arch::mem::MemoryMapping; pub use crate::arch::process::Process as ArchProcess; pub use crate::arch::process::Thread; +use xous::MemoryRange; use core::cell::RefCell; @@ -1277,19 +1278,23 @@ impl SystemServices { for entry in self.servers.iter_mut() { if entry == &None { + #[cfg(baremetal)] + // Allocate a single page for the server queue + let backing = { + let mut mm = MemoryManagerHandle::get(); + (mm.map_zeroed_page(pid, false)?, PAGE_SIZE) + }; + + #[cfg(not(baremetal))] + let backing = MemoryRange::new(4096, 4096).unwrap(); // println!( // "KERNEL({}): Found a free slot for a server -- allocating an entry", // self.pid.get() // ); - // // Allocate a single page for the server queue - // let (addr, size) = { - // let mut mm = MemoryManagerHandle::get(); - // (mm.map_zeroed_page(pid, false)?, PAGE_SIZE) - // }; // Initialize the server with the given memory page. - Server::init(entry, pid, sid /*, addr, size*/).map_err(|x| x)?; + Server::init(entry, pid, sid, backing).map_err(|x| x)?; return Ok(sid); } }