Add rust lint CI job.
All checks were successful
Check / Check Rust (pull_request) Successful in 22s
All checks were successful
Check / Check Rust (pull_request) Successful in 22s
This commit is contained in:
parent
311755c812
commit
000c9403d5
30 changed files with 178 additions and 108 deletions
|
|
@ -2,7 +2,6 @@ use core::ffi::c_void;
|
|||
|
||||
use crate::zion::{self, z_cap_t, ZError};
|
||||
|
||||
#[must_use]
|
||||
fn syscall<T>(id: u64, req: &T) -> Result<(), ZError> {
|
||||
unsafe {
|
||||
let resp = zion::SysCall1(id, req as *const T as *const c_void);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
use crate::cap::Capability;
|
||||
use crate::debug;
|
||||
use crate::init;
|
||||
use crate::syscall;
|
||||
use crate::zion::ZError;
|
||||
|
|
@ -237,7 +236,7 @@ fn load_program_segment(
|
|||
let page_offset = prog_header.vaddr & 0xFFF;
|
||||
let mem_size = page_offset + prog_header.mem_size;
|
||||
|
||||
let mem_object = crate::mem::MemoryRegion::new(mem_size)?;
|
||||
let mut mem_object = crate::mem::MemoryRegion::new(mem_size)?;
|
||||
|
||||
for i in mem_object.mut_slice() {
|
||||
*i = 0;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ pub fn parse_init_port(port_cap: z_cap_t) {
|
|||
let mut caps: [u64; 1] = [0];
|
||||
|
||||
let resp = syscall::port_poll(&init_port, &mut bytes, &mut caps);
|
||||
if let Err(_) = resp {
|
||||
if resp.is_err() {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,21 +2,20 @@ use alloc::string::String;
|
|||
use alloc::vec::Vec;
|
||||
use core::fmt;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Writer {
|
||||
int_vec: Vec<u8>,
|
||||
}
|
||||
|
||||
impl Writer {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
int_vec: Vec::new(),
|
||||
}
|
||||
Writer::default()
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<String> for Writer {
|
||||
fn into(self) -> String {
|
||||
String::from_utf8(self.int_vec).expect("Failed to convert")
|
||||
impl From<Writer> for String {
|
||||
fn from(value: Writer) -> Self {
|
||||
String::from_utf8(value.int_vec).expect("Failed to convert")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ impl MemoryRegion {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn mut_slice<T>(&self) -> &mut [T] {
|
||||
pub fn mut_slice<T>(&mut self) -> &mut [T] {
|
||||
unsafe {
|
||||
slice::from_raw_parts_mut(
|
||||
self.virt_addr as *mut T,
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ impl<T> DerefMut for MutexGuard<'_, T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T> Mutex<T> {
|
||||
impl<'a, T> Mutex<T> {
|
||||
pub fn new(data: T) -> Mutex<T> {
|
||||
Mutex {
|
||||
cap: syscall::mutex_create().unwrap(),
|
||||
|
|
@ -58,7 +58,7 @@ impl<T> Mutex<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn lock(&self) -> MutexGuard<T> {
|
||||
pub fn lock(&'a self) -> MutexGuard<'a, T> {
|
||||
syscall::mutex_lock(&self.cap).unwrap();
|
||||
|
||||
MutexGuard { mutex: self }
|
||||
|
|
@ -70,3 +70,12 @@ impl<T> Drop for MutexGuard<'_, T> {
|
|||
syscall::mutex_release(&self.mutex.cap).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Default for Mutex<T>
|
||||
where
|
||||
T: Default,
|
||||
{
|
||||
fn default() -> Self {
|
||||
Self::new(T::default())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ use core::ffi::c_void;
|
|||
#[cfg(feature = "hosted")]
|
||||
use core::panic::PanicInfo;
|
||||
|
||||
#[must_use]
|
||||
fn syscall<T>(id: u64, req: &T) -> Result<(), ZError> {
|
||||
unsafe {
|
||||
let resp = zion::SysCall1(id, req as *const T as *const c_void);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ struct TaskWaker {
|
|||
}
|
||||
|
||||
impl TaskWaker {
|
||||
fn new(task_id: TaskId, task_queue: Arc<Mutex<VecDeque<TaskId>>>) -> Waker {
|
||||
fn create_waker(task_id: TaskId, task_queue: Arc<Mutex<VecDeque<TaskId>>>) -> Waker {
|
||||
Waker::from(Arc::new(TaskWaker {
|
||||
task_id,
|
||||
task_queue,
|
||||
|
|
@ -69,6 +69,7 @@ impl Wake for TaskWaker {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Executor {
|
||||
tasks: Arc<Mutex<BTreeMap<TaskId, Task>>>,
|
||||
// TODO: Consider a better datastructure for this.
|
||||
|
|
@ -78,11 +79,7 @@ pub struct Executor {
|
|||
|
||||
impl Executor {
|
||||
pub fn new() -> Executor {
|
||||
Executor {
|
||||
tasks: Arc::new(Mutex::new(BTreeMap::new())),
|
||||
task_queue: Arc::new(Mutex::new(VecDeque::new())),
|
||||
waker_cache: BTreeMap::new(),
|
||||
}
|
||||
Executor::default()
|
||||
}
|
||||
|
||||
pub fn spawn(&mut self, task: Task) {
|
||||
|
|
@ -100,7 +97,7 @@ impl Executor {
|
|||
let waker = self
|
||||
.waker_cache
|
||||
.entry(task_id)
|
||||
.or_insert_with(|| TaskWaker::new(task_id, self.task_queue.clone()));
|
||||
.or_insert_with(|| TaskWaker::create_waker(task_id, self.task_queue.clone()));
|
||||
let mut ctx = Context::from_waker(waker);
|
||||
match task.poll(&mut ctx) {
|
||||
Poll::Ready(()) => {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ where
|
|||
let raw_main = Box::into_raw(Box::new(main));
|
||||
let proc_cap = Capability::take_copy(unsafe { crate::init::SELF_PROC_CAP }).unwrap();
|
||||
let cap = syscall::thread_create(&proc_cap).unwrap();
|
||||
syscall::thread_start(&cap, entry_point as u64, raw_main as u64, 0).unwrap();
|
||||
syscall::thread_start(&cap, entry_point as usize as u64, raw_main as u64, 0).unwrap();
|
||||
|
||||
JoinHandle { cap }
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue