aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorFabian Imhof <fabian.imhof@ost.ch>2025-04-10 09:32:53 +0000
committerFabian Imhof <fabian.imhof@ost.ch>2025-04-10 09:32:53 +0000
commitbecafcadcea919b84029338983a453d06ef210a1 (patch)
treefb246528e288ad74f4bb007118dffe9d3b923dac /arch
parent295f1bc9a29267b72504fffb582a08c2467b1a7f (diff)
parentc2d22838c0500970f275069f19d2a0bd2a016d1b (diff)
downloadteachos-becafcadcea919b84029338983a453d06ef210a1.tar.xz
teachos-becafcadcea919b84029338983a453d06ef210a1.zip
Merge branch 'feat_inital_context_switching' of ssh://gitlab.ost.ch:45022/teachos/kernel into feat_inital_context_switching
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp3
-rw-r--r--arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp9
-rw-r--r--arch/x86_64/src/kernel/main.cpp4
3 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp b/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
index da3c8ff..377533c 100644
--- a/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
@@ -116,9 +116,6 @@ namespace teachos::arch::memory::heap
memory_block * first; ///< First free entry in our memory.
stl::mutex mutex; ///< Mutex to ensure only one thread calls allocate or deallocate at once.
};
-
- extern linked_list_allocator kernel_heap;
-
} // namespace teachos::arch::memory::heap
#endif // TEACHOS_ARCH_X86_64_MEMORY_HEAP_LINKED_LIST_ALLOCATOR_HPP
diff --git a/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp b/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
index 9b62110..80f01a8 100644
--- a/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
+++ b/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
@@ -8,17 +8,20 @@ namespace teachos::arch::context_switching::interrupt_descriptor_table
{
namespace
{
+ /// @brief Amount of currently reserved interrupt indicies.
+ /// See https://wiki.osdev.org/Interrupt_Descriptor_Table#IDT_items for more information.
+ constexpr uint8_t RESERVED_INTERRUPT_COUNT = 32U;
+
auto create_interrupt_descriptor_table() -> interrupt_descriptor_table
{
- // Only account for the reserved Vectors for now (0 - 31)
- interrupt_descriptor_table interrupt_descriptor_table{32};
+ interrupt_descriptor_table interrupt_descriptor_table{RESERVED_INTERRUPT_COUNT};
uint64_t offset = reinterpret_cast<uint64_t>(interrupt_handling::generic_interrupt_handler);
segment_selector selector{1U, segment_selector::REQUEST_LEVEL_KERNEL};
ist_offset ist{0U};
idt_flags flags{idt_flags::DESCRIPTOR_LEVEL_KERNEL | idt_flags::INTERRUPT_GATE | idt_flags::PRESENT};
- for (std::size_t i = 0; i < 32; i++)
+ for (std::size_t i = 0; i < interrupt_descriptor_table.size(); i++)
{
interrupt_descriptor_table.at(i) = {selector, ist, flags, offset};
}
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index 7787f30..daaf216 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -66,7 +66,7 @@ namespace teachos::arch::kernel
"mov %%ax, %%gs"
: /* No output from call */
: [input] "m"(segment_selector_b));
- asm volatile("iret"
+ asm volatile("iretq"
: /* No output from call */
: /* No input to call */);
}
@@ -74,7 +74,7 @@ namespace teachos::arch::kernel
[[gnu::naked]]
auto iret() -> void
{
- asm volatile("iret"
+ asm volatile("iretq"
: /* No output from call */
: /* No input to call */);
}