From e1633e77072bc72c224c028f5e199ea1b10d90e3 Mon Sep 17 00:00:00 2001 From: Chaoqun Zheng <1667510710@qq.com> Date: Mon, 8 Dec 2025 09:48:24 +0800 Subject: [PATCH] Add some stubs for `madvise`. --- .../syscall-flag-coverage/memory-management/README.md | 8 ++++---- .../syscall-flag-coverage/memory-management/madvise.scml | 3 +++ kernel/src/syscall/madvise.rs | 9 +++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/README.md b/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/README.md index 6ce7b35bc..256c4fb3e 100644 --- a/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/README.md +++ b/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/README.md @@ -90,18 +90,18 @@ Supported functionality in SCML: Silently-ignored advice: * `MADV_DONTNEED` +* `MADV_NOHUGEPAGE` +* `MADV_HUGEPAGE` +* `MADV_MERGEABLE` +* `MADV_DONTFORK` Unsupported advice: * `MADV_RANDOM` * `MADV_REMOVE` -* `MADV_DONTFORK` * `MADV_DOFORK` * `MADV_HWPOISON` -* `MADV_MERGEABLE` * `MADV_UNMERGEABLE` * `MADV_SOFT_OFFLINE` -* `MADV_HUGEPAGE` -* `MADV_NOHUGEPAGE` * `MADV_DONTDUMP` * `MADV_DODUMP` * `MADV_FREE` diff --git a/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/madvise.scml b/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/madvise.scml index 2f7af0ef8..808250902 100644 --- a/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/madvise.scml +++ b/book/src/kernel/linux-compatibility/syscall-flag-coverage/memory-management/madvise.scml @@ -6,3 +6,6 @@ madvise(addr, length, advice = MADV_SEQUENTIAL); // Prefetch pages for near-future access to reduce latency madvise(addr, length, advice = MADV_WILLNEED); + +// Mark pages for lazy reclamation to allow the kernel to free them under memory pressure +madvise(addr, length, advice = MADV_FREE); \ No newline at end of file diff --git a/kernel/src/syscall/madvise.rs b/kernel/src/syscall/madvise.rs index bafb56b86..771b51d05 100644 --- a/kernel/src/syscall/madvise.rs +++ b/kernel/src/syscall/madvise.rs @@ -48,6 +48,15 @@ pub fn sys_madvise( MadviseBehavior::MADV_NOHUGEPAGE => { warn!("MADV_NOHUGEPAGE isn't implemented, do nothing for now"); } + MadviseBehavior::MADV_HUGEPAGE => { + warn!("MADV_HUGEPAGE isn't implemented, do nothing for now"); + } + MadviseBehavior::MADV_MERGEABLE => { + warn!("MADV_MERGEABLE isn't implemented, do nothing for now"); + } + MadviseBehavior::MADV_DONTFORK => { + warn!("MADV_DONTFORK isn't implemented, do nothing for now"); + } _ => todo!(), } Ok(SyscallReturn::Return(0))