diff --git a/zion/lib/linked_list.h b/lib/glacier/container/linked_list.h similarity index 66% rename from zion/lib/linked_list.h rename to lib/glacier/container/linked_list.h index 8ed6b05..b487c90 100644 --- a/zion/lib/linked_list.h +++ b/lib/glacier/container/linked_list.h @@ -2,7 +2,7 @@ #include -#include "debug/debug.h" +namespace glcr { template class LinkedList { @@ -32,10 +32,6 @@ class LinkedList { } T PopFront() { - if (size_ == 0 || front_ == nullptr) { - panic("Popping from empty list"); - } - size_--; ListItem* old_front = front_; @@ -45,33 +41,6 @@ class LinkedList { return ret; } - /* - * Returns the front item in the list and pushes the passed item to the back. - * - * Done in one function to avoid a memory alloc/dealloc during scheduling. - **/ - T CycleFront(const T& new_item) { - if (size_ == 0 || front_ == nullptr) { - panic("Cycling empty list"); - } - - T ret = front_->item; - front_->item = new_item; - if (size_ == 1) { - return ret; - } - - ListItem* old_front = front_; - ListItem* iter = front_; - front_ = front_->next; - while (iter->next != nullptr) { - iter = iter->next; - } - iter->next = old_front; - old_front->next = nullptr; - return ret; - } - T PeekFront() const { return front_->item; } struct ListItem { @@ -105,3 +74,5 @@ class LinkedList { ListItem* front_ = nullptr; }; + +} // namespace glcr diff --git a/zion/capability/capability_table.cpp b/zion/capability/capability_table.cpp index e673357..5a72761 100644 --- a/zion/capability/capability_table.cpp +++ b/zion/capability/capability_table.cpp @@ -1,5 +1,7 @@ #include "capability/capability_table.h" +#include "debug/debug.h" + CapabilityTable::CapabilityTable() {} uint64_t CapabilityTable::AddExistingCapability( diff --git a/zion/capability/capability_table.h b/zion/capability/capability_table.h index 21a9ee2..fadb84f 100644 --- a/zion/capability/capability_table.h +++ b/zion/capability/capability_table.h @@ -1,9 +1,9 @@ #pragma once +#include #include #include "capability/capability.h" -#include "lib/linked_list.h" #include "lib/mutex.h" class CapabilityTable { @@ -30,7 +30,7 @@ class CapabilityTable { uint64_t id; glcr::RefPtr cap; }; - LinkedList capabilities_; + glcr::LinkedList capabilities_; }; template diff --git a/zion/lib/message_queue.cpp b/zion/lib/message_queue.cpp index cd9dc7b..8575e4d 100644 --- a/zion/lib/message_queue.cpp +++ b/zion/lib/message_queue.cpp @@ -1,5 +1,6 @@ #include "lib/message_queue.h" +#include "debug/debug.h" #include "scheduler/scheduler.h" z_err_t UnboundedMessageQueue::PushBack(uint64_t num_bytes, const void* bytes, diff --git a/zion/lib/message_queue.h b/zion/lib/message_queue.h index c58d0c6..4cfe4bd 100644 --- a/zion/lib/message_queue.h +++ b/zion/lib/message_queue.h @@ -1,13 +1,13 @@ #pragma once #include +#include #include #include #include #include "capability/capability.h" #include "include/ztypes.h" -#include "lib/linked_list.h" #include "lib/mutex.h" class MessageQueue { @@ -51,10 +51,10 @@ class UnboundedMessageQueue : public MessageQueue { uint64_t num_bytes; uint8_t* bytes; - LinkedList> caps; + glcr::LinkedList> caps; }; - LinkedList> pending_messages_; + glcr::LinkedList> pending_messages_; }; class SingleMessageQueue : public MessageQueue { @@ -79,5 +79,5 @@ class SingleMessageQueue : public MessageQueue { bool has_read_ = false; uint64_t num_bytes_; uint8_t* bytes_; - LinkedList> caps_; + glcr::LinkedList> caps_; }; diff --git a/zion/object/address_space.cpp b/zion/object/address_space.cpp index e0e6f40..8cb6244 100644 --- a/zion/object/address_space.cpp +++ b/zion/object/address_space.cpp @@ -1,5 +1,6 @@ #include "object/address_space.h" +#include "debug/debug.h" #include "memory/kernel_stack_manager.h" #include "memory/paging_util.h" #include "memory/physical_memory.h" diff --git a/zion/object/address_space.h b/zion/object/address_space.h index 0a6e9c6..304fc21 100644 --- a/zion/object/address_space.h +++ b/zion/object/address_space.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -86,7 +87,7 @@ class AddressSpace : public KernelObject { uint64_t vaddr; glcr::RefPtr mem_obj; }; - LinkedList memory_mappings_; + glcr::LinkedList memory_mappings_; MemoryMapping* GetMemoryMappingForAddr(uint64_t vaddr); }; diff --git a/zion/object/memory_object.h b/zion/object/memory_object.h index c1b0778..b2fdc29 100644 --- a/zion/object/memory_object.h +++ b/zion/object/memory_object.h @@ -1,6 +1,7 @@ #pragma once -#include "lib/linked_list.h" +#include + #include "object/kernel_object.h" class MemoryObject; @@ -37,7 +38,7 @@ class MemoryObject : public KernelObject { virtual uint64_t PageNumberToPhysAddr(uint64_t page_num); - LinkedList phys_page_list_; + glcr::LinkedList phys_page_list_; }; class FixedMemoryObject : public MemoryObject { diff --git a/zion/object/process.h b/zion/object/process.h index 0e86e15..b305511 100644 --- a/zion/object/process.h +++ b/zion/object/process.h @@ -1,11 +1,11 @@ #pragma once +#include #include #include #include "capability/capability.h" #include "capability/capability_table.h" -#include "lib/linked_list.h" #include "lib/mutex.h" #include "object/address_space.h" #include "object/channel.h" @@ -66,6 +66,6 @@ class Process : public KernelObject { uint64_t next_thread_id_ = 0; uint64_t next_cap_id_ = 0x100; - LinkedList> threads_; + glcr::LinkedList> threads_; CapabilityTable caps_; }; diff --git a/zion/scheduler/process_manager.cpp b/zion/scheduler/process_manager.cpp index d4318d2..9c87324 100644 --- a/zion/scheduler/process_manager.cpp +++ b/zion/scheduler/process_manager.cpp @@ -1,5 +1,7 @@ #include "scheduler/process_manager.h" +#include "debug/debug.h" + ProcessManager* gProcMan = nullptr; void ProcessManager::Init() { diff --git a/zion/scheduler/process_manager.h b/zion/scheduler/process_manager.h index 88497e4..c925919 100644 --- a/zion/scheduler/process_manager.h +++ b/zion/scheduler/process_manager.h @@ -1,8 +1,8 @@ #pragma once +#include #include -#include "lib/linked_list.h" #include "object/process.h" class ProcessManager { @@ -18,7 +18,7 @@ class ProcessManager { private: // TODO: This should be a hashmap. - LinkedList> proc_list_; + glcr::LinkedList> proc_list_; }; extern ProcessManager* gProcMan; diff --git a/zion/scheduler/scheduler.cpp b/zion/scheduler/scheduler.cpp index 431dc04..6b4b7db 100644 --- a/zion/scheduler/scheduler.cpp +++ b/zion/scheduler/scheduler.cpp @@ -2,7 +2,6 @@ #include "common/gdt.h" #include "debug/debug.h" -#include "lib/linked_list.h" #include "scheduler/process_manager.h" namespace { diff --git a/zion/syscall/process.cpp b/zion/syscall/process.cpp index fdfb3c6..e445239 100644 --- a/zion/syscall/process.cpp +++ b/zion/syscall/process.cpp @@ -1,6 +1,7 @@ #include "syscall/process.h" #include "capability/capability.h" +#include "debug/debug.h" #include "scheduler/process_manager.h" #include "scheduler/scheduler.h" diff --git a/zion/syscall/syscall.cpp b/zion/syscall/syscall.cpp index cd6f59f..8e27fee 100644 --- a/zion/syscall/syscall.cpp +++ b/zion/syscall/syscall.cpp @@ -3,6 +3,7 @@ #include #include "common/msr.h" +#include "debug/debug.h" #include "scheduler/scheduler.h" #include "syscall/address_space.h" #include "syscall/capability.h" diff --git a/zion/syscall/thread.cpp b/zion/syscall/thread.cpp index d10166c..7f78e37 100644 --- a/zion/syscall/thread.cpp +++ b/zion/syscall/thread.cpp @@ -1,6 +1,7 @@ #include "syscall/thread.h" #include "capability/capability.h" +#include "debug/debug.h" #include "scheduler/scheduler.h" glcr::ErrorCode ThreadCreate(ZThreadCreateReq* req) { @@ -29,6 +30,7 @@ glcr::ErrorCode ThreadExit(ZThreadExitReq*) { auto curr_thread = gScheduler->CurrentThread(); curr_thread->Exit(); panic("Returned from thread exit"); + UNREACHABLE } glcr::ErrorCode ThreadWait(ZThreadWaitReq* req) {