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:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user