Commit Graph

1679 Commits

Author SHA1 Message Date
Bananymous 51fd7a607d Kernel: Fix IDE controller waiting
We did not correctly wait until controller is ready to receive data on
write command. Also remove possible kernel panic if controller sends
unexpected interrupts
2025-07-02 22:04:41 +03:00
Bananymous 8a0269d29e Kernel: Remove kernel processes
Kernel can just use raw threads, pretty muchs the only thing that
process provides is syscalls which kernel threads of course don't
need.

Also this makes init process have pid 1 :D
2025-07-02 01:54:03 +03:00
Bananymous 892e16dfb1 Kernel: Increase PS2 timeout to 300 ms, load PS2 in separate thread
PS/2 seems to hit command timeout sometimes on slow emulation so
increase the timeouts.

Also move PS/2 device initialization to a different thread because
device indentification waits for timeouts.
2025-07-02 00:17:42 +03:00
Bananymous 92e4078287 Kernel: Rewrite ThreadBlocker
This gets rid of a very old bug where kernel panics when thread is being
woken up and unblocked at the same time on different cores. This
required adding a new lock to SchedulerQueue::Node and adding a cap to
how many threads a threadblocker can simultaneously block. I don't think
I ever block more than five threads on the same ThreadBlocker so this
should be fine.
2025-07-02 00:17:42 +03:00
Bananymous 41e1819072 Kernel: Align argv and envp to pointer boundary
This bug was found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous fb7e9719a1 Kernel: Add fast fill method to framebuffer device
This makes `clear` much faster when running without kvm!
2025-07-02 00:17:42 +03:00
Bananymous c2d09b64ca Kernel: Drop 24 bpp support from double buffer
I don't even know why this was supported, I am not planning on making
the fb anything other than 32 bpp
2025-07-02 00:17:42 +03:00
Bananymous 1b2aa6c2da Kernel: Fix unaligned access in AML
Found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous a5b4cee298 Kernel: Load USTAR from a boot module if loading root partition fails
This allows banan-os to boot on hardware where we don't have working
storage driver or the storage driver fails (pretty common with my usb
mass storage drivers...)
2025-07-02 00:17:42 +03:00
Bananymous 17f1ac10e3 Kernel: Don't ignore modules passed with multiboot2 2025-07-02 00:17:42 +03:00
Bananymous c67198032f Kernel: Rewrite TmpFS block and inode allocation
This makes creating files and appending to then A LOT faster. Some code
I tested took 40 seconds in the previous implementation and less than a
second on the new one!

This code is really sketcy, I hope I'll never have to touch it again :)
2025-07-02 00:17:42 +03:00
Bananymous 107b092982 Kernel: Allow arbitrary sized tmpfs files
The 2 block limit started to get annoying :D
2025-07-02 00:17:42 +03:00
Bananymous bac06e45a4 Kernel: Fix TmpSymlinkInode target getting/setting 2025-07-02 00:17:42 +03:00
Bananymous 0e8a68831c Kernel: Fix TmpInode chmod not preserving file type 2025-07-02 00:17:42 +03:00
Bananymous 5912abd541 Kernel: Add error reporting for readonly mounted filesystems 2025-07-02 00:17:42 +03:00
Bananymous 13d33995cb Kernel: Make sure PageTable::fast_page gets passed page aligned addr 2025-06-30 01:48:47 +03:00
Bananymous c8c05f62b4 Kernel: Remove unused FileSystem::dev 2025-06-29 00:29:03 +03:00
Bananymous ebf2b16d09 Kernel: Implement chown to ext2 and tmpfs 2025-06-28 21:28:54 +03:00
Bananymous 7314cf708c Kernel: Only restart certain syscalls with SA_RESTART
SA_RESTART is not supposted to restart every function.
2025-06-28 20:25:35 +03:00
Bananymous db571b4859 Kernel: Allow relockign mutex even when holding a spinlock
Only reason mutex locking is now allowed with spinlocks is to prevent
yield.

Also try_lock can be now safely used while holding a spinlock
2025-06-28 19:40:54 +03:00
Bananymous e8491b34b8 Kernel/LibC: Rework TIOC{G,S}WINSZ more linux like
Userspace can freely set terminal size, kernel just updates it when for
example new font is loaded. Also SIGWINCH is now sent by kernel instead
of userspace.
2025-06-28 19:40:54 +03:00
Bananymous f73bb242f3 Kernel: Save fpu state and flags in signal handler
This was causing some weird crashes :D
2025-06-28 16:55:13 +03:00
Bananymous 9e895e5286 Kernel: Use fxsave64 and fxrstor64 on 64 bit target 2025-06-28 16:55:13 +03:00
Bananymous 5b0e5512a8 Kernel: Don't block in send until full message is sent
Only block until some data was sent. This allows select + send to be
actually non blocking if used correctly.

