Sync computers
This commit is contained in:
@@ -14,7 +14,7 @@ use crate::{
|
||||
read_csr,
|
||||
riscv::disable_interrupt,
|
||||
scheduler::scheduler_without_ret,
|
||||
set_csr,
|
||||
set_csr, syscall,
|
||||
time::{setup_next_timer_interrupt, IRQ_M_TIMER},
|
||||
write_csr,
|
||||
};
|
||||
@@ -57,7 +57,6 @@ unsafe extern "C" fn machine_trap_handler(
|
||||
c if c == EextensionID::Time as usize => match fid {
|
||||
c if c == TimerFunctionID::SetTimer as usize => {
|
||||
clear_csr!(mip, 1 << 5);
|
||||
// setup_next_timer_interrupt();
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
@@ -122,16 +121,21 @@ unsafe extern "C" fn supervisor_trap_handler(
|
||||
let a3: u64 = unsafe { (*interrupt_state).a[3] };
|
||||
let syscall: SysCall = syscall_u64.into();
|
||||
match syscall {
|
||||
SysCall::Open => {
|
||||
let path = unsafe { str::from_raw_parts(a1 as *const u8, a2 as usize) };
|
||||
let fd = syscall::open(path, false);
|
||||
unsafe { (*interrupt_state).a[0] = fd.unwrap() };
|
||||
}
|
||||
SysCall::Alloc => {
|
||||
let layout = Layout::from_size_align(a1 as usize, a2 as usize).unwrap();
|
||||
// Allocate memory and put the pointer in a0
|
||||
unsafe { (*interrupt_state).a[0] = alloc::alloc::alloc(layout) as u64 };
|
||||
unsafe { (*interrupt_state).a[0] = syscall::alloc(layout) as u64 };
|
||||
}
|
||||
SysCall::Dealloc => {
|
||||
let ptr = a1 as *mut u8;
|
||||
let layout = Layout::from_size_align(a2 as usize, a3 as usize).unwrap();
|
||||
// Free memory
|
||||
unsafe { alloc::alloc::dealloc(ptr, layout) };
|
||||
unsafe { syscall::dealloc(ptr, layout) };
|
||||
}
|
||||
SysCall::Exit => exit_process(&mut interrupt_state),
|
||||
SysCall::NanoSleep => sleep(Duration::new(a1, a2 as u32), &mut interrupt_state),
|
||||
|
||||
Reference in New Issue
Block a user