diff options
| author | 2022-03-11 16:11:57 -0800 | |
|---|---|---|
| committer | 2022-03-14 18:14:54 -0700 | |
| commit | a25cd4bb4bb00949d0f51ebde093e04639e3bb85 (patch) | |
| tree | c775c4690b24b1632cf6c3a5a591e6dfe1ee0417 /src/core/hle/kernel/kernel.h | |
| parent | core: hle: kernel: k_page_buffer: Add KThreadLocalPage primitive. (diff) | |
| download | yuzu-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.h | 14 |
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; | |||
| 43 | class KLinkedListNode; | 43 | class KLinkedListNode; |
| 44 | class KMemoryLayout; | 44 | class KMemoryLayout; |
| 45 | class KMemoryManager; | 45 | class KMemoryManager; |
| 46 | class KPageBuffer; | ||
| 46 | class KPort; | 47 | class KPort; |
| 47 | class KProcess; | 48 | class KProcess; |
| 48 | class KResourceLimit; | 49 | class KResourceLimit; |
| @@ -52,6 +53,7 @@ class KSession; | |||
| 52 | class KSharedMemory; | 53 | class KSharedMemory; |
| 53 | class KSharedMemoryInfo; | 54 | class KSharedMemoryInfo; |
| 54 | class KThread; | 55 | class KThread; |
| 56 | class KThreadLocalPage; | ||
| 55 | class KTransferMemory; | 57 | class KTransferMemory; |
| 56 | class KWorkerTaskManager; | 58 | class KWorkerTaskManager; |
| 57 | class KWritableEvent; | 59 | class 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; |