From 22b8a17d7eba139a1397aabd93be5ca82658cc3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Sat, 2 May 2026 12:12:56 -0400 Subject: [PATCH] fix(pl): pin idle threads --- src/platform/pc/smp.zig | 1 + src/platform/um/impl.zig | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/platform/pc/smp.zig b/src/platform/pc/smp.zig index ab949cd..f2be00e 100644 --- a/src/platform/pc/smp.zig +++ b/src/platform/pc/smp.zig @@ -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; } diff --git a/src/platform/um/impl.zig b/src/platform/um/impl.zig index a7e6e18..0d32fa7 100644 --- a/src/platform/um/impl.zig +++ b/src/platform/um/impl.zig @@ -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;