fix: full init boot logic works — CreateProcess no longer spawns threads, boot uses out-param to avoid sret bug

- CreateProcess only creates process + grants cap, no thread spawning
- boot::boot takes &mut BootResult instead of returning it (fixes -> ! sret convention issue)
- Init creates 6 server processes, sets up supervisor, enters receive loop
- No faults on QEMU with full boot sequence
This commit is contained in:
2026-10-18 04:57:20 +02:00
parent 29cd0e7dfe
commit ffde4065ba
3 changed files with 27 additions and 35 deletions

View File

@@ -56,27 +56,6 @@ impl<P: Platform> Kernel<P> {
self.process_memory[new_pid.raw() as usize] =
Some(domain::memory::process_memory::ProcessMemory::new(new_pid, 1024));
let priority = types::bounded::Priority::new(16)
.unwrap_or_else(|| unreachable!());
let time_slice = types::time::TimeSlice::new(100);
let tid = match self.threads.spawn(new_pid, priority, time_slice, None) {
Ok(t) => t,
Err(e) => {
let _ = self.processes.destroy(new_pid);
return SyscallOutcome::Complete(SyscallResult::Error(e));
}
};
if let Err(e) = self.processes.get_mut(new_pid).and_then(|p| p.add_thread(tid)) {
let _ = self.threads.destroy(tid);
let _ = self.processes.destroy(new_pid);
return SyscallOutcome::Complete(SyscallResult::Error(e));
}
let core = self.platform.core_id();
self.scheduler.add(tid, priority, core);
let slot = match self.grant_cap(
caller_pid,
domain::resource::Resource::Process(new_pid),