mirror of
https://github.com/rdmsr/zag.git
synced 2026-11-01 23:58:21 +00:00
ke/timer: make DPC parameter explicit
This commit is contained in:
+1
-1
@@ -221,7 +221,7 @@ fn work_dpc(dpc: *ke.Dpc, _: ?*anyopaque) void {
|
|||||||
|
|
||||||
/// Enqueue a work item in `time`.
|
/// Enqueue a work item in `time`.
|
||||||
pub fn enqueue_in(item: *DelayedWorkItem, time: r.Nanoseconds) void {
|
pub fn enqueue_in(item: *DelayedWorkItem, time: r.Nanoseconds) void {
|
||||||
ke.timer.set(&item.timer, time, &item.dpc);
|
ke.timer.set(&item.timer, time, .{ .dpc = &item.dpc });
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enqueue a work item to be executed eventually.
|
/// Enqueue a work item to be executed eventually.
|
||||||
|
|||||||
+10
-2
@@ -111,13 +111,21 @@ fn dispatch_queue(cpu: u32) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sched_cpu.start_timer) {
|
if (sched_cpu.start_timer) {
|
||||||
ke.timer.set(&sched_cpu.resched_timer, std.time.ns_per_ms * config.sched_timeslice, &sched_cpu.resched_dpc);
|
ke.timer.set(
|
||||||
|
&sched_cpu.resched_timer,
|
||||||
|
std.time.ns_per_ms * config.sched_timeslice,
|
||||||
|
.{ .dpc = &sched_cpu.resched_dpc },
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sched_cpu.preemption_reason == .HigherPriority) {
|
if (sched_cpu.preemption_reason == .HigherPriority) {
|
||||||
// Reload the quantum for the new thread.
|
// Reload the quantum for the new thread.
|
||||||
ke.timer.cancel(&sched_cpu.resched_timer);
|
ke.timer.cancel(&sched_cpu.resched_timer);
|
||||||
ke.timer.set(&sched_cpu.resched_timer, std.time.ns_per_ms * config.sched_timeslice, &sched_cpu.resched_dpc);
|
ke.timer.set(
|
||||||
|
&sched_cpu.resched_timer,
|
||||||
|
std.time.ns_per_ms * config.sched_timeslice,
|
||||||
|
.{ .dpc = &sched_cpu.resched_dpc },
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
sched_cpu.start_timer = false;
|
sched_cpu.start_timer = false;
|
||||||
|
|||||||
+6
-2
@@ -683,7 +683,11 @@ comptime {
|
|||||||
/// Called on CPU 0 to initialize load balancing mechanisms.
|
/// Called on CPU 0 to initialize load balancing mechanisms.
|
||||||
pub fn late_init() linksection(r.init) void {
|
pub fn late_init() linksection(r.init) void {
|
||||||
balance_timer.init();
|
balance_timer.init();
|
||||||
ke.timer.set(&balance_timer, balance_interval * std.time.ns_per_ms, &balance_dpc);
|
ke.timer.set(
|
||||||
|
&balance_timer,
|
||||||
|
balance_interval * std.time.ns_per_ms,
|
||||||
|
.{ .dpc = &balance_dpc },
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calendar_queue_increment(cpu: *PerCpu) void {
|
fn calendar_queue_increment(cpu: *PerCpu) void {
|
||||||
@@ -1451,5 +1455,5 @@ fn balance(_: *ke.Dpc, _: ?*anyopaque) void {
|
|||||||
const offset = lcg.next() % balance_interval;
|
const offset = lcg.next() % balance_interval;
|
||||||
const ms = (balance_interval) + offset;
|
const ms = (balance_interval) + offset;
|
||||||
|
|
||||||
ke.timer.set(&balance_timer, ms * std.time.ns_per_ms, &balance_dpc);
|
ke.timer.set(&balance_timer, ms * std.time.ns_per_ms, .{ .dpc = &balance_dpc });
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-2
@@ -58,9 +58,13 @@ const percpu = ke.CpuLocal(PerCpu, .{
|
|||||||
.dpc = .init(handle_expiry),
|
.dpc = .init(handle_expiry),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const Options = struct {
|
||||||
|
dpc: ?*ke.Dpc = null,
|
||||||
|
};
|
||||||
|
|
||||||
/// Start a timer with an expiration time.
|
/// Start a timer with an expiration time.
|
||||||
/// A DPC that will be enqueued upon expiration can be passed.
|
/// A DPC that will be enqueued upon expiration can be passed.
|
||||||
pub fn set(timer: *Timer, time: r.Nanoseconds, dpc: ?*ke.Dpc) void {
|
pub fn set(timer: *Timer, time: r.Nanoseconds, opts: Options) void {
|
||||||
const ipl = timer.hdr.lock.acquire();
|
const ipl = timer.hdr.lock.acquire();
|
||||||
defer timer.hdr.lock.release(ipl);
|
defer timer.hdr.lock.release(ipl);
|
||||||
|
|
||||||
@@ -78,7 +82,7 @@ pub fn set(timer: *Timer, time: r.Nanoseconds, dpc: ?*ke.Dpc) void {
|
|||||||
timer.deadline = ke.time.read_time() + time;
|
timer.deadline = ke.time.read_time() + time;
|
||||||
|
|
||||||
timer.cpu = cpu;
|
timer.cpu = cpu;
|
||||||
timer.dpc = dpc;
|
timer.dpc = opts.dpc;
|
||||||
timer.hdr.signaled = 0;
|
timer.hdr.signaled = 0;
|
||||||
|
|
||||||
cpu.timers.insert(&timer.node);
|
cpu.timers.insert(&timer.node);
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ fn get_random_color() u32 {
|
|||||||
fn perform_delay(ms: usize) void {
|
fn perform_delay(ms: usize) void {
|
||||||
var timer: ke.Timer = undefined;
|
var timer: ke.Timer = undefined;
|
||||||
timer.init();
|
timer.init();
|
||||||
ke.timer.set(&timer, std.time.ns_per_ms * ms, null);
|
ke.timer.set(&timer, std.time.ns_per_ms * ms, .{});
|
||||||
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -34,7 +34,7 @@ fn rand(state: *u64) u64 {
|
|||||||
fn delay_ms(ms: usize) void {
|
fn delay_ms(ms: usize) void {
|
||||||
var timer: ke.Timer = undefined;
|
var timer: ke.Timer = undefined;
|
||||||
timer.init();
|
timer.init();
|
||||||
ke.timer.set(&timer, std.time.ns_per_ms * ms, null);
|
ke.timer.set(&timer, std.time.ns_per_ms * ms, .{});
|
||||||
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -41,7 +41,7 @@ fn seed_from(param: ?*anyopaque) u64 {
|
|||||||
fn delay_ms(ms: usize) void {
|
fn delay_ms(ms: usize) void {
|
||||||
var timer: ke.Timer = undefined;
|
var timer: ke.Timer = undefined;
|
||||||
timer.init();
|
timer.init();
|
||||||
ke.timer.set(&timer, std.time.ns_per_ms * ms, null);
|
ke.timer.set(&timer, std.time.ns_per_ms * ms, .{});
|
||||||
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ fn seed_from(param: ?*anyopaque) u64 {
|
|||||||
fn delay_ms(ms: usize) void {
|
fn delay_ms(ms: usize) void {
|
||||||
var timer: ke.Timer = undefined;
|
var timer: ke.Timer = undefined;
|
||||||
timer.init();
|
timer.init();
|
||||||
ke.timer.set(&timer, std.time.ns_per_ms * ms, null);
|
ke.timer.set(&timer, std.time.ns_per_ms * ms, .{});
|
||||||
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ fn rand(state: *u64) u64 {
|
|||||||
fn delay_ms(ms: usize) void {
|
fn delay_ms(ms: usize) void {
|
||||||
var timer: ke.Timer = undefined;
|
var timer: ke.Timer = undefined;
|
||||||
timer.init();
|
timer.init();
|
||||||
ke.timer.set(&timer, std.time.ns_per_ms * ms, null);
|
ke.timer.set(&timer, std.time.ns_per_ms * ms, .{});
|
||||||
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
_ = ke.wait.wait_one(&timer.hdr, null) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user