summaryrefslogtreecommitdiff
path: root/src/kernel
AgeCommit message (Collapse)Author
2022-08-06make snprintf shared; dynamic resolution supportdzwdz
2022-08-05add _syscall_getsizedzwdz
2022-08-05move the mount_resolve test to userland, remove the kernel selftestsdzwdz
2022-08-05move path_simplify to shared code, move its tests to userlanddzwdz
2022-08-04move the kernel util tests to userlanddzwdz
2022-08-04do some simple TODOs, organize the rest; general code maintainancedzwdz
2022-08-04syscalls: add _syscall_sleep()dzwdz
2022-08-03amd64: cleanup the irq code, #define the magic numbersdzwdz
2022-08-03kernel: reuse a single allocation for all vfs_requests of a processdzwdz
$ iostress 32 512 0 > /vtty # before 512 calls, 0 bytes. avg 121133 $ iostress 32 512 0 > /vtty # after 512 calls, 0 bytes. avg 103540 103540/121133 = ~85% I think the tiny bit of added complexity is worth it here.
2022-08-03shared: clean up printf, %u support (amongst other things)dzwdz
2022-08-01amd64: remove the VGA text mode driverdzwdz
2022-08-01amd64: /video/b device, provided by grubdzwdz
2022-07-29syscall/write: WRITE_TRUNCATEdzwdz
2022-07-29syscall: up the max argument count to 5; make write accept flagsdzwdz
2022-07-29use a shared fs_normslice() function to handle offsetsdzwdz
2022-07-27kernel/vfs: fix assert failure when creating a vfsreq to a dead mountdzwdz
2022-07-26shared: move some headers from shared/ to camellia/dzwdz
2022-07-26tools: add tools/sort_includes.rbdzwdz
2022-07-25kernel: cleaner and more compact stacktracesdzwdz
2022-07-23kernel: switch processes after execbuf_syscalldzwdz
2022-07-23init: compile as an elfdzwdz
2022-07-21fix type-related compiler warningsdzwdz
2022-07-20user/elf: free memory not belonging to the elf when jumping to itdzwdz
2022-07-20syscall/execbuf: EXECBUF_JMPdzwdz
2022-07-18syscalls: implement execbufdzwdz
i have been planning to implement something like this for a while now. it should be faster when doing consecutive syscalls (to be tested). it will also be helpful in writing the elf loader
2022-07-17amd64: ensure all addresses are canonicaldzwdz
2022-07-17kernel/virt_cpy: error struct, better error handlingdzwdz
2022-07-17amd64: remove dead code, combine shared codedzwdz
2022-07-16amd64: all tests passdzwdz
2022-07-16amd64: back at the shell!dzwdz
2022-07-16amd64: init can print to the terminal nowdzwdz
2022-07-16amd64: seemingly working syscalls (SYSCALL/SYSRET)dzwdz
2022-07-16amd64: just enough paging support to map initdzwdz
2022-07-16amd64: barely boot into kernel codedzwdz
2022-07-15i686: stop using pushal/popal in sysenter/sysexitdzwdz
2022-07-15i386/isr: don't use pushal; push registers manuallydzwdz
2022-07-14kernel/driver/serial: allow writes even with pending readsdzwdz
2022-07-12remove the incorrect OPEN_CREATE guards in fs driversdzwdz
2022-07-10syscalls: implement dupdzwdz
2022-07-10kernel: implement killing processes stuck on pipesdzwdz
2022-07-09kernel/pipes: process queueingdzwdz
2022-07-09syscalls/pipe: turn into a POSIX-style api with separate rw endsdzwdz
Without separate read/write ends you can't tell when there are no more writers left if you have multiple readers. Consider this piece of code: int fd = pipe(); fork(); // execution continues in 2 processes while (read(fd, &some_buf, sizeof somebuf) >= 0) { ... } Once both processes call `read()`, it's obvious that no writes are possible - all the processes that hold a reference to the pipe are currently stuck on a `read()` call, so the kernel could just make it return an error in both. But, what then? It's still possible to write to the pipe, and you can't know if the other process will do that. Thus, if you don't want to miss any output, you have to keep reading the pipe. Forever. Both processes end up stuck. Having separate read/write ends prevents that.
2022-07-08kernel/proc: remove the type argument from process_handle_getdzwdz
2022-07-08kernel/syscalls: fix the SYSCALL_RETURN macro for returning pointersdzwdz
2022-07-08kernel/fsroot: use req_preprocess to calculate offsets everywheredzwdz
2022-07-08syscall/fs_respond: get the file id from the buf argumentdzwdz
Previously, file ids could only be positive integers, so their range was 31 bits - not enough to represent the entire memory. Now, pointers can be safely used as file ids.
2022-07-07kernel: add the vfsreq_finish_short shorthand functiondzwdz
2022-07-07kernel/vfs: delegate support in _syscall_fs_respond!dzwdz
this is big in terms of speed, it avoids a lot of unnecessary context switches
2022-07-07shared: add a flags argument to _syscall_fs_responddzwdz
2022-07-06kernel: don't panic on nonexistent syscallsdzwdz