aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64
AgeCommit message (Collapse)Author
2023-01-26add req_page syscallKimplul
2022-12-02initial shared memory workingKimplul
2022-12-01start looking into memory handlingKimplul
+ Now 10M alloc/frees succeed, which totals more memory than the virtual machine has, so no too obvious leaks are occuring. For future debugging speed, changed 10M to 1M. + Also quick fix to rpcs, stacks are now assigned. Not entirely sure why they worked before this, but good that I found it.
2022-11-21fix llvmKimplul
2022-11-21make syscall handlers voidKimplul
2022-11-21possible optimisationsKimplul
2022-11-13improve documentation on new featuresKimplul
2022-11-13~1.3M ipc requestsKimplul
+ The secret is using gravestones. I'll have to write up full documentation for the feature but essentially riscv lets us encode whatever we want into page table entries, as long as they're not active. We use this to encode highest user address that is not a zero, in that all entries in the top level are either active or gravestones. When an active entry is removed, it is either a gravestone (if there are other active entries above it) or it starts a cascade of removing entries that have been previously removed Slight runtime overhead to page mapping, pretty major advantage in rpc calls. Feature will need to be tested more thorougly, and the init program is sort of a best scenario with just one top level userspace page table entry active at a time, leading to incredibly fast context switches. Current implementation limits a process' max virtual memory to 248 GiB (in Sv39), but I don't think the missing 8 GiB is that big of a deal.
2022-11-13~700k ipc requestsKimplul
+ Eliminated need for save/load_regs, now the register save area is behind a pointer which _slightly_ increases overall syscall delay, but speeds up ipc requests by a fair bit.
2022-11-13give uvmem_map more fitting nameKimplul
+ It really only works with Sv39, I suppose similar structures should be added for Sv4} etc. if I ever get around to it.
2022-11-13write init more sensiblyKimplul
+ Both easier to look at and now the userspace doesn't play as big of a role in the 'benchmarking' with optimizations turned on.
2022-11-12release mode, ~600k requestsKimplul
2022-11-12make 'performance' results more accurate in qemuKimplul
2022-11-12slight optimizationKimplul
2022-11-12initial rpc implementationsKimplul
2022-11-11less buggy forkKimplul
+ Not strictly done yet, but we can swap between two processes :D
2022-11-10initial implementation of process copyingKimplul
+ Not actually working (at least fully), need to continue debugging when I have time.
2022-11-09add basic IPI structureKimplul
2022-10-29rewrite pmemKimplul
2022-10-22start outlining ipcKimplul
2022-10-22create impl and CAP_PROC checkingKimplul
2022-10-22initial high level fork impKimplul
2022-10-21beautificationKimplul
2022-10-21initial implementation of swapKimplul
+ Slightly unsure if it should be a syscall, or if assign would be enough. Also, which thread should run in a fork/spawn? For now, old thread, though this might increase latency. Or add swap flag to these calls?
2022-10-21initial spawn implementationKimplul
2022-10-21slight optimisation to cur_tcb on riscvKimplul
2022-09-15change syscalls to take 5 params and return 6Kimplul
+ In total, a syscall is built up of 6 values, with the first being the syscall number. Symmetrically, the first value is now a status and the following five values return "values". This allows us to cram in more info into the ipc_* functions. The performance difference is absolutely minimal, at least from my testing in qemu.
2022-09-15add SYS_TICKSKimplul
2022-09-14add putch syscall for easier userspace debuggingKimplul
+ Note that it is NOT intended for end user usage, just for debugging.
2022-09-14add canary to kernel stackKimplul
2022-09-14riscv32 boots and advances as far as riscv64Kimplul
2022-09-11change external directory structureKimplul
+ Prepare for possibly testing rv32 + Also remove newline from debugging output
2022-09-11allow building with riscv64-linux-gnuKimplul
+ May warn about PHDR not being in LOAD, there is a flag to silence it (--no-warn-rwx-segment) but it doesn't seem to exist in riscv64-unknown-elf for some reason.
2022-09-02reserve more space for fwKimplul
+ Doesn't seem to be specified anywhere, but I'll stick with 2MB for now, working on the assumption that the FW is at the start of the physical RAM. Possible TODOs: generate apos.its automatically from init.elf, allocate root_branch statically?
2022-09-02fix documentation warningsKimplul
2022-06-12add license textsKimplul
2022-06-11continue documentationKimplul
2022-06-11fix ubsan warning in release modeKimplul
2022-06-11continue documentationKimplul
2022-06-09use doxygen todoKimplul
2022-06-09continue documentationKimplul
2022-05-29continue documentation effortsKimplul
2022-05-29modify formatting rulesKimplul
2022-05-29continue documentation efforts.Kimplul
2022-05-28continue documenting sourceKimplul
2022-05-28implement set_ipc on riscvKimplul
2022-05-28start implementing new proc/rpc handlingKimplul
+ Essentially, separate root process and remote procedure call handling. I really should write down some documentation so I don't forget, but essentially: All threads share a common process virtual memory, and when a thread wants to make an rpc, it switches over to its own rpc vmem space that is linked to the remote process.
2022-05-24make process loading more genericKimplul
2022-05-24initial musings about execKimplul
2022-05-23start writing documentationKimplul