Also fixes a bug with non blocking sockets that could not send the full
message is one try.
2025-06-28 16:55:13 +03:00
Bananymous 05a727979a Kernel: Make sse initialization thread safe 2025-06-28 16:55:13 +03:00
Bananymous fe62ce4bae Kernel: Fix spurious wakeup from SYS_SLEEP 2025-06-28 16:55:13 +03:00
Bananymous 4695fa061d Kernel: Don't panic if UNIX socket is already bound but deleted 2025-06-28 16:55:13 +03:00
Bananymous 83c0ef3514 Kernel: Implement CLOCK_{PROCESS,THREAD}_CPUTIME_ID 2025-06-28 16:55:13 +03:00
Bananymous 93e5d09a63 Kernel/LibC: Implement flock 2025-06-28 16:55:13 +03:00
Bananymous 6d3d41abe2 Kernel: Fix possible division by zero in scheduler 2025-06-28 16:55:13 +03:00
Bananymous 3283359ac8 Kernel: Cleanup ANSI DSR 2025-06-19 19:05:49 +03:00
Bananymous fff16f6b8c Kernel: don't directly access user memory in mmap 2025-06-19 19:04:20 +03:00
Bananymous a347ceba74 Kernel: Cleanup sys_wait sleep/signal handling 2025-06-19 19:03:42 +03:00
Bananymous 05836fab4c Kernel: Allow accessing fd's inode without having read/search access
I have no idea what the point of this was. VFS is already verifying
read and search access
2025-06-19 19:02:28 +03:00
Bananymous 32c35a822b BuildSystem: binutils1.39->1.44, gcc12.2.0->15.1.0 2025-06-19 19:00:50 +03:00
Bananymous 9c86e5e54d Kernel: Add ANSI SGR 39 and 49
Also debug log unimplemented ANSI SRGs, this makes finding missing
commonly used ANSI SGR codes more easy
2025-06-18 20:34:55 +03:00
Bananymous 125f8b591d Kernel: Don't crash if socket tries to reconnect
:D
2025-06-11 01:54:41 +03:00
Bananymous e92f039a17 Kernel: Fix tcp sending with already sent unacknowledged bytes 2025-06-06 11:55:44 +03:00
Bananymous ef76ffa1c1 Kernel: Remove unnecessary hack
This is no longer needed as thread unlocks its spinlock before calling
Process::exit() on terminating signal
2025-06-06 11:13:55 +03:00
Bananymous 652eb2346c Kernel: Fix syscall interrupt disabling
If thread had a terminating signal, syscall leaving would try to lock
process's mutex while not having interrupts enabled
2025-06-06 11:12:48 +03:00
Bananymous 66726090ec Kenrel: Fix TCP connection closing
If TCP socket was connected with connect() instead of accept() it would
never send FIN to other end when it was closed.
2025-06-06 11:10:29 +03:00
Bananymous b668173cba Kernel: Fix pseudo terminal writability 2025-06-06 11:09:50 +03:00
Bananymous c6ded82406 Kernel: Fix a deadlock when thread is executing terminating signal 2025-06-06 06:52:27 +03:00
Bananymous a76c6faffc Kernel: Fix a deadlock when process is exiting 2025-06-06 06:52:02 +03:00
Bananymous 81ff71a97f Kernel: Track the number of recursive spinlocks a thread is holding 2025-06-06 06:51:15 +03:00
Bananymous 56db0efe58 Kernel: Add missing file for race condition fixes :) 2025-06-06 04:03:37 +03:00
Bananymous 5eefd98e1b Kernel: Add debugging macro to dump syscalls that take a long time 2025-06-06 04:00:57 +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 96d5ed9cc7 Kernel: Fix E1000 driver interrupts
I have no idea why, but E1000 seems to be missing interrupts frequently
when clearing ICR only at the end of the interrupt handler
2025-06-06 03:45:35 +03:00
Bananymous 73090ecb37 Kernel: TTY set EPOLLOUT 2025-06-05 22:04:51 +03:00
Bananymous 8812704601 Kernel: Make sure IPv4 and ARP packets are not missed
This is a really hacky solution but will do until i get atomic
unblocking with respect to locks
2025-06-05 22:03:15 +03:00
Bananymous 0f189d410e Kernel: Fix unix socket recv from
If connection on unix socket was closed and other end tries to recvfrom,
the thread would enter a fucked up state where it held the socket's
spinlock when returning to userspace.
2025-06-05 22:02:53 +03:00
Bananymous cfeabc4580 Kernel/Terminal: Fix ANSI SGR 8 bit color parsing 2025-06-05 20:43:57 +03:00
Bananymous f79db874bf Kernel: Fix ANSI CSI 1J
I was accidentally clearing the whole screen when I needed to clear from
cursor to the end of the screen
2025-06-05 02:38:57 +03:00
Bananymous 8de19aff3c Kernel/Terminal: Fix 24 bit ANSI SGR color parsing 2025-06-05 02:38:07 +03:00
Bananymous bf41b448d6 Kernel: Fix TCP sending
- Fix race condition when adding packet to send buffer before other end
  has acknowledged it
