hle: kernel: Move slab heaps to their own container.

master
bunnei 2021-04-09 23:16:13 +07:00
parent 89edbe8aa2
commit cfa7b92563
2 changed files with 16 additions and 10 deletions

@ -692,6 +692,7 @@ void KernelCore::SetMulticore(bool is_multicore) {
}
void KernelCore::Initialize() {
slab_heap_container = std::make_unique<SlabHeapContainer>();
impl->Initialize(*this);
}

@ -260,15 +260,15 @@ public:
template <typename T>
KSlabHeap<T>& SlabHeap() {
if constexpr (std::is_same_v<T, Process>) {
return slab_heap_Process;
return slab_heap_container->process;
} else if constexpr (std::is_same_v<T, KThread>) {
return slab_heap_KThread;
return slab_heap_container->thread;
} else if constexpr (std::is_same_v<T, KEvent>) {
return slab_heap_KEvent;
return slab_heap_container->event;
} else if constexpr (std::is_same_v<T, KSharedMemory>) {
return slab_heap_KSharedMemory;
return slab_heap_container->shared_memory;
} else if constexpr (std::is_same_v<T, KLinkedListNode>) {
return slab_heap_KLinkedListNode;
return slab_heap_container->linked_list_node;
}
}
@ -301,11 +301,16 @@ private:
bool exception_exited{};
private:
KSlabHeap<Process> slab_heap_Process;
KSlabHeap<KThread> slab_heap_KThread;
KSlabHeap<KEvent> slab_heap_KEvent;
KSlabHeap<KSharedMemory> slab_heap_KSharedMemory;
KSlabHeap<KLinkedListNode> slab_heap_KLinkedListNode;
/// Helper to encapsulate all slab heaps in a single heap allocated container
struct SlabHeapContainer {
KSlabHeap<Process> process;
KSlabHeap<KThread> thread;
KSlabHeap<KEvent> event;
KSlabHeap<KSharedMemory> shared_memory;
KSlabHeap<KLinkedListNode> linked_list_node;
};
std::unique_ptr<SlabHeapContainer> slab_heap_container;
};
} // namespace Kernel