From c4ba088a5df13ff4b4d8853216231d690f2c79c0 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 23 Feb 2023 15:49:42 -0500 Subject: kernel: refactor priority inheritance to represent locks as C++ objects --- src/core/hle/kernel/kernel.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'src/core/hle/kernel/kernel.cpp') diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index ce94d3605..ef7057ff7 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -1318,4 +1318,97 @@ const Core::System& KernelCore::System() const { return impl->system; } +struct KernelCore::SlabHeapContainer { + KSlabHeap client_session; + KSlabHeap event; + KSlabHeap linked_list_node; + KSlabHeap port; + KSlabHeap process; + KSlabHeap resource_limit; + KSlabHeap session; + KSlabHeap shared_memory; + KSlabHeap shared_memory_info; + KSlabHeap thread; + KSlabHeap transfer_memory; + KSlabHeap code_memory; + KSlabHeap device_address_space; + KSlabHeap page_buffer; + KSlabHeap thread_local_page; + KSlabHeap object_name; + KSlabHeap session_request; + KSlabHeap secure_system_resource; + KSlabHeap lock_info; + KSlabHeap event_info; + KSlabHeap debug; +}; + +template +KSlabHeap& KernelCore::SlabHeap() { + if constexpr (std::is_same_v) { + return slab_heap_container->client_session; + } else if constexpr (std::is_same_v) { + return slab_heap_container->event; + } else if constexpr (std::is_same_v) { + return slab_heap_container->linked_list_node; + } else if constexpr (std::is_same_v) { + return slab_heap_container->port; + } else if constexpr (std::is_same_v) { + return slab_heap_container->process; + } else if constexpr (std::is_same_v) { + return slab_heap_container->resource_limit; + } else if constexpr (std::is_same_v) { + return slab_heap_container->session; + } else if constexpr (std::is_same_v) { + return slab_heap_container->shared_memory; + } else if constexpr (std::is_same_v) { + return slab_heap_container->shared_memory_info; + } else if constexpr (std::is_same_v) { + return slab_heap_container->thread; + } else if constexpr (std::is_same_v) { + return slab_heap_container->transfer_memory; + } else if constexpr (std::is_same_v) { + return slab_heap_container->code_memory; + } else if constexpr (std::is_same_v) { + return slab_heap_container->device_address_space; + } else if constexpr (std::is_same_v) { + return slab_heap_container->page_buffer; + } else if constexpr (std::is_same_v) { + return slab_heap_container->thread_local_page; + } else if constexpr (std::is_same_v) { + return slab_heap_container->object_name; + } else if constexpr (std::is_same_v) { + return slab_heap_container->session_request; + } else if constexpr (std::is_same_v) { + return slab_heap_container->secure_system_resource; + } else if constexpr (std::is_same_v) { + return slab_heap_container->lock_info; + } else if constexpr (std::is_same_v) { + return slab_heap_container->event_info; + } else if constexpr (std::is_same_v) { + return slab_heap_container->debug; + } +} + +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); +template KSlabHeap& KernelCore::SlabHeap(); + } // namespace Kernel -- cgit v1.2.3