Commit Graph
2028 Commits
Author SHA1 Message Date
Bananymous 0b53fba991 Kernel: Fix PCI PIN interrupt allocation and handling
We now use the correct PIN interrupt from the interrupt line field
instead of writing to it, this had no effect :D

PIN interrupts are now mapped as shared and level triggered, this
properly allows PIN interrupt sharing with multiple devices
2026-07-20 10:45:32 +03:00
Bananymous 0d390e2246 Kernel: Send EOI after handling the interrupt
There is no need to send it prior to handling. This required us to not
yield from HPET/PIT irq so that the EOI actually gets sent
2026-07-20 10:43:50 +03:00
Bananymous a3b7a758eb Kernel: Allow allocating shared interrupts and setting trigger mode 2026-07-20 10:28:18 +03:00
Bananymous d46d7a5123 Kernel: Cleanup entering acpi mode
There is no need to pass the current mode as an argument as ACPI has
access to that info either way.

Only route INTx objects when using ACPI, they won't be used otherwise
2026-07-20 09:02:18 +03:00
Bananymous a9cf0134b7 Kernel: Don't block thread if the wake time has already passed 2026-07-20 06:58:30 +03:00
Bananymous 2e8239fefa Kernel: Fix thread block timeout
I was comparint ms against ns making timeouts practically never wake up
:)
2026-07-20 06:58:30 +03:00
Bananymous 2ddee7016e Kernel: Fix another scheduler bug :^) 2026-07-20 06:58:30 +03:00
Bananymous 6ebd3a8aca Kernel: Rewrite the AHCI driver
There was a lot of stuff wrong with this driver and it was only getting
speeds of ~2.5 MB/s. Now 4K blocks get ~17 MB/s which is not good but
definitely better. I'm pretty sure the issue is qemu's emulation as 85%
of time is spent between sending the command and it to complete.
Large blocks are now supported too, qemu with block size 1M gets around
600 MB/s read speeds.
2026-07-20 06:58:30 +03:00
Bananymous 96e5779182 Kernel: Fix out of bounds reads on storage devices 2026-07-20 04:07:23 +03:00
Bananymous 02f05436fc Kernel: Fix zero sized reads from a partition 2026-07-20 04:07:23 +03:00
Bananymous 51251e492e Kernel: Fix fallback PS/2 interrupt numbers
I haven't used the fallbacks in so long that I didn't realize they were
wrong :D
2026-07-20 04:07:23 +03:00
Bananymous 20e36125c8 Kernel: Cleanup very old AHCI code 2026-07-20 04:07:23 +03:00
Bananymous 19c228362b Kernel: Make ext2 block buffers page aligned 2026-07-20 04:07:23 +03:00
Bananymous 5329ec5912 Kernel: Rework spinlock usage when blocking the current thread
The old SpinLockAsMutex was pretty confusing first of all. It also was
causing the issue thats been around for maybe a year now which is the
only consistently happening kernel panic. I've been pretty confused
about this and finally figured out what was causing this.

The main issue was that we were accidentally enabling interrupts when
blocking a thread that passed SpinLockAsMutex from normally interrupt
enabled context. This led to receiving IPI for thread unblock while
we were actively blocking the thread. I'm very suprized this had't
caused any more serious issues than occasional kernel panics :^)
2026-07-20 04:07:23 +03:00
Bananymous edc95e1c09 Kernel: Disable SMP message handling while blocking a thread
There were some race conditions on a thread getting unblocked before
being moved to the block queue
2026-07-20 04:07:23 +03:00
Bananymous 51b9dcebbc Kernel: Support FIONBIO ioctl 2026-07-20 04:07:23 +03:00
Bananymous 4df58c5155 Kernel: Check for overflow in seek syscall 2026-07-20 04:07:23 +03:00
Bananymous ecfd98fad0 bootloader: Don't use random packing in memory map 2026-07-08 21:48:14 +03:00
Bananymous 3ee6240806 Kernel: Prioritize EEXISTS sys_mkdir
This fixes `mkdir -p ...` failing to create existing parents which are
not writable
2026-07-07 16:59:20 +03:00
Bananymous 0843b8989d Kernel: Fix timer deadline issues in scheduler
Don't wake up threads when getting the next timer deadline.
If we are idling this can: remove thread from block list, get the
deadline for the next blocked thread, return to idle thread. This will
end up sleeping until the next wake up condition which in the worst
case would be rebalance, or indefinitely when not running SMP.

Make sure we always set the next timer deadline. I was not doing that if
the timer interrupt did not lead to a yield
2026-07-07 10:30:07 +03:00
Bananymous 49662aa994 Kernel: Don't use peridic interrupts for scheduling
Scheduler will now set a timer interrupt deadline for when it should get
interrupted next. This fixes a big issue I've had for a long time where
sleeping on an idle core would have to wait for the next periodic
interrupt to wake up. This could cause 1 ms sleeps to be close to 10 ms.

This currently only supports lapic timers and will still fallback to
periodic interrupts when running with PIC. I should add deadline support
to PIT/HPET but why would you run with APIC disabled ;)
2026-07-07 04:53:41 +03:00
Bananymous eee0b7c3ff Kernel: Make ioctl take unsigned long instead of int
this is what linux does :D

