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

@@ -8,7 +8,7 @@ use userspace::syscall;
#[unsafe(no_mangle)]
extern "C" fn main() {
let ep = CapSlot::new(0).unwrap();
let ep = CapSlot::const_new(0);
let (w0, w1, w2, w3) = syscall::receive(ep);
syscall::send(ep, w0.wrapping_add(1), w1, w2, w3);

View File

@@ -8,7 +8,7 @@ use types::bounded::CapSlot;
use types::time::Ticks;
use userspace_rt::syscall;
fn input_ep() -> CapSlot { CapSlot::new(0).unwrap() }
const INPUT_EP: CapSlot = CapSlot::const_new(0);
const TICK_DELAY: u64 = 2_000_000;
fn putchar(c: u8) { syscall::debug_putchar(c); }
@@ -117,8 +117,8 @@ fn render_game(snake: &Snake) {
}
fn handle_input(snake: &mut Snake) {
let _ = syscall::send(input_ep(), 0, 0, 0, 0);
let (tag, kind, _, _) = syscall::receive(input_ep());
let _ = syscall::send(INPUT_EP, 0, 0, 0, 0);
let (tag, kind, _, _) = syscall::receive(INPUT_EP);
if tag == 1 {
match kind {