aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-27 18:37:20 +0200
committerHimbeer <himbeer@disroot.org>2024-07-27 18:37:20 +0200
commita200fa0e806ef63e1702c0162a18b6c0513d8aa3 (patch)
treea447530bad5951d71bec631619f337d60cdb96b0 /src
parent58c2f4df96b2e71c862d12bdeaf85ac58c3b8061 (diff)
process: Remove 'suspended' state, instead requiring an entry point for thread creation
Diffstat (limited to 'src')
-rw-r--r--src/lib/process.zig14
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;