hle: kernel: Migrate SlabHeap to KSlabHeap.

This commit is contained in:
bunnei 2021-02-12 16:21:12 -08:00
parent 1d162f28d1
commit 9e520e8f12
4 changed files with 21 additions and 22 deletions

View File

@ -181,6 +181,7 @@ add_library(core STATIC
hle/kernel/k_scoped_scheduler_lock_and_sleep.h hle/kernel/k_scoped_scheduler_lock_and_sleep.h
hle/kernel/k_shared_memory.cpp hle/kernel/k_shared_memory.cpp
hle/kernel/k_shared_memory.h hle/kernel/k_shared_memory.h
hle/kernel/k_slab_heap.h
hle/kernel/k_spin_lock.cpp hle/kernel/k_spin_lock.cpp
hle/kernel/k_spin_lock.h hle/kernel/k_spin_lock.h
hle/kernel/k_synchronization_object.cpp hle/kernel/k_synchronization_object.cpp
@ -205,7 +206,6 @@ add_library(core STATIC
hle/kernel/memory/page_heap.h hle/kernel/memory/page_heap.h
hle/kernel/memory/page_table.cpp hle/kernel/memory/page_table.cpp
hle/kernel/memory/page_table.h hle/kernel/memory/page_table.h
hle/kernel/memory/slab_heap.h
hle/kernel/object.cpp hle/kernel/object.cpp
hle/kernel/object.h hle/kernel/object.h
hle/kernel/physical_core.cpp hle/kernel/physical_core.cpp

View File

@ -2,9 +2,6 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
// This file references various implementation details from Atmosphere, an open-source firmware for
// the Nintendo Switch. Copyright 2018-2020 Atmosphere-NX.
#pragma once #pragma once
#include <atomic> #include <atomic>
@ -12,17 +9,17 @@
#include "common/assert.h" #include "common/assert.h"
#include "common/common_types.h" #include "common/common_types.h"
namespace Kernel::Memory { namespace Kernel {
namespace impl { namespace impl {
class SlabHeapImpl final : NonCopyable { class KSlabHeapImpl final : NonCopyable {
public: public:
struct Node { struct Node {
Node* next{}; Node* next{};
}; };
constexpr SlabHeapImpl() = default; constexpr KSlabHeapImpl() = default;
void Initialize(std::size_t size) { void Initialize(std::size_t size) {
ASSERT(head == nullptr); ASSERT(head == nullptr);
@ -65,9 +62,9 @@ private:
} // namespace impl } // namespace impl
class SlabHeapBase : NonCopyable { class KSlabHeapBase : NonCopyable {
public: public:
constexpr SlabHeapBase() = default; constexpr KSlabHeapBase() = default;
constexpr bool Contains(uintptr_t addr) const { constexpr bool Contains(uintptr_t addr) const {
return start <= addr && addr < end; return start <= addr && addr < end;
@ -126,7 +123,7 @@ public:
} }
private: private:
using Impl = impl::SlabHeapImpl; using Impl = impl::KSlabHeapImpl;
Impl impl; Impl impl;
uintptr_t peak{}; uintptr_t peak{};
@ -135,9 +132,9 @@ private:
}; };
template <typename T> template <typename T>
class SlabHeap final : public SlabHeapBase { class KSlabHeap final : public KSlabHeapBase {
public: public:
constexpr SlabHeap() : SlabHeapBase() {} constexpr KSlabHeap() : KSlabHeapBase() {}
void Initialize(void* memory, std::size_t memory_size) { void Initialize(void* memory, std::size_t memory_size) {
InitializeImpl(sizeof(T), memory, memory_size); InitializeImpl(sizeof(T), memory, memory_size);
@ -160,4 +157,4 @@ public:
} }
}; };
} // namespace Kernel::Memory } // namespace Kernel

View File

@ -31,10 +31,10 @@
#include "core/hle/kernel/k_resource_limit.h" #include "core/hle/kernel/k_resource_limit.h"
#include "core/hle/kernel/k_scheduler.h" #include "core/hle/kernel/k_scheduler.h"
#include "core/hle/kernel/k_shared_memory.h" #include "core/hle/kernel/k_shared_memory.h"
#include "core/hle/kernel/k_slab_heap.h"
#include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/k_thread.h"
#include "core/hle/kernel/kernel.h" #include "core/hle/kernel/kernel.h"
#include "core/hle/kernel/memory/memory_manager.h" #include "core/hle/kernel/memory/memory_manager.h"
#include "core/hle/kernel/memory/slab_heap.h"
#include "core/hle/kernel/physical_core.h" #include "core/hle/kernel/physical_core.h"
#include "core/hle/kernel/process.h" #include "core/hle/kernel/process.h"
#include "core/hle/kernel/service_thread.h" #include "core/hle/kernel/service_thread.h"
@ -306,7 +306,7 @@ struct KernelCore::Impl {
Memory::MemoryPermission::Read, time_addr, time_size, "Time:SharedMemory"); Memory::MemoryPermission::Read, time_addr, time_size, "Time:SharedMemory");
// Allocate slab heaps // Allocate slab heaps
user_slab_heap_pages = std::make_unique<Memory::SlabHeap<Memory::Page>>(); user_slab_heap_pages = std::make_unique<KSlabHeap<Memory::Page>>();
constexpr u64 user_slab_heap_size{0x1ef000}; constexpr u64 user_slab_heap_size{0x1ef000};
// Reserve slab heaps // Reserve slab heaps
@ -349,7 +349,7 @@ struct KernelCore::Impl {
// Kernel memory management // Kernel memory management
std::unique_ptr<Memory::MemoryManager> memory_manager; std::unique_ptr<Memory::MemoryManager> memory_manager;
std::unique_ptr<Memory::SlabHeap<Memory::Page>> user_slab_heap_pages; std::unique_ptr<KSlabHeap<Memory::Page>> user_slab_heap_pages;
// Shared memory for services // Shared memory for services
std::shared_ptr<Kernel::KSharedMemory> hid_shared_mem; std::shared_ptr<Kernel::KSharedMemory> hid_shared_mem;
@ -581,11 +581,11 @@ const Memory::MemoryManager& KernelCore::MemoryManager() const {
return *impl->memory_manager; return *impl->memory_manager;
} }
Memory::SlabHeap<Memory::Page>& KernelCore::GetUserSlabHeapPages() { KSlabHeap<Memory::Page>& KernelCore::GetUserSlabHeapPages() {
return *impl->user_slab_heap_pages; return *impl->user_slab_heap_pages;
} }
const Memory::SlabHeap<Memory::Page>& KernelCore::GetUserSlabHeapPages() const { const KSlabHeap<Memory::Page>& KernelCore::GetUserSlabHeapPages() const {
return *impl->user_slab_heap_pages; return *impl->user_slab_heap_pages;
} }

View File

@ -29,8 +29,7 @@ namespace Kernel {
namespace Memory { namespace Memory {
class MemoryManager; class MemoryManager;
template <typename T>
class SlabHeap;
} // namespace Memory } // namespace Memory
class ClientPort; class ClientPort;
@ -46,6 +45,9 @@ class Synchronization;
class KThread; class KThread;
class TimeManager; class TimeManager;
template <typename T>
class KSlabHeap;
using EmuThreadHandle = uintptr_t; using EmuThreadHandle = uintptr_t;
constexpr EmuThreadHandle EmuThreadHandleInvalid{}; constexpr EmuThreadHandle EmuThreadHandleInvalid{};
constexpr EmuThreadHandle EmuThreadHandleReserved{1ULL << 63}; constexpr EmuThreadHandle EmuThreadHandleReserved{1ULL << 63};
@ -184,10 +186,10 @@ public:
const Memory::MemoryManager& MemoryManager() const; const Memory::MemoryManager& MemoryManager() const;
/// Gets the slab heap allocated for user space pages. /// Gets the slab heap allocated for user space pages.
Memory::SlabHeap<Memory::Page>& GetUserSlabHeapPages(); KSlabHeap<Memory::Page>& GetUserSlabHeapPages();
/// Gets the slab heap allocated for user space pages. /// Gets the slab heap allocated for user space pages.
const Memory::SlabHeap<Memory::Page>& GetUserSlabHeapPages() const; const KSlabHeap<Memory::Page>& GetUserSlabHeapPages() const;
/// Gets the shared memory object for HID services. /// Gets the shared memory object for HID services.
Kernel::KSharedMemory& GetHidSharedMem(); Kernel::KSharedMemory& GetHidSharedMem();