fix device-manager: debug prefix

This commit is contained in:
Daniel Samson
2026-07-13 05:21:08 +01:00
parent 849b4b62d4
commit d89657d0a4
@@ -191,7 +191,7 @@ fn addChild(parent: u64, bus_address: u64, identity: u64, device_id: u64, report
fn pruneChildrenOf(reporter: u32) void { fn pruneChildrenOf(reporter: u32) void {
for (&children) |*child| { for (&children) |*child| {
if (child.used and child.reporter == reporter) { if (child.used and child.reporter == reporter) {
writeLine("device-manager: child removed (device {d} port {d})\n", .{ child.parent, child.bus_address }); writeLine("system/services/device-manager: child removed (device {d} port {d})\n", .{ child.parent, child.bus_address });
child.used = false; child.used = false;
const event = protocol.ChildRemoved{ .parent = child.parent, .bus_address = child.bus_address }; const event = protocol.ChildRemoved{ .parent = child.parent, .bus_address = child.bus_address };
publishEvent(std.mem.asBytes(&event)); publishEvent(std.mem.asBytes(&event));
@@ -238,7 +238,7 @@ fn addDriver(name: []const u8, device_id: u64, speaks_protocol: bool) void {
spawnDriver(driver); spawnDriver(driver);
return; return;
} }
writeLine("device-manager: driver table full; cannot supervise {s}\n", .{name}); writeLine("system/services/device-manager: driver table full; cannot supervise {s}\n", .{name});
} }
/// (Re)spawn a driver instance: supervised on the manager's own endpoint, the /// (Re)spawn a driver instance: supervised on the manager's own endpoint, the
@@ -253,7 +253,7 @@ fn spawnDriver(driver: *Driver) void {
argument_count = 1; argument_count = 1;
} }
const child = system.spawnSupervised(driver.name(), arguments[0..argument_count], manager_endpoint) orelse { const child = system.spawnSupervised(driver.name(), arguments[0..argument_count], manager_endpoint) orelse {
writeLine("device-manager: failed to spawn {s}\n", .{driver.name()}); writeLine("system/services/device-manager: failed to spawn {s}\n", .{driver.name()});
driver.state = .failed; driver.state = .failed;
return; return;
}; };
@@ -267,9 +267,9 @@ fn spawnDriver(driver: *Driver) void {
driver.state = .running; driver.state = .running;
} }
if (driver.device_id != protocol.no_device) { if (driver.device_id != protocol.no_device) {
writeLine("device-manager: spawned {s} for device {d}\n", .{ driver.name(), driver.device_id }); writeLine("system/services/device-manager: spawned {s} for device {d}\n", .{ driver.name(), driver.device_id });
} else { } else {
writeLine("device-manager: spawned {s}\n", .{driver.name()}); writeLine("system/services/device-manager: spawned {s}\n", .{driver.name()});
} }
} }
@@ -281,7 +281,7 @@ fn onDriverExit(driver: *Driver) void {
const reason = runtime.process.exitReason(driver.process_id) orelse .fault; const reason = runtime.process.exitReason(driver.process_id) orelse .fault;
if (reason == .exited) { if (reason == .exited) {
driver.state = .stopped; driver.state = .stopped;
writeLine("device-manager: {s} exited cleanly; not restarting\n", .{driver.name()}); writeLine("system/services/device-manager: {s} exited cleanly; not restarting\n", .{driver.name()});
return; return;
} }
const now = system.clock(); const now = system.clock();
@@ -289,13 +289,13 @@ fn onDriverExit(driver: *Driver) void {
driver.restarts = if (alive_ns < fast_death_ns) driver.restarts + 1 else 1; driver.restarts = if (alive_ns < fast_death_ns) driver.restarts + 1 else 1;
if (driver.restarts >= crash_loop_cap) { if (driver.restarts >= crash_loop_cap) {
driver.state = .failed; driver.state = .failed;
writeLine("device-manager: {s} is failing repeatedly (crash loop); giving up\n", .{driver.name()}); writeLine("system/services/device-manager: {s} is failing repeatedly (crash loop); giving up\n", .{driver.name()});
return; return;
} }
const delay_ms = backoff_base_ms << @intCast(driver.restarts - 1); const delay_ms = backoff_base_ms << @intCast(driver.restarts - 1);
driver.state = .restarting; driver.state = .restarting;
driver.restart_due_ns = now + delay_ms * 1_000_000; driver.restart_due_ns = now + delay_ms * 1_000_000;
writeLine("device-manager: restarting {s} in {d} ms (died: {s})\n", .{ driver.name(), delay_ms, @tagName(reason) }); writeLine("system/services/device-manager: restarting {s} in {d} ms (died: {s})\n", .{ driver.name(), delay_ms, @tagName(reason) });
_ = system.timerOnce(manager_endpoint, delay_ms + 50); _ = system.timerOnce(manager_endpoint, delay_ms + 50);
} }
@@ -306,7 +306,7 @@ fn onDriverExit(driver: *Driver) void {
fn sweepDeadlines() void { fn sweepDeadlines() void {
const now = system.clock(); const now = system.clock();
if (test_kill_pid != 0 and now >= test_kill_due_ns) { if (test_kill_pid != 0 and now >= test_kill_due_ns) {
writeLine("device-manager: test mode: killing the reporter\n", .{}); writeLine("system/services/device-manager: test mode: killing the reporter\n", .{});
_ = system.kill(test_kill_pid); _ = system.kill(test_kill_pid);
test_kill_pid = 0; test_kill_pid = 0;
} }
@@ -314,7 +314,7 @@ fn sweepDeadlines() void {
if (!driver.used) continue; if (!driver.used) continue;
switch (driver.state) { switch (driver.state) {
.awaiting_hello => if (now >= driver.hello_deadline_ns) { .awaiting_hello => if (now >= driver.hello_deadline_ns) {
writeLine("device-manager: {s} missed its hello deadline\n", .{driver.name()}); writeLine("system/services/device-manager: {s} missed its hello deadline\n", .{driver.name()});
_ = system.kill(driver.process_id); _ = system.kill(driver.process_id);
// The exit notification finishes the job via onDriverExit. // The exit notification finishes the job via onDriverExit.
}, },
@@ -331,7 +331,7 @@ fn initialise(endpoint: runtime.ipc.Handle) bool {
// Enumerate into a heap buffer (too big for the one-page user stack). // Enumerate into a heap buffer (too big for the one-page user stack).
const buffer = runtime.allocator().alloc(device.DeviceDescriptor, 64) catch { const buffer = runtime.allocator().alloc(device.DeviceDescriptor, 64) catch {
_ = runtime.system.write("device-manager: out of memory\n"); _ = runtime.system.write("system/services/device-manager: out of memory\n");
return false; return false;
}; };
const total = device.enumerate(buffer); const total = device.enumerate(buffer);
@@ -372,9 +372,9 @@ fn initialise(endpoint: runtime.ipc.Handle) bool {
} }
if (matched == 0) { if (matched == 0) {
_ = runtime.system.write("device-manager: no matchable devices\n"); _ = runtime.system.write("system/services/device-manager: no matchable devices\n");
} else { } else {
_ = runtime.system.write("device-manager: ok\n"); _ = runtime.system.write("system/services/device-manager: ok\n");
} }
return true; return true;
} }
@@ -395,13 +395,13 @@ fn onMessage(message: []const u8, reply: []u8, sender: u32, capability: ?runtime
var status: i32 = 0; var status: i32 = 0;
if (hello.version != protocol.version) { if (hello.version != protocol.version) {
status = -1; status = -1;
writeLine("device-manager: refused hello (version {d}) from process {d}\n", .{ hello.version, sender }); writeLine("system/services/device-manager: refused hello (version {d}) from process {d}\n", .{ hello.version, sender });
} else if (driverByProcess(sender)) |driver| { } else if (driverByProcess(sender)) |driver| {
driver.state = .running; driver.state = .running;
writeLine("device-manager: hello from {s} (device {d})\n", .{ driver.name(), hello.device_id }); writeLine("system/services/device-manager: hello from {s} (device {d})\n", .{ driver.name(), hello.device_id });
} else { } else {
status = -1; status = -1;
writeLine("device-manager: hello from unknown process {d}\n", .{sender}); writeLine("system/services/device-manager: hello from unknown process {d}\n", .{sender});
} }
const hello_reply = protocol.HelloReply{ .status = status }; const hello_reply = protocol.HelloReply{ .status = status };
@memcpy(reply[0..protocol.reply_size], std.mem.asBytes(&hello_reply)); @memcpy(reply[0..protocol.reply_size], std.mem.asBytes(&hello_reply));
@@ -417,7 +417,7 @@ fn onChildAdded(message: []const u8, reply: []u8, sender: u32) usize {
var status: i32 = 0; var status: i32 = 0;
if (driverByProcess(sender)) |driver| { if (driverByProcess(sender)) |driver| {
if (!addChild(report.parent, report.bus_address, report.identity, report.device_id, sender)) status = -1; if (!addChild(report.parent, report.bus_address, report.identity, report.device_id, sender)) status = -1;
writeLine("device-manager: child added (device {d} port {d}, identity {d}) by {s}\n", .{ report.parent, report.bus_address, report.identity, driver.name() }); writeLine("system/services/device-manager: child added (device {d} port {d}, identity {d}) by {s}\n", .{ report.parent, report.bus_address, report.identity, driver.name() });
if (status == 0) publishEvent(message[0..protocol.child_added_size]); if (status == 0) publishEvent(message[0..protocol.child_added_size]);
// Matching from reports (M19.3): a registered child whose identity // Matching from reports (M19.3): a registered child whose identity
// names a driver gets one, once — re-reports after a bus restart // names a driver gets one, once — re-reports after a bus restart
@@ -478,7 +478,7 @@ fn onChildRemoved(message: []const u8, reply: []u8, sender: u32) usize {
var status: i32 = -1; var status: i32 = -1;
for (&children) |*child| { for (&children) |*child| {
if (child.used and child.parent == report.parent and child.bus_address == report.bus_address and child.reporter == sender) { if (child.used and child.parent == report.parent and child.bus_address == report.bus_address and child.reporter == sender) {
writeLine("device-manager: child removed (device {d} port {d})\n", .{ child.parent, child.bus_address }); writeLine("system/services/device-manager: child removed (device {d} port {d})\n", .{ child.parent, child.bus_address });
child.used = false; child.used = false;
status = 0; status = 0;
} }