init: Use getThreadId() instead of relying on a fixed PID

This commit is contained in:
Gabriel 2025-02-22 23:01:48 +01:00
parent aad9b8119b
commit d3231f1362

View File

@ -7,14 +7,12 @@ const buffer = system.ring_buffer;
// FIXME: Make arch-specific. // FIXME: Make arch-specific.
const PAGE_SIZE = 4096; const PAGE_SIZE = 4096;
const SELF_PID = 1;
fn setupKernelRingBuffer(base: u64) !buffer.RingBuffer { fn setupKernelRingBuffer(base: u64) !buffer.RingBuffer {
const phys = vm.PhysFrame{ .address = try syscalls.allocFrame() }; const phys = vm.PhysFrame{ .address = try syscalls.allocFrame() };
const data: [*]u8 = @ptrCast(phys.virtualPointer(u8, base)); const data: [*]u8 = @ptrCast(phys.virtualPointer(u8, base));
try syscalls.setEventQueue(SELF_PID, phys.address); try syscalls.setEventQueue(syscalls.getThreadId(), phys.address);
return buffer.RingBuffer.init(data, PAGE_SIZE, true); return buffer.RingBuffer.init(data, PAGE_SIZE, true);
} }
@ -23,9 +21,8 @@ fn setTokens() void {
var tokens: u64 = 0; var tokens: u64 = 0;
tokens |= @intFromEnum(system.kernel.Token.Root); tokens |= @intFromEnum(system.kernel.Token.Root);
tokens |= @intFromEnum(system.kernel.Token.PhysicalMemory); tokens |= @intFromEnum(system.kernel.Token.PhysicalMemory);
tokens |= @intFromEnum(system.kernel.Token.EventQueue); tokens |= @intFromEnum(system.kernel.Token.CreateProcess);
tokens |= @intFromEnum(system.kernel.Token.VirtualMemory); syscalls.setTokens(syscalls.getThreadId(), tokens) catch {};
syscalls.setTokens(SELF_PID, tokens) catch {};
} }
export fn _start(base: u64, address: u64) callconv(.C) noreturn { export fn _start(base: u64, address: u64) callconv(.C) noreturn {