aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-06-07add unlikely hint to leave_rpcKimplul
2023-06-07slight improvements to buildingKimplul
+ User can now specify debug, release and assert handling
2023-06-07fix root node get_reginfoKimplul
2023-06-07change register save/load to increasing orderKimplul
2023-06-05add check against calling ipc_resp erroneouslyKimplul
2023-06-05give compiler more room to optimize rpc invocationKimplul
+ Try to write arguments to memory as fast as possible to free up some registers that the compiler can then play with. Qemu runs ~1 700 000 rpc's per second, visionfive2 @1GHz (I think) ~800 000.
2023-06-04clarify a few thingsKimplul
2023-06-04slight optimization and brainfart fixKimplul
2023-06-04remove misleading commentKimplul
2023-06-04add some docs about visionfive2Kimplul
2023-06-04visionfive2 bootsKimplul
+ Make 8250 serial driver more generic + Still TODO: write a tutorial on how to boot on the visionfive2
2023-06-04visionfive2 boots until debugging is initializedKimplul
2023-05-29start trying to boot on visionfive 2Kimplul
+ Not bootable quite yet. Among other things, I couldn't get the current starfive u-boot fork to boot, so try adding support for booting with precompiled u-boot via the `go` command. Initial testing with qemu shows that this should be possible, and if it works, might be useful in the (far) future with other slightly janky SBCs. Also, NS16550 is 8250-based, and I'm really only using the base 8250, so rename and add visionfive 2 uart to list of compatibles. Visionfive 2 is still completely untested.
2023-05-17align handle_irq to four byte boundaries alwaysKimplul
+ CSR_STVEC requires four byte alignment
2023-05-12update README to reflect recent changesKimplul
2023-05-12disable LTO with LLVMKimplul
2023-05-12fix LLVM compilationKimplul
+ RELEASE=1 doesn't work for some reason, though
2023-05-11fix riscv64-linux-gnu- buildKimplul
2023-05-11only init is pic and fix a warningKimplul
2023-05-11arbitrary load address and RAM base detectionKimplul
+ Both kind of go hand in hand, made sense to do both at the same time. Some parts feel slightly hacky, the loader works by placing everything on the stack and avoiding global values. Still, seems to work?
2023-05-08improve undocumented file warningKimplul
2023-05-06fix some formatting for terminal usersKimplul
2023-05-06Update README.mdKimplul
2023-05-06Update README.mdKimplul
2023-05-06make cross compile more conformantKimplul
2023-05-06always use debug flagKimplul
2023-05-01update license stuffKimplul
2023-05-01bump dtc versionKimplul
2023-04-30conform closer to other project structuresKimplul
2023-04-30rename to kmiKimplul
2023-01-26add req_page syscallKimplul
2023-01-16initialize variable to zeroKimplul
+ Silences possible warning
2023-01-16make process ids signedKimplul
+ Unlikely to ever run into billions of threads, and this keeps in line with stuff like Linux. Also allows C to relatively painlessly implement hashmaps of pids, if neccessary.
2022-12-02remove MR_SHAREDKimplul
+ The new shared memory plan doesn't need it.
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-21fix formattingKimplul
2022-11-21possible optimisationsKimplul
2022-11-13improve tcb list handlingKimplul
2022-11-13give symbolic name to rpc stack ratioKimplul
2022-11-13NDEBUG with release modeKimplul
+ Might be a good idea to add some command line variable as debugging release mode can be useful for performance profiling (until I start writing proper serial userspace drivers)
2022-11-13outline rpc stack handlingKimplul
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