- Allow sending multiple packets before receiving ACK for previous ones
2025-06-04 22:21:35 +03:00
Bananymous 448632cf11 Kernel: Add fast path to pselect and ppoll
If events are available right away, don't create epoll object to wait
on. Also fix pselect return value to the number of bits set. Previously
return value could've been greater than that if epoll return EPOLLERR or
EPOLLHUP for events that were not listened to
2025-06-04 17:51:22 +03:00
Bananymous 943069b2a3 Kernel: Socket EPIPE and send SIGPIPE on write after hang up 2025-06-03 10:24:44 +03:00
Bananymous e305698e6b Kernel: Fix epoll EPOLLHUP and EPOLLERR reporting 2025-06-03 10:23:53 +03:00
Bananymous 4c0b7d44b4 Kernel: Enable ECHOE and ECHOK, support VKILL, fix VEOF 2025-06-02 16:26:53 +03:00
Bananymous fb466b5af7 Kernel: use termios c_cc values instead of hardcoded characters 2025-06-02 15:54:11 +03:00
Bananymous 7a645b8555 Kernel: Add SMP message StackTrace
This event is sent when user presses ctrl+{F1-F12} and it will dump the
corresponding processor's stack trace. This is really helpful for
detecting deadlocks in the system
2025-06-02 11:39:18 +03:00
Bananymous c5b0d0235f Kenrel: Allow Processor::send_smp_message to send event to current CPU 2025-06-02 11:39:18 +03:00
Bananymous e109b5cff6 Kernel: Remove unnecessary locks from Pipe
Inode already locks its own mutex when read/write is called there is no
need to explicitly lock them in read_impl/write_impl
2025-06-02 11:39:18 +03:00
Bananymous 9883fb7bf6 Kernel: Rewrite epoll notifying system
This removes the need to lock epoll's mutex when notifying epoll. This
prevents a ton of deadlocks when epoll is notified from an interrupt
handler or otherwise with interrupts disabled
2025-06-02 11:39:18 +03:00
Bananymous b2e3aefa72 Kernel: Don't crash when terminating process with signal 2025-06-01 16:59:02 +03:00
Bananymous 31bcad2535 LibC: Implement truncate 2025-06-01 13:48:03 +03:00
Bananymous b75970958e Kernel/LibC: Implement unlinkat 2025-06-01 13:48:03 +03:00
Bananymous 91756c057e LibC: Add all of the missing POSIX definitions in unistd.h and limits.h 2025-06-01 13:48:03 +03:00
Bananymous dbdefa0f4a LibC: Implement pthread cancelation
This code is not tested at all but it looks correct xD
2025-06-01 13:48:03 +03:00
Bananymous 56fdf6002c Kernel/LibC: Implement pthread_kill 2025-06-01 13:48:03 +03:00
Bananymous c957f1ddca LibC: Cleanup pthread code and add some pthread_attr functions
errno, pthread cleanup and pthread id are now stored in uthread. This
allows using these without TLS
2025-06-01 13:48:03 +03:00
Bananymous b1065fa01d Kernel/LibC: Add ppoll syscall and fix poll
poll is now using its own syscall instead of wrapping aroung pselect.
This adds less overhead on top of poll and adds support for POLLHUP
2025-06-01 13:48:03 +03:00
Bananymous 8ff9c030bf Kernel: Add better termios support
I'm not sure if this is correct but at least it's better than before :)
2025-06-01 13:48:03 +03:00
Bananymous 9b875fb930 Kernel: Make epoll work with different fds pointing to same inode 2025-06-01 13:48:03 +03:00
Bananymous 857bac4b78 Kernel: Disable unused interrupt methods in PCI devices 2025-06-01 13:48:03 +03:00
Bananymous 30074c290d Kernel: Add more descriptive names to sockets types 2025-06-01 13:48:03 +03:00
Bananymous 60d1c26114 Kernel: Fix race condition in FileBackedRegion creation 2025-06-01 13:48:03 +03:00
Bananymous 692ba43182 Kernel: Fix spinlock bugs found by the new spinlock security 2025-06-01 13:48:03 +03:00
Bananymous 6542a037df Kernel: Make spinlocks more safe
Kernel now makes sure thread is not holding any spinlocks when it tries
to lock a mutex or yield. Spinlocks are supposed to be only used for
short times without the possibility of yielding
2025-06-01 13:48:03 +03:00
Bananymous 9f4b451501 Kernel: Fix epoll deadlock
If epoll_wait and epoll_notify were called at the same time, there was a
possible deadlock when epoll was confirming the event from the inode
2025-06-01 13:48:03 +03:00
Bananymous 1bd454b8fd Kernel/LibC: Implement utime* family functions
This patch adds *working*
 - utime
 - utimes
 - utimensat
 - futimens
