Bananymous
6d1ecc2388
Kernel: Clean up file creation
2026-05-18 15:26:59 +03:00
Bananymous
5cf658c175
Kernel: Fix 2 memory pinning bugs
...
If pinning a region succeeded but pushing the region to a vector failed,
we would leak the pin preventing the process from cleaning up
2026-05-17 03:38:18 +03:00
Bananymous
ef2738bfb7
Kernel: Disable devfs device add/remove logging
2026-05-17 03:38:18 +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
9c79971bdc
LibC/Kernel: Add support for detached pthreads
2026-05-17 00:40:56 +03:00
Bananymous
ff75c15ba3
LibC: Move pthread keys to TCB
...
This removes all TLS relocations from libc which may become handy ;)
2026-05-17 00:29:20 +03:00
Bananymous
9e6fa0a1ba
Kernel: Add fast path for invalid address during region pin
...
Before I was falling through to the write lock which does allocation,
but as the read loop already saw, specified address was not mapped.
2026-05-17 00:29:20 +03:00
Bananymous
6e95519acc
Kernel: Make TTY write lock a mutex instead of a spinlock
...
The mutex could not be locked while processing ANSI DGR in VTTY
2026-05-17 00:29:20 +03:00
Bananymous
d081655913
Kernel: Add API for mutex to check if it is locked by current thread
...
Also add assertion that you have interrupts enabled :^)
2026-05-17 00:29:20 +03:00
Bananymous
9c3eb8d270
userspace: Implement tr utility
2026-05-17 00:29:20 +03:00
Bananymous
68479bf07e
userspace: Fix getopt_long usage
...
- Add missing null entry after the last long option
- Don't duplicate illegal option message, getopt already prints
the message as I do not suppress it. Also handle missing arguments.
2026-05-17 00:29:20 +03:00
Bananymous
d528314ae3
Kernel: Make SYS_FUTEX restartable
2026-05-17 00:29:20 +03:00
Bananymous
40dd29b876
LibC: Cleanup syscall macros
2026-05-17 00:29:20 +03:00
Bananymous
dc1d7e3fae
ls: Print total field with -l
2026-05-15 22:46:50 +03:00
Bananymous
8f8ba2751c
ls: Add support for -A and -h
2026-05-15 22:35:58 +03:00
Bananymous
928d3e3fe7
dirname: Fix help message
2026-05-15 22:34:48 +03:00
Bananymous
4ef7b8e71c
Kernel: AFG reset return value
2026-05-15 21:38:23 +03:00
Bananymous
5e1b5c329b
Kernel: Allow HDA stream reset to timeout
...
This was hanging on some version of qemu :^)
2026-05-15 21:30:41 +03:00
Bananymous
b2f795b1e1
Kernel: Pipe ignore tc attr ioctls
2026-05-15 21:23:19 +03:00
Bananymous
bf2121e166
LibC: Implement tc{get,set}winsize
...
These were added in POSIX issue 8 :^)
2026-05-15 17:08:02 +03:00
Bananymous
05c9f0640c
Kernel/LibC: Replace terminal syscalls with ioctls
...
isatty, tc{get,set}attr, tc{get,set}pgrp are now implemented as ioctls
instead of separate syscalls
2026-05-15 17:03:33 +03:00
Bananymous
fe2c9f7d2d
LibC: Rewrite malloc
...
The old linked list allocator with power of two pool sizes was kinda
weird. Now we use 1MiB bitmap allocators for allocations <64KiB and
directly call mmap for larger allocations. This allows userspace to
actually free unused memory on `free` :)
2026-05-15 17:03:33 +03:00
Bananymous
d7cdf3818c
LibC: Make aio.h incudable in C++
...
aio stuff is not supported but now the header is at least includable in
C++ which was not possible before as __restrict was not allowed in array
size
2026-05-15 17:03:33 +03:00
Bananymous
6a2f041858
LibC: Handle negative size in fgets
2026-05-15 17:03:33 +03:00
Bananymous
f0c5fb3a87
LibC: Don't use ScopeGuard in exec
...
These ended up pulling `operator delete` which is not available when
linking with gcc :^)
2026-05-15 17:03:33 +03:00
Bananymous
28b873b949
Kernel: Allow recursive rwlock write lock
2026-05-15 17:03:33 +03:00
Bananymous
c352fb600f
Kernel: Reduce ext2 locking
...
Replace the mutex with a rwlock and lock when its not necessary
2026-05-14 17:23:06 +03:00
Bananymous
dd8a9b1793
Kernel: clamp msync address range instead of calling contains
2026-05-13 20:03:37 +03:00
Bananymous
212ab010a5
BAN: Expose radix sort with user provided buffer
...
This can be nice if user has memory for a the temporary buffer and
doesnt want the sorting to allocate or be able to fail.
Also counts are now stack allocated, there isn't really any reason to
allocate them on the heap as 256x 64 bit values only adds up to 2 KiB
2026-05-13 05:05:11 +03:00
Bananymous
d345f96387
LibC: Optimize qsort
...
Apply same optimizations as to BAN quick sort!
2026-05-13 04:37:25 +03:00
Bananymous
d181f9e553
BAN: Optimize quick sort
...
We now use the middle element as the pivot and do three way partitioning
to improve sorting with equivalent elements
2026-05-13 04:31:31 +03:00
Bananymous
5f237abc3b
Kernel: Don't lock Ext2FS while reading and writing blocks
...
There is really no reason for this. The underlying block devices are
(should be) thread safe themselves
2026-05-09 23:28:00 +03:00
Bananymous
0bf7328e04
Kernel: Handle TIOC{G,S}WINSZ on pipes
...
GCC likes to do this a lot and debug logging is excessive
2026-05-09 23:28:00 +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
912647ce68
Shell: Fix type builtin PATH resolution
...
We were not adding a '/' between PATH dir and the command
2026-05-06 17:30:43 +03:00
Bananymous
d2e21f9380
Kernel: Fix 64 bit page table range reservation from lower->higher half
2026-05-06 17:30:43 +03:00
Bananymous
443be800b7
Kernel: Fix remote TLB shootdown for <= 32 pages
...
I was modifying the `vaddr` argument while invalidating which lead to
the smp message containing wrong virtual address. This showed up in
really weird bugs from invalid TLB
2026-05-06 17:30:43 +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
eba97c1fc7
Kernel: Avoid possible dead lock while sending smp messages
...
Process own events while waiting for space on another processor. This
fixes a dead lock when processors are sending messages to each other
2026-05-06 00:09:05 +03:00
Bananymous
47650980f2
LibC: Reorder stack trace dump printing
...
If we fault while getting start of stack frame at least we now print
that we were trying to get the stack trace :^)
2026-05-05 13:54:51 +03:00
Bananymous
4b12770485
LibC: Don't leak FILEs on failed shebang exec
2026-05-05 13:52:52 +03:00
Bananymous
ba106f6bf5
LibC: Update argv[0] for shebang scripts to full path
...
This is needed so `dirname -- "$0"` works with shebang scripts found in
PATH
2026-05-05 12:48:04 +03:00
Bananymous
3a05a29294
dirname: Support options and multiple strings
...
This is not needed by POSIX but sdl2-config uses `dirname -- "$0"`
2026-05-05 01:42:28 +03:00
Bananymous
efeaafaff6
Kernel: Cleanup E1000 link speed code
2026-05-04 21:23:04 +03:00
Bananymous
6966475dcf
Kernel: Make E1000 sending lockless and mostly non-blocking
...
Now we only block if all 256 tx descriptors are waiting to be sent. This
removes TCP acks from taking 30% of profiles while DOWNLOADING files
2026-05-04 21:15:15 +03:00
Bananymous
dfe24b69e0
Kernel: Don't keep devfs locked while performing disk sync
2026-05-04 20:26:02 +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
f293377e31
Kernel: Dynamically allocate PCI devices
...
There was no need to prealloce almost a 5 MiB buffer for PCI all
possible pci devies :D
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
d42b363fb1
Kernel: Remove kmalloc identity map requirement from USB keyboard
...
This is the last place requiring kmalloc identity mapping
2026-05-04 20:26:02 +03:00
Bananymous
8773e80917
Kernel: Remove kmalloc identity map requirement from XHCI device init
2026-05-04 20:26:02 +03:00
Bananymous
0c6d713c4a
Kernel: Rewrite 32 bit paging to not depend on kmalloc
...
There are a lot of 'unnecessary' fast page mappings but at least this
works.
2026-05-04 20:26:02 +03:00
Bananymous
8091127150
Kernel: Add page table api to map multiple fast pages
...
This is not currently used, but can be handy in the future
2026-05-04 20:26:02 +03:00
Bananymous
74127c0f45
Kernel: Cleanup inline assembly accessing cpu specific data
2026-05-04 20:26:02 +03:00
Bananymous
28499b890c
LibC: Mark exit as noreturn
2026-05-04 20:26:02 +03:00
Bananymous
2f45349658
Kernel: Calculate internet checksum in host endian
...
No need to swap bytes of every 16 bit word in the packet, we can just do
one swap at the return
2026-05-04 20:26:02 +03:00
Bananymous
fde085e04b
Kernel: Pass current cpu index as a GDT limit
...
I had no idea LSL was an instruction. This cleans up code to get the
current cpu by a lot and does not require extra segment usage :D
2026-05-04 20:26:02 +03:00
Bananymous
77ca525552
BAN: Fix HashSet
2026-05-04 20:26:02 +03:00
Bananymous
3b83daef17
Kernel: Use empty string instead of nullptr for non existing proc name
2026-05-04 20:26:01 +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
b7cedad891
Kernel: Wrap syscall macro value in paranthesis
2026-05-04 20:26:01 +03:00
Bananymous
cdf0de34fb
Kernel: Stop stacktrace dump on null bp
...
This makes stack traces not crash before IDT is initialized
2026-05-04 20:26:01 +03:00
Bananymous
03fccdffe1
Kernel: Rewrite paging and AP initialization
...
Initial step of paging now just prepares fast page for heap, actual page
table initialization happens after heap is initialized which allows
x86_64 to never depend on kmalloc for pages.
Processor's stacks are now also spawned with PMM/VMM allocated stacks
instead of kmalloc identity mapped.
2026-05-04 20:26:01 +03:00
Bananymous
1602b195c5
ports: Rework ssl certificates
...
ca-certificates:
- update to 2026.03.19
- install to /etc/cacert
- extract individual ceritificates from the bundle
openssl:
- depend on ca-certificates
- install hashed symlinks to individual certs
curl:
- don't depend on ca-certificates; openssl handles this
- set both ca-bundle and ca-path
2026-04-28 02:23:46 +03:00
Bananymous
1486ad7aa5
Kernel: Don't map NIC buffers as uncached
...
There is no need for them to be uncached. Having them as uncached killed
the networking performance, over 90% time was spent in kernel out of
which 80% was in checksum calculation and memcpy, half each (measured in
qemu with e1000e)
2026-04-27 19:45:16 +03:00
Bananymous
ab8bcbec3e
Kernel: Allow mapping dma regions as not uncached
2026-04-27 19:36:32 +03:00
Bananymous
0e00b72df6
BAN: Cleanup HashMap
...
Add a concept for HashMapFindable instead of manually specifying the
requries expression everywhere.
Allow HashMapFindable also for `remove`, `contains`, `operator[]`, `at`
Make Entry have a const Key. This allows iterator's operator* and
operator-> return values have const keys.
2026-04-25 22:10:01 +03:00
Bananymous
a63818ec33
BAN: Cleanup HashSet
...
Add a concept for HashSetFindable instead of manually specifying the
requries expression everywhere.
Allow HashSetFindable also for `remove` and `contains`.
Remove non-const return values from iterator; you should never modify
the hashed value in place.
Don't require key to be move assignable, move construction is enough.
2026-04-25 22:10:01 +03:00
Bananymous
cf2e8ffaff
Kernel: Remove unnecessary custom RefPtr hashes
...
RefPtr now exposes its own default hash
2026-04-25 22:10:01 +03:00
Bananymous
b5647ff258
BAN: Rewrite RefPtr,UniqPtr const semantics
...
const RefPtr<T> now allows accessing T as non-const. Also add default
hash function for RefPtr and UniqPtr based on the pointer value
2026-04-25 22:10:01 +03:00
Bananymous
bef53c726b
Userspace: Install libdl, libm, libpthread as symlinks to libc
...
Having dummy libraries was just unnecessary
2026-04-21 21:46:00 +03:00
Bananymous
6b43cadf3a
Kernel: Implement stack trace dump with safe memcpy
...
This fixes kernel panic if the stack trace cannot be read. Manually
validating pointers is definitely not safe
2026-04-21 21:20:52 +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
eea0154f18
LibC: Cleanup RNG and properly initialize to srand(1) at startup
2026-04-21 00:26:41 +03:00
Bananymous
ea4c34fc0b
LibC: Fix printf thread safety
...
I don't know why I was using a static buffer for value conversions :D
2026-04-21 00:25:56 +03:00
Bananymous
558ed8fd44
LibC: Define pthread_{equal,self} as macros
...
These really should get inlined :D
2026-04-21 00:25:16 +03:00
Bananymous
8665195350
Kernel: Allow main thread to call pthread_exit
...
Apparently this is allowed. Also when last thread calls pthread_join
the process should also exit
2026-04-21 00:23:35 +03:00
Bananymous
72a24a0d38
Kernel: Reorder FUTEX_WAIT value and timeout check
...
Return EAGAIN rather than ETIMEDOUT if value does not match at futex
entry
2026-04-21 00:20:37 +03:00
Bananymous
0ee50032f3
Kernel: Fix 32 bit signal trapoline offset
2026-04-21 00:19:33 +03:00
Bananymous
40f3546aca
BAN: Rewrite HashMap as a wrapper around HashSet
...
There is really no need to have two implementation of the same thing.
Only difference now is that HashMap's value type has to be movable but
this wasn't an issue
2026-04-21 00:18:18 +03:00
Bananymous
a8e496310b
Kernel: Use HashMap for fd->epoll_event mapping
...
I don't know why it was a static array :D
2026-04-21 00:14:24 +03:00
Bananymous
fe613e4274
BAN: Rewrite HashSet
...
Instead of representing the map as vector or linked lists which required
an allocation for every insertion and deallocation for removal, we now
store a single big contiguous block of memory and use hash chains to
handle collisions. This intuitively feels much better although I did not
run any benchmarks.
2026-04-21 00:14:24 +03:00
Bananymous
3264dcee44
BAN: Add Math::round_up_to_power_of_two
2026-04-21 00:14:24 +03:00
Bananymous
71649ffe09
Kernel Rework ThreadBlocker
...
I don't know why I though the block chain had to be stored fully in the
ThreadBlocker, that did not even fix the problem I was trying to fix
when I last rewrote it. Roll back to doubly linked list of block chain
and now just check that the node is contained within the ThreadBlocker
before removing and after acquiring the ThreadBlocker's lock. Also there
is no need to have a separate lock the node's blocker field. We can just
perform an atomic reads and writes to it. We can still get a blocker
that the node is no longer part of, but this can be resolved with a
simple check. This patch reduces ThreadBlocker's size from over 200
bytes to just 12 bytes +4 bytes padding
2026-04-20 12:50: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
8e543195b1
Kernel: Check for null in pthread_join
2026-04-19 17:52:21 +03:00
Bananymous
a24ec0da2b
LibC: Don't complain about stack size until 8192 bytes
...
It was unnecessary as userspace stack is way bigger than that...
2026-04-19 17:52:21 +03:00
Bananymous
e6284c3cf3
LibC/Kernel: Bump PATH_MAX to 4096
2026-04-19 17:52:21 +03:00
Bananymous
c04ad65f7f
LibC: Add mbsinit and wcsrtombs stubs
2026-04-17 18:40:18 +03:00
Bananymous
af17b29414
ports: Add xz port
2026-04-17 18:39:18 +03:00
Bananymous
7badcf80cf
ports: Add libarchive port
2026-04-17 18:37:41 +03:00
Bananymous
7f122d9e89
ports: Add bzip2 port
2026-04-17 18:37:30 +03:00
Bananymous
984c7c0a89
LibGUI: Fix packet sending and cleanup receiving
2026-04-15 21:52:51 +03:00
Bananymous
ce318c7930
LibGUI: Cleanup packet {,de}serialization
2026-04-15 21:52:13 +03:00
Bananymous
eff6c79e9e
ports/xbanan: Update to a working version
...
Also don't depend on mesa or Xlib. We only need the protocol headers to
compile the project
2026-04-15 19:25:54 +03:00
Bananymous
aaade52146
LibC: Use __builtin_thread_pointer for _get_uthread()
...
This generates much nicer assembly as it does not have to read thread
pointer for every access to TCB (errno, cancel_state, cancelled) and
instead it can read it once and use the same value for all accesses
2026-04-15 17:32:43 +03:00
Bananymous
1bf5e6a051
WindowServer: Fix xbanan access check
2026-04-15 16:40:30 +03:00