summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.h
diff options
context:
space:
mode:
authorGravatar bunnei2022-03-11 16:11:57 -0800
committerGravatar bunnei2022-03-14 18:14:54 -0700
commita25cd4bb4bb00949d0f51ebde093e04639e3bb85 (patch)
treec775c4690b24b1632cf6c3a5a591e6dfe1ee0417 /src/core/hle/kernel/kernel.h
parentcore: hle: kernel: k_page_buffer: Add KThreadLocalPage primitive. (diff)
downloadyuzu-a25cd4bb4bb00949d0f51ebde093e04639e3bb85.tar.gz
yuzu-a25cd4bb4bb00949d0f51ebde093e04639e3bb85.tar.xz
yuzu-a25cd4bb4bb00949d0f51ebde093e04639e3bb85.zip
core: hle: kernel: Update init_slab_heap, use device memory, and add KThreadLocalPage and KPageBuffer.
- Refreshes our slab initialization code to latest known behavior. - Moves all guest kernel slabs into emulated device memory. - Adds KThreadLocalPage and KPageBuffer, which we will use for accurate TLS management.
Diffstat (limited to 'src/core/hle/kernel/kernel.h')
-rw-r--r--src/core/hle/kernel/kernel.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index c1254b18d..d4306d5ef 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -43,6 +43,7 @@ class KHandleTable;
43class KLinkedListNode; 43class KLinkedListNode;
44class KMemoryLayout; 44class KMemoryLayout;
45class KMemoryManager; 45class KMemoryManager;
46class KPageBuffer;
46class KPort; 47class KPort;
47class KProcess; 48class KProcess;
48class KResourceLimit; 49class KResourceLimit;
@@ -52,6 +53,7 @@ class KSession;
52class KSharedMemory; 53class KSharedMemory;
53class KSharedMemoryInfo; 54class KSharedMemoryInfo;
54class KThread; 55class KThread;
56class KThreadLocalPage;
55class KTransferMemory; 57class KTransferMemory;
56class KWorkerTaskManager; 58class KWorkerTaskManager;
57class KWritableEvent; 59class KWritableEvent;
@@ -239,12 +241,6 @@ public:
239 /// Gets the virtual memory manager for the kernel. 241 /// Gets the virtual memory manager for the kernel.
240 const KMemoryManager& MemoryManager() const; 242 const KMemoryManager& MemoryManager() const;
241 243
242 /// Gets the slab heap allocated for user space pages.
243 KSlabHeap<Page>& GetUserSlabHeapPages();
244
245 /// Gets the slab heap allocated for user space pages.
246 const KSlabHeap<Page>& GetUserSlabHeapPages() const;
247
248 /// Gets the shared memory object for HID services. 244 /// Gets the shared memory object for HID services.
249 Kernel::KSharedMemory& GetHidSharedMem(); 245 Kernel::KSharedMemory& GetHidSharedMem();
250 246
@@ -336,6 +332,10 @@ public:
336 return slab_heap_container->writeable_event; 332 return slab_heap_container->writeable_event;
337 } else if constexpr (std::is_same_v<T, KCodeMemory>) { 333 } else if constexpr (std::is_same_v<T, KCodeMemory>) {
338 return slab_heap_container->code_memory; 334 return slab_heap_container->code_memory;
335 } else if constexpr (std::is_same_v<T, KPageBuffer>) {
336 return slab_heap_container->page_buffer;
337 } else if constexpr (std::is_same_v<T, KThreadLocalPage>) {
338 return slab_heap_container->thread_local_page;
339 } 339 }
340 } 340 }
341 341
@@ -397,6 +397,8 @@ private:
397 KSlabHeap<KTransferMemory> transfer_memory; 397 KSlabHeap<KTransferMemory> transfer_memory;
398 KSlabHeap<KWritableEvent> writeable_event; 398 KSlabHeap<KWritableEvent> writeable_event;
399 KSlabHeap<KCodeMemory> code_memory; 399 KSlabHeap<KCodeMemory> code_memory;
400 KSlabHeap<KPageBuffer> page_buffer;
401 KSlabHeap<KThreadLocalPage> thread_local_page;
400 }; 402 };
401 403
402 std::unique_ptr<SlabHeapContainer> slab_heap_container; 404 std::unique_ptr<SlabHeapContainer> slab_heap_container;