2025-06-01 13:48:03 +03:00
Bananymous cd5b351ce4 Kernel: Fix fchmodat mode handling
Ignore file type bits instead of returning EINVAL if they are set
2025-05-29 03:24:31 +03:00
Bananymous 4d4fb3b6ec Kernel: Cleanup and fix pipe
pipe now sends SIGPIPE and returns EPIPE when writing and no readers are
open
2025-05-29 01:02:22 +03:00
Bananymous 89c9bfd052 Kernel/LibC: Implement `socketpair` for UNIX sockets 2025-05-28 03:10:01 +03:00
Bananymous 12b93567f7 Kernel/LibC: Implement `getpeername` 2025-05-28 03:10:01 +03:00
Bananymous 2f37776614 Kernel: Notify epoll on new TCP connections 2025-05-28 03:10:01 +03:00
Bananymous f778bca3f2 Kernel: Remove accidentally commited debug code :) 2025-05-28 03:10:01 +03:00
Bananymous a945d19750 Kernel: Partially fix PCI PIN interrupt routing
Don't fail early if the first device is not the one we are looking for
2025-05-28 03:10:01 +03:00
Bananymous 7f04b2c96c Kernel: Fix E1000 interrupt handling
E1000 does not support MSI-X and thus does not generate RxQ0 interrupts.
2025-05-28 03:10:01 +03:00
Bananymous 79a2b84c81 Kernel: Fix process exit when there are multiple threads 2025-05-28 03:10:01 +03:00
Bananymous 44b762f916 Kernel/LibC: Implement pwrite and make pread non-locking 2025-05-28 03:10:01 +03:00
Bananymous 6be3b1d7f2 commit from banan-os :D 2025-05-27 23:57:43 +00:00
Bananymous 0e0d7016b3 Kernel: Rename has_hangup -> has_hungup 2025-05-17 12:39:23 +03:00
Bananymous 553c76ab0f Kernel: Add locking to inode's epoll list
This was prone to crashing :)
2025-05-17 12:36:36 +03:00
Bananymous d1bb72f6fb Kernel: Don't allow CPU load printing underflow 2025-05-13 10:19:13 +03:00
Bananymous 1bcd1edbf5 Kernel/LibC: Implement basic epoll
This implementation is on top of inodes instead of fds as linux does it.
If I start finding ports/software that relies on epoll allowing
duplicate inodes, I will do what linux does.

I'm probably missing multiple epoll_notify's which may cause hangs but
the system seems to work fine :dd:
2025-05-13 10:18:05 +03:00
Bananymous 143a00626b Kernel: Fix fork cmdline copying and copy environ 2025-05-13 10:16:21 +03:00
Bananymous 0eb981f51c Kernel: Fix Random.h includes 2025-05-13 10:16:21 +03:00
Bananymous 6cc01349f7 Kernel: Fix unblocking recv through read 2025-05-13 10:16:21 +03:00