also fix one or two `return ioctl` instead of `return ioctl_impl`
2026-07-07 03:12:39 +03:00
Bananymous 7a696c4d63 Kenrel: Cleanup locking in close 2026-07-04 19:19:10 +03:00
Bananymous 89d3ee7b92 Kernel: Use per cpu fast page when clearing SMO pages 2026-07-04 19:18:31 +03:00
Bananymous 879783052d Terminal: Use gnu <start> ... <end> syntax in switch cases 2026-07-04 19:17:41 +03:00
Bananymous 5256fd2e0a LibInput: Add support for right super and application keys 2026-07-04 19:11:30 +03:00
Bananymous 63b2284324 Kernel/LibC: support RDTSCP based clock_gettime
RDTSCP seems to be faster than LSL and it removes the need for getting
the current cpu twice to make sure TSC is read on the correct CPU
2026-07-03 06:32:04 +03:00
Bananymous 7219eac65f Kernel: Remove unnecessary page table validation
Processes always have a page table when they are initialized. This was
not true a long time ago when kernel threads could also be processes
2026-07-02 20:02:24 +03:00
Bananymous 0dc74beb0f Kernel/LibC: Allocate thread stacks in userspace
This adds support for pthread function for stack manipulation.

Also keep track of main threads stack in the uthread
2026-07-02 20:02:24 +03:00
Bananymous 991f7024d5 Kernel: Allow fork to fail at any point 2026-07-02 20:02:24 +03:00
Bananymous 6d1696b77e Kernel: Don't allocate userspace stacks in Thread
Thread only cares about stack's vaddr and size. Stacks are now allocated
before creating the threads.
2026-07-02 20:02:24 +03:00
Bananymous b19b7f064a LibC: Make pthread_t pointer to uthread instead of a thread id
This will allow getting info about other threads in userspace!
2026-07-02 20:02:24 +03:00
Bananymous f449ca8161 Kenrel: Separate pthread API from kernel API
It didn't really make sense for the syscalls to be named as the pthread
equivalents. Now the kernel just uses thread ids
2026-07-02 20:02:24 +03:00
Bananymous 5540bc4147 Kernel: Fix USB SCSI device naming 2026-07-02 20:02:24 +03:00
Bananymous d8f136a76f Kernel: Remove the weird StorageController base class
This wasn't really used for anything and broke nvme controller as it was
now doubly ref counted :P
2026-07-02 20:02:24 +03:00
Bananymous 59c59c3316 Kernel: Expose stack base/size and page size in auxv 2026-07-02 20:02:24 +03:00
Bananymous d241975ce1 Kernel: Remove SYS_SLEEP and cleanup SYS_NANOSLEEP
`sleep` is now implemented in terms of `nanosleep`. `nanosleep` is now
more precise and handles overflow when calculating wakeup time. I don't
think anything was depending on this, but I could see a program sleeping
for max time to block until signal.
2026-07-02 15:22:52 +03:00
Bananymous 20663b533b Kernel: Rework sleeping API
instead of sleep_{ns,ms} we now have sleep_{for,until}_{ns,ms}. This
makes code cleaner that just wants to sleep until some timestamp
2026-07-02 15:22:52 +03:00
Bananymous f121e80bfd Kernel: Fix PROT_EXEC flags in sys_mprotect 2026-06-30 20:14:38 +03:00
Bananymous 4e28a35af9 Kernel: Support hardware checksum offload on RTL8169 receive 2026-06-30 20:14:38 +03:00
Bananymous ddb7641b05 Kernel: Support hardware checksum offload on E1000 receive 2026-06-30 20:14:38 +03:00
Bananymous a6ad9b9b2e Kernel: Add system for hardware checksum offload on received packets 2026-06-30 20:14:38 +03:00
Bananymous c0bd07174d Kernel: Reduce the number of E1000 register reads while receiving
There is no need to read and write the receive tail pointer for every
packet. This change bumped my TCP speed from ~11MB/s to ~40MB/s which is
my network speed limit
2026-06-30 20:14:38 +03:00
Bananymous 8f4e15b78e Kernel: Use spinlocks and disable interrupts with loopback interface
This makes sure we don't get pre-empted after acquiring a descriptor but
before finishing marking it ready
2026-06-30 20:14:38 +03:00
Bananymous 17e6e53948 Kernel: Move Ethernet header prepending from NIC to helper 2026-06-30 20:14:38 +03:00
Bananymous 223835c37d Kernel: Fix TCP stack sending a lot of DUP-ACKs 2026-06-30 20:14:37 +03:00
Bananymous aedd53b3e0 Kernel: Disable interrupts while appending packet in E1000
This avoids getting rescheduled and having other packets waiting to get
sent because of that
2026-06-30 20:14:37 +03:00
Bananymous 6339044e4c Kernel: Fix RTL8169 driver
This now works properly on real hardware. Main issue was a race
condition with now ISR was handled in the interrupt handler. We now loop
until we read back ISR as zero
2026-06-30 20:14:37 +03:00
Bananymous 6e47fa084b Kernel: Fix ext2 indirect block lookup math
This was broken for doubly and triply indirect blocks :D
2026-06-30 20:14:37 +03:00
Bananymous 9919cbf66e Kernel: Pass interpreter base address in auxiliary vector 2026-06-30 20:14:37 +03:00