fix(pl): pin idle threads

This commit is contained in:
Loïc Grégoire
2026-05-02 12:12:56 -04:00
parent cfeb120410
commit 22b8a17d7e
2 changed files with 8 additions and 1 deletions
+1
View File
@@ -44,6 +44,7 @@ fn make_thread(entrypoint: *const fn (?*anyopaque) void, stack: usize) *ke.Threa
td.priority = 0;
td.priority_class = .Idle;
td.pinned = true;
return td;
}
+7 -1
View File
@@ -103,6 +103,7 @@ fn make_thread(entrypoint: *const fn (?*anyopaque) void, td: *ke.Thread) void {
td.priority = 0;
td.priority_class = .Idle;
td.pinned = true;
}
var cpus_up = std.atomic.Value(usize).init(0);
@@ -115,6 +116,7 @@ fn other_cpu_entry(_: ?*anyopaque) callconv(.c) ?*anyopaque {
ki.cpu.init_cpu(@intCast(my_cpu_id));
ki.sched.percpu.local().current_thread = percpu.local().td;
ki.sched.percpu.local().idle_thread = percpu.local().td;
timer.init_cpu();
@@ -125,7 +127,11 @@ fn other_cpu_entry(_: ?*anyopaque) callconv(.c) ?*anyopaque {
var cpu: ke.Cpu linksection(r.percpu) = undefined;
fn idle(_: ?*anyopaque) void {}
fn idle(_: ?*anyopaque) void {
while (true) {
std.atomic.spinLoopHint();
}
}
extern var __percpu_start: u8;
extern var __percpu_end: u8;