diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-27 18:37:20 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-27 18:37:20 +0200 |
commit | a200fa0e806ef63e1702c0162a18b6c0513d8aa3 (patch) | |
tree | a447530bad5951d71bec631619f337d60cdb96b0 /src | |
parent | 58c2f4df96b2e71c862d12bdeaf85ac58c3b8061 (diff) |
process: Remove 'suspended' state, instead requiring an entry point for thread creation
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/process.zig | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig index c167363..10d6c89 100644 --- a/src/lib/process.zig +++ b/src/lib/process.zig @@ -11,6 +11,7 @@ const rethooks = @import("rethooks.zig"); const time = @import("sbi/time.zig"); const trap = @import("trap.zig"); +const Allocator = std.mem.Allocator; const elf = std.elf; pub const schedule_interval_millis = 1; @@ -48,12 +49,11 @@ pub const State = enum(u8) { waiting, active, sleeping, - suspended, terminated, }; pub const Info = struct { - allocator: std.mem.Allocator, + allocator: Allocator, id: u16, thread_id: usize, trap_frame: trap.Frame, @@ -67,7 +67,7 @@ pub const Info = struct { return self.page_table.satp(self.id); } - pub fn createThread(self: *const Info, allocator: ?std.mem.Allocator) !*Info { + pub fn createThread(self: *const Info, allocator: ?Allocator, entry: usize) !*Info { const alloc = allocator orelse self.allocator; var trap_frame = std.mem.zeroInit(trap.Frame, .{}); @@ -91,10 +91,10 @@ pub const Info = struct { .trap_frame = trap_frame, .pages = self.pages, .stack = stack, - .pc = self.pc, + .pc = entry, .cleanup_hook = null, .page_table = self.page_table, - .state = .suspended, + .state = .waiting, }; const proc_node = try alloc.create(std.DoublyLinkedList(Info).Node); @@ -229,7 +229,7 @@ pub fn switchTo(proc: *Info) noreturn { const HdrBuf = *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8; -pub fn create(allocator: std.mem.Allocator, elf_buf: []align(@alignOf(elf.Elf64_Ehdr)) const u8) !*Info { +pub fn create(allocator: Allocator, elf_buf: []align(@alignOf(elf.Elf64_Ehdr)) const u8) !*Info { if (elf_buf.len < @sizeOf(elf.Elf64_Ehdr)) return ExeError.TooSmall; const hdr_buf: HdrBuf = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)]; @@ -313,7 +313,7 @@ pub fn create(allocator: std.mem.Allocator, elf_buf: []align(@alignOf(elf.Elf64_ return &proc_node.data; } -pub fn runInit(allocator: std.mem.Allocator, reader: anytype) !noreturn { +pub fn runInit(allocator: Allocator, reader: anytype) !noreturn { var file_name_buffer: [4096]u8 = undefined; var link_name_buffer: [4096]u8 = undefined; |