Bananymous
89d3ee7b92
Kernel: Use per cpu fast page when clearing SMO pages
2026-07-04 19:18:31 +03:00
Bananymous
954898b14d
Kernel: Fix file backed mmap syncing, my if condition was inverted
2026-05-25 02:14:04 +03:00
Bananymous
32206069bc
Kernel: Use per cpu fast page for {Memory,File}BackedRegion
2026-05-20 02:51:48 +03:00
Bananymous
46a1903f8d
Kernel: Use per cpu fast page for PMM
2026-05-20 02:46:50 +03:00
Bananymous
d7865b2929
Kernel: Don't msync file backed pages that were never mapped writable
2026-05-17 03:21:08 +03:00
Bananymous
dd8a9b1793
Kernel: clamp msync address range instead of calling contains
2026-05-13 20:03:37 +03:00
Bananymous
9f4271f6d8
Kernel: Remove the big inode lock
...
This moves locking to the inodes themselves which allows reducing lock
times significantly. Main inodes (ext2 and tmpfs) still do contain a
single big mutex that gets locked during operations but now we have the
architecture to optimize these.
2026-05-09 23:28:00 +03:00
Bananymous
a7356716ff
Kernel: Reduce locking FileBackedRegions
2026-05-09 15:08:26 +03:00
Bananymous
3ac955714b
Kernel: Optimize FileBackedRegion CoW
...
Just copy data from the existing page instead of locking inode's shared
data, copying to temporary buffer and finally copying to destination
2026-05-06 17:30:43 +03:00
Bananymous
62f5292f38
Kernel: Send only one TLB invalidation when creating a ByteRingBuffer
2026-05-06 17:30:43 +03:00
Bananymous
7553ede3b4
Kernel: Send only one TLB invalidation when creating a VirtualRange
2026-05-06 00:27:26 +03:00
Bananymous
93e1091252
Kernel: Rewrite kmalloc
...
Kmalloc is now a bitmap allocator with dynamic resizing and we dont need
to allocate 64 MiB static block of memory reserved for kmalloc :^)
2026-05-04 20:26:02 +03:00
Bananymous
f4e2e62d04
Kernel: Remove kmalloc API for identity mapped results
...
This is no longer used. This finally allows me to rewrite kmalloc :^)
2026-05-04 20:26:02 +03:00
Bananymous
f37d9dbdb1
Kernel: Remove kmalloc_vaddr_of
...
This is no longer needed. It was only used for x86_64 paging and AP
stack initialization
2026-05-04 20:26:01 +03:00
Bananymous
ab8bcbec3e
Kernel: Allow mapping dma regions as not uncached
2026-04-27 19:36:32 +03:00
Bananymous
b74812d669
Kernel: Remove unnused features from VirtualRange
...
On-demand paging has not been used ever since I made userspace stack be
a normal MemoryRegion.
2026-04-21 19:58:09 +03:00
Bananymous
5b7b2d7ac3
Kernel: Fix memory leak when cleaning up inodes shared page cache
2026-04-19 17:52:21 +03:00
Bananymous
7e907b70f6
Kernel: Store memory region size as uint64_t
...
On 32 bit target, we were storing 32 bit physical region sizes which
would truncate regions > 4 GiB
2026-04-07 03:41:25 +03:00
Bananymous
e4c6539964
Kernel: Be more clever with physical memory
...
Initially allocate all physical memory except kernel memory and boot
modules. Before we just skipped all memory before kernel boot modules.
Also release memory used by boot modules after the kernel is up and
running. Once the boot modules are loaded, there is no need to keep them
in memory.
2026-04-06 19:29:34 +03:00
Bananymous
9fce114e8e
Kernel: Don't clone entire kernel stack on fork
...
We only need to copy area between [ret_sp, stack_end]. This range is
always very small compared to the whole stack (64 KiB).
2026-04-04 23:48:43 +03:00
Bananymous
47d85eb281
Kernel: Pass the actual vaddr range to reserve pages
2026-04-04 23:48:43 +03:00
Bananymous
675c215e6a
Kernel: Add CoW support to MemoryBackedRegion
...
This speeds up fork by A LOT. Forking WindowServer took ~90 ms before
this and now its ~5 ms.
2026-04-03 01:54:59 +03:00
Bananymous
493b5cb9b1
Kernel: Implement byte ring buffer
...
This maps the ring twice right next to each other so we don't have to
care about wrapping around when doing memcpy or accessing the data
2026-02-28 14:18:23 +02:00
Bananymous
aef536fff3
Kernel: Fix SharedMemoryObject cloning on deleted keys
2026-01-25 01:42:17 +02:00
Bananymous
1143dc3cae
Kernel: Rework syscall memory validation and locking
...
Process's memory regions are now behind an rwlock instead of using the
full process lock. This allows most pointer validations to not block as
write operations to memory regions are rare.
Thread's userspace stack is now part of process's memory regions. This
simplifies code that explicitly looped over threads to see if the
accessed address was inside a thread's stack.
Only drawback of this is that MemoryRegions don't support guard pages,
so userspace stackoverflow will be handeled as cleanly as it was prior
to this.
This patch also fixes some unnecessary locking of the process lock and
moves locking to the internal helper functions instead of asserting that
the lock is held. Also we now make sure loaded ELF regions are in sorted
order as we previously expected.
2026-01-16 16:09:38 +02:00
Bananymous
4b5a8196c3
Kernel: Fix bitmap byte index calculation in PMM
...
No idea how I had not crashed here earlier, but running on real hw with
a bit initrd ended up crashing :D
2026-01-04 01:16:43 +02:00
Bananymous
05d59a05df
Kernel: Remove obsolete kprint
...
This hasn't been in use in 3 years :)
2025-11-22 06:21:50 +02:00
Bananymous
9537922acc
Kernel: Implement proper memory region splitting
...
Memory regions are now splitted when they get munmapped, mprotected, or
mmapped with MAP_FIXED. This is used by couple of ports, and without
this we were just leaking up memory or straight up crashing programs.
2025-11-13 04:20:53 +02:00
Bananymous
f1d12c330e
Kernel/LibC: Implement MMAP_FIXED_NOREPLACE
...
This is a handy thing from linux
Also fix MMAP_FIXED validation and error reporting
2025-11-12 00:06:36 +02:00
Bananymous
706cfeb443
Kernel: Allow file backed mapping be larger than inode size
...
This is only allowed if the mapping does **not** exceed a page boundary.
Some port was doing an exactly two-page-mapping on a file that was one
and a half page long
2025-08-28 15:55:40 +03:00
Bananymous
804cbeb1a7
Kernel: Increment kmalloc storage size to 64 MiB
...
I really don't want to do this, but rewriting kmalloc to be dynamic
would require me to rewrite 32 bit paging and I really don't want to.
2025-08-15 17:02:15 +03:00
Bananymous
72f85dce2b
Kernel: Make userspace stack on-demand allocated
...
Also bump the hardlimit of stack size from 512 KiB->32 MiB. This still
feels quite low but is much better than before :D
2025-08-07 16:43:05 +03:00
Bananymous
f1369c8fd6
Kernel/LibC: Implement mprotect
...
There may be some race conditions with this but i think this is good
enough to start with
2025-08-05 03:09:24 +03:00
Bananymous
6084aae603
Kernel: Add guard pages to kernel and userspace stacks
2025-07-02 23:12:36 +03:00
Bananymous
17f1ac10e3
Kernel: Don't ignore modules passed with multiboot2
2025-07-02 00:17:42 +03:00
Bananymous
eecdad50a6
Kernel: Fix most of mutex + block race conditions
...
All block functions now take an optional mutex parameter that is
atomically unlocked instead of having the user unlock it before hand.
This prevents a ton of race conditions everywhere in the code!
2025-06-06 03:59:22 +03:00
Bananymous
60d1c26114
Kernel: Fix race condition in FileBackedRegion creation
2025-06-01 13:48:03 +03:00
Bananymous
d54489bbcb
Kernel: Implement MemoryRegion pinning
...
This allows process to pin a MemoryRegion into users memory space for
syscall duration without allowing user to munmap the region.
2025-04-22 04:30:07 +03:00
Bananymous
76bad31dd5
Kernel: Reorder locking with VirtualRange
2025-04-01 23:09:30 +03:00
Bananymous
e6a2f55a59
Kernel: Closing file backed mmap wont expand the file size
2024-12-03 16:12:26 +02:00
Bananymous
64c52012df
Kernel: Fix MemoryRegion overlap comparison
...
This made some calls to `munmap` unmap extra regions.
2024-11-13 17:26:42 +02:00
Bananymous
f0b18da881
Kernel: Add kmalloc helper APIs
2024-10-14 11:39:04 +03:00
Bananymous
2b43569927
Kernel: Use enums in boot info instead of magic values
2024-10-14 11:36:51 +03:00
Bananymous
55fbd09e45
Kernel: Rewrite physical memory allocation with PageTable::fast_pages
2024-10-14 11:32:54 +03:00
Bananymous
54732edff4
Kernel: Fix bugs in memory regions
...
MemoryRegion::initialize() required size to be page aligned, this is not
necessary.
MemoryBackedRegion::copy_data_to_region() required user-write
permissions for underlying data. This did not matter as memory backed
regions dont support COW memory, but it could lead to bugs later on.
2024-09-15 23:18:05 +03:00
Bananymous
c77ad5fb34
Kernel: Implement copy-on-write memory for file backed mmaps
2024-09-11 19:33:50 +03:00
Bananymous
de35cec2e1
Kernel: Allow private file mappings past file end
...
This is just to make memory mapping ELF files easier :D
2024-09-05 14:48:42 +03:00
Bananymous
2f241e1b61
Kernel: Implement FileBackedRegion::clone
2024-09-05 13:59:09 +03:00
Bananymous
1138ec77ca
Kernel: Fix MemoryBackedRegion cloning for non page aligned size
2024-09-04 21:14:26 +03:00
Bananymous
a134d16070
Kernel: Fix MemoryRegion test for contains_fully
2024-08-30 15:33:58 +03:00