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.cpp | |
| 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.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 27 |
1 files changed, 1 insertions, 26 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 71bd466cf..b543f4083 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -76,7 +76,7 @@ struct KernelCore::Impl { | |||
| 76 | // Initialize kernel memory and resources. | 76 | // Initialize kernel memory and resources. |
| 77 | InitializeSystemResourceLimit(kernel, system.CoreTiming()); | 77 | InitializeSystemResourceLimit(kernel, system.CoreTiming()); |
| 78 | InitializeMemoryLayout(); | 78 | InitializeMemoryLayout(); |
| 79 | InitializePageSlab(); | 79 | Init::InitializeKPageBufferSlabHeap(system); |
| 80 | InitializeSchedulers(); | 80 | InitializeSchedulers(); |
| 81 | InitializeSuspendThreads(); | 81 | InitializeSuspendThreads(); |
| 82 | InitializePreemption(kernel); | 82 | InitializePreemption(kernel); |
| @@ -660,22 +660,6 @@ struct KernelCore::Impl { | |||
| 660 | time_phys_addr, time_size, "Time:SharedMemory"); | 660 | time_phys_addr, time_size, "Time:SharedMemory"); |
| 661 | } | 661 | } |
| 662 | 662 | ||
| 663 | void InitializePageSlab() { | ||
| 664 | // Allocate slab heaps | ||
| 665 | user_slab_heap_pages = | ||
| 666 | std::make_unique<KSlabHeap<Page>>(KSlabHeap<Page>::AllocationType::Guest); | ||
| 667 | |||
| 668 | // TODO(ameerj): This should be derived, not hardcoded within the kernel | ||
| 669 | constexpr u64 user_slab_heap_size{0x3de000}; | ||
| 670 | // Reserve slab heaps | ||
| 671 | ASSERT( | ||
| 672 | system_resource_limit->Reserve(LimitableResource::PhysicalMemory, user_slab_heap_size)); | ||
| 673 | // Initialize slab heap | ||
| 674 | user_slab_heap_pages->Initialize( | ||
| 675 | system.DeviceMemory().GetPointer(Core::DramMemoryMap::SlabHeapBase), | ||
| 676 | user_slab_heap_size); | ||
| 677 | } | ||
| 678 | |||
| 679 | KClientPort* CreateNamedServicePort(std::string name) { | 663 | KClientPort* CreateNamedServicePort(std::string name) { |
| 680 | auto search = service_interface_factory.find(name); | 664 | auto search = service_interface_factory.find(name); |
| 681 | if (search == service_interface_factory.end()) { | 665 | if (search == service_interface_factory.end()) { |
| @@ -756,7 +740,6 @@ struct KernelCore::Impl { | |||
| 756 | 740 | ||
| 757 | // Kernel memory management | 741 | // Kernel memory management |
| 758 | std::unique_ptr<KMemoryManager> memory_manager; | 742 | std::unique_ptr<KMemoryManager> memory_manager; |
| 759 | std::unique_ptr<KSlabHeap<Page>> user_slab_heap_pages; | ||
| 760 | 743 | ||
| 761 | // Shared memory for services | 744 | // Shared memory for services |
| 762 | Kernel::KSharedMemory* hid_shared_mem{}; | 745 | Kernel::KSharedMemory* hid_shared_mem{}; |
| @@ -1031,14 +1014,6 @@ const KMemoryManager& KernelCore::MemoryManager() const { | |||
| 1031 | return *impl->memory_manager; | 1014 | return *impl->memory_manager; |
| 1032 | } | 1015 | } |
| 1033 | 1016 | ||
| 1034 | KSlabHeap<Page>& KernelCore::GetUserSlabHeapPages() { | ||
| 1035 | return *impl->user_slab_heap_pages; | ||
| 1036 | } | ||
| 1037 | |||
| 1038 | const KSlabHeap<Page>& KernelCore::GetUserSlabHeapPages() const { | ||
| 1039 | return *impl->user_slab_heap_pages; | ||
| 1040 | } | ||
| 1041 | |||
| 1042 | Kernel::KSharedMemory& KernelCore::GetHidSharedMem() { | 1017 | Kernel::KSharedMemory& KernelCore::GetHidSharedMem() { |
| 1043 | return *impl->hid_shared_mem; | 1018 | return *impl->hid_shared_mem; |
| 1044 | } | 1019 | } |