Commit Graph

62 Commits

Author SHA1 Message Date
anna f8a85a1541
happy new year 2022 uwu
May it be slightly less exhausting than 2021.
2022-01-01 03:49:33 +01:00
anna 2e32e299d2
mm: rewrite slab allocator
This is the final part of the major mm subsystem
refactor (for now).  The new and improved slab
allocator can do *proper* poisoning, with pretty
accurate out-of-bounds and use-after-free
detection.
vm_page_t has also been restructured; its flags
and order are now combined into one atomic field.
2021-11-22 04:23:31 +01:00
anna 36d53093d4
ktrace: don't unwind past ISR entry points 2021-11-21 20:02:20 +01:00
anna 7f92690f84
panic: print stack trace when panicking 2021-11-21 06:57:24 +01:00
anna 385af1b7ef
mm: refactor page frame allocator
This is part 3 of the mm subsystem overhaul.
The allocator doesn't rely on mutexes anymore and
uses individual per-order spinlocks instead.
Also, it is aware of multiple memory zones (normal
and DMA) as well as emergency reserves.
Page bitmaps take up 50 % less overhead now.
2021-11-20 22:49:05 +01:00
anna 825a981d67
clist: make debugging better 2021-11-20 22:12:04 +01:00
anna d19e665d47
mm: generalize boot allocator
The boot page frame allocator is now architecture
independent.
This is part 2 of the mm subsystem refactor.
2021-11-18 02:25:41 +01:00
anna 7285c2e076
mm: refactor entire mm subsystem, part 1
Another one of those larger endeavours that take
multiple commits.  This first one introduces the
basic vm_page data structure, as well as the x86
bootstrap code for initializing it.
2021-11-17 05:13:23 +01:00
anna 5a5135f416
update license terms
As of now, everything except the code imported
from FreeBSD is proprietary.  Of course, it won't
be like this for long, only until we have decided
which license we like to use.  The rationale is
that releasing everything under a copyleft license
later is always easier than doing so immediately
and then changing it afterwards.
Naturally, any changes made before this commit are
still subject to the terms of the CNPL.
2021-11-15 19:23:22 +01:00
anna 24ae60225f
amd64: add base 64-bit support files
This has been brewing for quite some time now, and
it still is nowhere near finished, but at least it
compiles now.  A lot has changed, and it's still
quite messy (i386 is almost certainly broken now,
i haven't even checked)
2021-11-12 06:13:10 +01:00
anna 637ac5ce92
x86/page: add page flagging functions 2021-11-10 02:03:41 +01:00
anna ec889c08b9
types: add BSD style typedefs for unsigned types 2021-11-09 22:18:36 +01:00
anna a3941b6dc4
mm: minor page management refactor
This seems like a huge commit but it's really just
renaming a bunch of symbols.  The entire mm
subsystem is probably gonna have to go through
some major changes in the near future, so it's
best to start off with something that is not too
chaotic i guess.
2021-11-09 20:34:35 +01:00
anna 03f31df67f
x86: better separation for i386 specific code
That's it, nothing major is gonna happen anymore
until i get amd64 support working and deprecate
the entire i386 branch.  32-bit just adds so many
extra complications to memory management that i
don't want to waste any more energy on this
platform which is obsolete anyway.
2021-11-09 20:25:10 +01:00
anna 36985f51e2
add kqueue API
kqueues are going to form the basis for anything
related to I/O and IPC.  They are a lock-free,
atomic FIFO queue and support multiple emitters
and consumers.
2021-11-04 06:06:31 +01:00
anna 5877697e64
page: use new ptr align macros 2021-11-04 06:01:03 +01:00
anna ebce7b8e83
mutex: fix lock race conditions 2021-11-04 05:56:40 +01:00
anna b6385aea0a
panic: move to separate file, add KASSERT macro 2021-11-01 23:54:55 +01:00
anna 24c6e9504d
add kernel panic utility
This also includes some minor rearrangements in
terms of which header files define what.
2021-10-31 02:00:10 +02:00
anna 38d9a9586d
smp: add base for SMP awareness 2021-10-30 03:34:04 +02:00
anna 6d0950501c
page: ensure early page mapping doesn't fail
Up to now, the page frame allocator's
initialization routine relied on the fact that
map_page() never needs to get new pages on i386 if
the mapped page is a hugepage.  This is not at all
true on other architectures, however.
2021-10-29 00:23:30 +02:00
anna eb0091403e
mutex: add semaphores 2021-10-28 17:08:46 +02:00
anna c36b03d97c
mutex: avoid wait queue lock if possible
This also tidies up the atomic operations a little
and adds a new atom_cmp_xchg() as well as the same
APIs for longs and pointers.
2021-10-28 17:01:13 +02:00
anna c66b05216d
clist: add better debugging facilities 2021-10-24 21:55:54 +02:00
anna 2b3eaf4ff7
mm: add basic slab allocator
This still needs some work and integration into
kmalloc() but hey i've tested it and it doesn't
immediately fall apart so why not commit it
2021-10-24 05:36:46 +02:00
anna 16a229c936
mm: protect cache pools with mutex 2021-10-23 02:50:04 +02:00
anna 743424d15f
mm: fix page frame allocator bugs
This also includes a minor refactor of everything,
as well as some optimizations.  The bitmap
operations have been moved into a separate file
because they are probably gonna come in handy in
other parts of the system as well.
2021-10-23 00:56:49 +02:00
anna 96378f019c
kmalloc: add shiny new buddy page frame allocator
This is still kind of a work in progress because
it will be the backend to a slab allocator, which
in turn is managed by kmalloc().
2021-10-22 06:22:38 +02:00
anna f59229ba39
types: fix typo in u64 typedef
This would have been a fun one to debug if i
hadn't caught it right now
2021-10-21 23:09:35 +02:00
anna 3fee893f21
x86: begin preparations for amd64 support
This is a huge commit, but it mainly just moves
some files around and doesn't change their
contents much.
A lot of stuff works the same on amd64 as it does
on i386, so i'm moving the parts that are specific
to the latter into separate subdirectories while
the rest can be shared with the amd64 codebase.
2021-10-21 05:27:42 +02:00
anna c911ff9009
x86/mm: add huge page support
This is part of a series of commits where i
completely rewrite kmalloc() because it needs to
be able to return physically contiguous memory for
DMA operations.
Yes, i know the build isn't working right now.
2021-10-17 01:09:51 +02:00
anna ea89961ed2
x86/atom: use correct names in asm, improve docs 2021-10-16 18:39:03 +02:00
anna 721ba69276
mtx: remove the stupid 2021-10-16 04:23:05 +02:00
anna ad422894f2
mtx: add basic synchronization primitives 2021-10-16 04:00:22 +02:00
anna c3847487be
config: refactor kernel address mapping names 2021-10-15 19:52:22 +02:00
anna b2fccf1ecd
sched: add base for scheduling and task switching 2021-10-15 00:01:47 +02:00
anna d8e7939093
fix build yet again
(i am too stupid to include all relevant changes
in my commits, mostly due to the fact that my
local diffs are almost always tremendous)
2021-10-13 18:00:22 +02:00
anna 904584ccc0
libc: refactor a couple of string routines
This is just a minor overhaul of several utility
functions, in part because it kept bothering me
and in part because i was bored.
2021-10-12 23:24:17 +02:00
anna afbb3743d5
refactor type and cdefs headers 2021-10-12 01:31:49 +02:00
anna 0f9e9f91a6
libc: port FreeBSD string library routines
Oh my fucking god this was by far the most awful
and boring and tedious day in my entire life.

Also, dear FreeBSD people: please don't sue me.
I tried really hard to comply with all the
copyright stuff, but it is absolutely possible i
made a mistake.  Just DM me and i'll do everything
in my power to fix it, even if that means
releasing entire portions of GayBSD under the BSD
license.  I don't care, i just want stuff to work.

(i'm including this message to use it as possible
evidence in case i get sued to show my good will)
2021-10-10 05:41:16 +02:00
anna 4679b7cee5
x86: add irq support 2021-10-07 19:16:21 +02:00
anna d69fd0d2aa
x86: refactor traps, add register dump support 2021-10-04 05:55:03 +02:00
anna d475429639
kprintf: implement "full" format sequence support
So this was painful.  kprintf() supports most of
the format specifiers from BSD now, except for the
$ sequence.  It has gotten a general overhaul and
is significantly more sophisticated, bloated and
slower now.  There is also some minor stuff i
forgot about, like the 't' length modifier, but
that isn't so important right now and will be
fixed later(TM).
2021-10-03 04:31:28 +02:00
anna 613c28a965
x86: add basic interrupt support
This commit also fixes the fun little size bug in
segment.S where i subtracted the end from the
start address of the GDT instead of the other way
round which resulted in a gigantic overflow :)
2021-10-02 00:08:54 +02:00
anna 347bb5cc9c
kmalloc: bugfixes and performance improvements 2021-09-30 00:32:07 +02:00
anna 5c0fa715a4
kmalloc: add actual memory allocator
Now that memory allocation finally kind of works,
we can finally start focusing on the core system
architecture.  This commit also fixes some bugs in
get_page() and friends, as well as performance
improvements because the page map is addressed as
unsigned longs rather than individual bytes.
2021-09-29 01:10:41 +02:00
anna f1922723f0
types.h: fix uintptr_t sign 2021-09-28 16:58:43 +02:00
anna 3f73072153
types.h: use rust-style naming scheme, add bools 2021-09-28 01:24:43 +02:00
anna 8129518640
mm: replace GRUB's GDT with our own 2021-09-28 00:48:19 +02:00
anna 3d6258a06e
mm: implement runtime page mapping 2021-09-23 20:51:12 +02:00