Commit Graph

999 Commits

Author SHA1 Message Date
Bananymous 097d9a6479 Kernel: Implement dummy IDT and GDT for i386 2024-03-26 00:10:42 +02:00
Bananymous 2dd0bfdece Kernel: Make i386 thread tramplines crash 2024-03-26 00:10:42 +02:00
Bananymous 26585bb1d9 Kernel: Implement signal trampoline for i386 2024-03-22 15:41:15 +02:00
Bananymous 0d92719433 Kernel: Remove old i386 spinlock code 2024-03-22 15:41:15 +02:00
Bananymous 1ab2722850 Kernel: Add PageTable stub to progress linking 2024-03-22 15:41:15 +02:00
Bananymous fe17958b9f Kernel: Rename rsp->sp and rip->ip
This makes more sense if we support i386
2024-03-22 15:41:15 +02:00
Bananymous 3e4d410646 Kernel: Fix AHCI device physical address writing on i386 target 2024-03-22 15:41:15 +02:00
Bananymous b5aae34d86 Kernel: Specify template paramenters where they cannot be deduced 2024-03-22 15:41:15 +02:00
Bananymous 7f029b2713 Kernel: Allow Processor compilation for i386 targets
This is achieved by rewriting some inline assembly and changing
ProcessorID to be 32 bit value. For some reason if processor id
is 8 bits gcc runs out of 8 bit registers on i386.
2024-03-22 15:41:15 +02:00
Bananymous 0424082e7b Kernel: Only compile lai for x86_64 targets
I will be dropping lai entirely soon. Once I get to writing AML
interpreter.
2024-03-22 15:41:15 +02:00
Bananymous 2352c86048 Kernel: i386 has 14 indirect blocks in TmpInode instead of 2
This allows keeping size of TmpInodeInfo as 128
2024-03-22 14:01:27 +02:00
Bananymous c0dff5e203 Kernel: Scheduler/Thread add inline assembly for i386 2024-03-22 14:01:27 +02:00
Bananymous d920785256 Kernel: RDRAND on i386 is called twice with 32 bit register 2024-03-22 14:01:27 +02:00
Bananymous 45cea14165 Kernel: Move sys_fork trampolines to kernel/arch/ directory 2024-03-22 12:48:54 +02:00
Bananymous 26ed689d30 Kernel: Remove old GDT, IDT and MMU code from i386
It will be easier to just rewrite them
2024-03-22 12:47:34 +02:00
Bananymous 7ce0370b6a Kernel: Define KERNEL_OFFSET for i386 target 2024-03-22 12:35:49 +02:00
Bananymous aa2e53c4f8 Kernel: E1000 fix physical address on 32 bit target 2024-03-22 12:35:38 +02:00
Bananymous 9ecd156622 Kenrel: Ext2 fix signed-unsigned comparisons 2024-03-22 12:35:29 +02:00
Bananymous 62f6128ba1 Kernel: Cleanup NVMe Queue command submission
There is techically a race condition on thread sleep and checking
done mask. This patch allows read to success even if this race
condition is hit, although the full timeout has to be waited.

