fix: sync kernel tests with current API, add CapSlot::const_new

Tests:
- IPC tests: spawn thread B explicitly (CreateProcess no longer
  spawns threads since the boot logic fix)
- Memory tests: RequestPages now returns Value(va) not Slot(cap)
- MockPlatform: tracks VA→PA mappings for translate_va
- ReleasePages test: ignored (RequestPages no longer creates
  regions — ReleasePages needs redesign)

CapSlot::const_new(value):
- const fn that panics at compile time for invalid values
- Replaces CapSlot::new(N).unwrap() in init, echo, snake
- Cap slot constants are now compile-time verified

Also fixes handle_release_pages to use translate_va instead of
treating VA as PA directly.

35 kernel tests pass, 1 ignored.
This commit is contained in:
2026-10-18 22:17:42 +02:00
parent a3b15e5264
commit 61e28f0af5
8 changed files with 72 additions and 46 deletions

View File

@@ -92,7 +92,12 @@ impl<P: Platform> Kernel<P> {
count: types::bounded::PageCount,
) -> SyscallOutcome {
let pages = count.value() as usize;
let phys = PhysicalAddress::from_raw(addr.raw());
let phys = match self.platform.translate_va(pid, addr) {
Some(pa) => pa,
None => return SyscallOutcome::Complete(SyscallResult::Error(
domain::error::KernelError::OutOfMemory,
)),
};
let region_id = match self.regions.find_by_base(pid, phys) {
Some((rid, _)) => rid,