diff --git a/kernel/src/syscall/sysinfo.rs b/kernel/src/syscall/sysinfo.rs index 6856efcb..8d501966 100644 --- a/kernel/src/syscall/sysinfo.rs +++ b/kernel/src/syscall/sysinfo.rs @@ -1,11 +1,34 @@ // SPDX-License-Identifier: MPL-2.0 use super::SyscallReturn; +use crate::prelude::*; +use aster_time::read_monotonic_time; + +#[derive(Debug, Default, Clone, Copy, Pod)] +#[repr(C)] +pub struct sysinfo { + uptime: i64, + loads: [u64; 3], + totalram: u64, + freeram: u64, + sharedram: u64, + bufferram: u64, + totalswap: u64, + freeswap: u64, + procs: u16, + totalhigh: u64, + freehigh: u64, + mem_unit: u32 +} pub fn sys_sysinfo( sysinfo_addr: Vaddr, ctx: &Context, ) -> Result { - unimplemented!("sysinfo implementation in process"); - Ok(SyscallReturn::Return(-1)) -} \ No newline at end of file + let info = sysinfo { + uptime: read_monotonic_time().as_secs() as i64, + ..Default::default() // TODO: add other system information + }; + ctx.user_space().write_val(sysinfo_addr, &info)?; + Ok(SyscallReturn::Return(0)) +} diff --git a/test/syscall_test/Makefile b/test/syscall_test/Makefile index 98d577fb..e793e536 100644 --- a/test/syscall_test/Makefile +++ b/test/syscall_test/Makefile @@ -47,6 +47,7 @@ TESTS ?= \ statfs_test \ symlink_test \ sync_test \ + sysinfo_test \ timers_test \ truncate_test \ uidgid_test \ diff --git a/test/syscall_test/blocklists/sysinfo_test b/test/syscall_test/blocklists/sysinfo_test new file mode 100644 index 00000000..772d881a --- /dev/null +++ b/test/syscall_test/blocklists/sysinfo_test @@ -0,0 +1,4 @@ +SysinfoTest.TotalRamSaneValue +SysinfoTest.MemunitSet +SysinfoTest.FreeRamSaneValue +SysinfoTest.NumProcsSaneValue \ No newline at end of file