This can be fixed in future with some sort of wait queues that
can properly handle this race condition.
2024-03-19 13:01:27 +02:00
Bananymous 9607b4205a Kernel: Fix kernel panic on signal
Signals are now added/handled without Scheduler's lock
2024-03-18 16:05:47 +02:00
Bananymous 090c3c9930 Kernel: NVMe queues now supports upto 64 simultaneous operations 2024-03-15 13:46:35 +02:00
Bananymous 48ea9e1c1d Kernel: PS2Controller uses RecursiveSpinLock so timeouts don't panic 2024-03-15 13:45:44 +02:00
Bananymous 42469b83fe Kernel: kernel panic is now sent to all processors 2024-03-15 13:45:01 +02:00
Bananymous e65bc040af Kernel: Now all active processors are used in scheduling
When a timer reschedule happens, ipi is broadcasted too all
processors for them to perform a reschedule!
2024-03-09 23:53:50 +02:00
Bananymous 89ca4c8a8b Kernel: Implement IPI broadcasting 2024-03-09 23:53:38 +02:00
Bananymous 2323a55517 Kernel: Debug lock is locked while dumping stack trace 2024-03-09 23:52:06 +02:00
Bananymous 45d6caa1d0 Kernel: APs now start their idle threads when scheduler is started 2024-03-09 23:51:40 +02:00
Bananymous 55d2a64f54 Kernel: Map interrupt handlers for all processors
This doesn't mean that processors will actually handle the irqs
2024-03-09 23:50:57 +02:00
Bananymous 2420886c2c Kernel: Move current and idle thread to Processor 2024-03-08 23:39:29 +02:00
Bananymous e636dce919 Kernel: Rewrite scheduler thread lists
Scheduler now has its own data SchedulerQueue which holds active nad
blocking thread lists. This removes need for BAN/Errors.h and making
current thread separate element instead of iterator into linked list.
This makes it possible to have current_thread on each processor
instead of a global one in Scheduler.
2024-03-08 22:13:45 +02:00
Bananymous 1a1f9b1cf2 Kernel: Fix {read,write}_gs_sized input operands to work always 2024-03-08 22:12:33 +02:00
Bananymous 23a2f8b903 Kernel: Cleanup multiprocessor startup by removing magic numbers 2024-03-07 17:01:17 +02:00
Bananymous 29fd682672 Kernel: Store current processor pointer in IA32_GS_BASE
This allows easier access to processors fields
2024-03-07 16:05:29 +02:00
Bananymous 6234a5bc0b Kernel: Move multiprocessor initialize after framebuffer is created
This allows getting output before multiprocessor is started.
2024-03-06 16:00:19 +02:00
Bananymous 54f64e7618 Kernel: Move current page table to Processor
APs can now map kernel page table and print current time!
2024-03-06 02:19:59 +02:00
Bananymous f0105cb7fb Kernel: Move Interruptable from InterruptController.h to its own file 2024-03-06 00:47:02 +02:00
Bananymous 76b0f80169 Kernel: Move IDT to Processor 2024-03-06 00:45:54 +02:00
Bananymous f84df175ce Kernel: Save BSB id 2024-03-06 00:36:09 +02:00
Bananymous 58aca68726 Kernel: Move GDT to Processor 2024-03-06 00:35:45 +02:00
Bananymous 8670364f44 BAN: Remove unnecessary include from Array.h 2024-03-06 00:01:06 +02:00
Bananymous 418bc54f2b Kernel: Move SpinLock definition to header and fix Scheduler locking
This patch allows inlining of spinlocks :)
2024-03-04 22:36:41 +02:00
Bananymous 9c36d7c338 BAN/Kernel: Rework assertion/panic system
BAN/Assert.h does not need any includes meaning it can be included
anywhere without problems.
2024-03-04 11:41:54 +02:00
Bananymous 8141b9977d Kernel: Per processor information is now stored in class Processor
This allows us to allocate processor stacks, and other per processor
structures dynamically in runtime. Giving processor stack to
ap_trampoline feels super hacky, but it works for now.
2024-03-03 22:30:06 +02:00
Bananymous c035d3c82c Kernel: Start all processors on kernel boot
Processors don't do anything, except print hello message and halt.
2024-03-03 02:19:43 +02:00
Bananymous 1de9daa40f Kernel: Move interrupt status stuff to Processor.h
SpinLocks are now locked with processor id instead of thread id. This
allows having multiple processors running while scheduler is not yet
activated.
2024-03-03 01:47:22 +02:00
Bananymous a667d88f93 Kernel: Remove now obsolete CriticalScope
All critical scopes in kernel are now replaced by SpinLocks. This
allows proper locking in actual multiprocessing with multiple cores.
2024-03-01 15:51:02 +02:00
Bananymous 8d7dd577ab Kernel: Replace last CriticalScopes in kernel with SpinLocks 2024-03-01 15:49:39 +02:00
Bananymous 054b41383f Kernel: Implement SpinLock unsafe that does not keep track of locker
This will be used in scheduler where thread ids are changing
2024-03-01 15:48:08 +02:00
Bananymous 02ad199138 Kernel: Move interrupt status functions to kernel/Interrupts.h 2024-03-01 02:13:28 +02:00
Bananymous 65c4f9db5b Kernel: Replace CriticalScopes with SpinLocks in Process/Thread 2024-03-01 02:13:28 +02:00