mirror of
https://github.com/rdmsr/zag.git
synced 2026-10-27 13:58:20 +00:00
ke: make DPC handlers take in DPC pointer as parameter
This commit is contained in:
+3
-3
@@ -11,14 +11,14 @@ pub const Dpc = struct {
|
|||||||
/// Entry into per-CPU DPC queue
|
/// Entry into per-CPU DPC queue
|
||||||
link: rtl.List.Entry,
|
link: rtl.List.Entry,
|
||||||
/// Routine to call
|
/// Routine to call
|
||||||
func: *const fn (?*anyopaque) void,
|
func: *const fn (*Dpc, ?*anyopaque) void,
|
||||||
/// Argument passed to the routine
|
/// Argument passed to the routine
|
||||||
arg: ?*anyopaque,
|
arg: ?*anyopaque,
|
||||||
/// Whether or not the DPC is currently inserted
|
/// Whether or not the DPC is currently inserted
|
||||||
inserted: std.atomic.Value(bool),
|
inserted: std.atomic.Value(bool),
|
||||||
|
|
||||||
/// Initialize a DPC for `func`.
|
/// 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 .{
|
return .{
|
||||||
.link = undefined,
|
.link = undefined,
|
||||||
.func = func,
|
.func = func,
|
||||||
@@ -105,7 +105,7 @@ fn dispatch_queue(cpu: u32) void {
|
|||||||
dpc_cpu.lock.release(ipl);
|
dpc_cpu.lock.release(ipl);
|
||||||
std.debug.assert(ke.ipl.current() == .Dispatch);
|
std.debug.assert(ke.ipl.current() == .Dispatch);
|
||||||
|
|
||||||
dpc.func(arg);
|
dpc.func(dpc, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sched_cpu.start_timer) {
|
if (sched_cpu.start_timer) {
|
||||||
|
|||||||
+2
-2
@@ -189,7 +189,7 @@ pub fn handle_preemption(cpu: *PerCpu) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Called every time slice in DPC context.
|
/// Called every time slice in DPC context.
|
||||||
pub fn clock(_: ?*anyopaque) void {
|
pub fn clock(_: *ke.Dpc, _: ?*anyopaque) void {
|
||||||
const cpu = percpu.local();
|
const cpu = percpu.local();
|
||||||
std.debug.assert(ki.ipl.current() == .Dispatch);
|
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.
|
/// 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.
|
/// 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 high_mask = ke.CpuMask.init(false);
|
||||||
var low_mask: ke.CpuMask = undefined;
|
var low_mask: ke.CpuMask = undefined;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -138,7 +138,7 @@ pub fn clock() void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called in a DPC when a timer has expired.
|
// 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);
|
std.debug.assert(ki.ipl.current() == .Dispatch);
|
||||||
const cpu = percpu.local();
|
const cpu = percpu.local();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user