diff --git a/src/kern/dpc.zig b/src/kern/dpc.zig index 61c53ca..9130175 100644 --- a/src/kern/dpc.zig +++ b/src/kern/dpc.zig @@ -11,14 +11,14 @@ pub const Dpc = struct { /// Entry into per-CPU DPC queue link: rtl.List.Entry, /// Routine to call - func: *const fn (?*anyopaque) void, + func: *const fn (*Dpc, ?*anyopaque) void, /// Argument passed to the routine arg: ?*anyopaque, /// Whether or not the DPC is currently inserted inserted: std.atomic.Value(bool), /// Initialize a DPC for `func`. - pub fn init(func: *const fn (?*anyopaque) void) Dpc { + pub fn init(func: *const fn (*Dpc, ?*anyopaque) void) Dpc { return .{ .link = undefined, .func = func, @@ -105,7 +105,7 @@ fn dispatch_queue(cpu: u32) void { dpc_cpu.lock.release(ipl); std.debug.assert(ke.ipl.current() == .Dispatch); - dpc.func(arg); + dpc.func(dpc, arg); } if (sched_cpu.start_timer) { diff --git a/src/kern/sched.zig b/src/kern/sched.zig index d7f02f7..b9bb8ec 100644 --- a/src/kern/sched.zig +++ b/src/kern/sched.zig @@ -189,7 +189,7 @@ pub fn handle_preemption(cpu: *PerCpu) void { } /// Called every time slice in DPC context. -pub fn clock(_: ?*anyopaque) void { +pub fn clock(_: *ke.Dpc, _: ?*anyopaque) void { const cpu = percpu.local(); std.debug.assert(ki.ipl.current() == .Dispatch); @@ -1019,7 +1019,7 @@ pub fn idle(_: ?*anyopaque) noreturn { /// Called every second to balance work between CPUs on CPU0. /// Takes a thread from the most loaded CPU and puts it on the least loaded one. -fn balance(_: ?*anyopaque) void { +fn balance(_: *ke.Dpc, _: ?*anyopaque) void { var high_mask = ke.CpuMask.init(false); var low_mask: ke.CpuMask = undefined; diff --git a/src/kern/timer.zig b/src/kern/timer.zig index bc561d7..7955892 100644 --- a/src/kern/timer.zig +++ b/src/kern/timer.zig @@ -138,7 +138,7 @@ pub fn clock() void { } // Called in a DPC when a timer has expired. -fn handle_expiry(_: ?*anyopaque) void { +fn handle_expiry(_: *ke.Dpc, _: ?*anyopaque) void { std.debug.assert(ki.ipl.current() == .Dispatch); const cpu = percpu.local();