hle: kernel: Migrate PageLinkedList to KPageLinkedList.
This commit is contained in:
parent
65e0178cc0
commit
93109c870e
|
@ -171,6 +171,7 @@ add_library(core STATIC
|
||||||
hle/kernel/k_memory_block_manager.h
|
hle/kernel/k_memory_block_manager.h
|
||||||
hle/kernel/k_memory_layout.h
|
hle/kernel/k_memory_layout.h
|
||||||
hle/kernel/k_page_bitmap.h
|
hle/kernel/k_page_bitmap.h
|
||||||
|
hle/kernel/k_page_linked_list.h
|
||||||
hle/kernel/k_priority_queue.h
|
hle/kernel/k_priority_queue.h
|
||||||
hle/kernel/k_readable_event.cpp
|
hle/kernel/k_readable_event.cpp
|
||||||
hle/kernel/k_readable_event.h
|
hle/kernel/k_readable_event.h
|
||||||
|
@ -201,7 +202,6 @@ add_library(core STATIC
|
||||||
hle/kernel/memory_types.h
|
hle/kernel/memory_types.h
|
||||||
hle/kernel/memory/memory_manager.cpp
|
hle/kernel/memory/memory_manager.cpp
|
||||||
hle/kernel/memory/memory_manager.h
|
hle/kernel/memory/memory_manager.h
|
||||||
hle/kernel/memory/page_linked_list.h
|
|
||||||
hle/kernel/memory/page_heap.cpp
|
hle/kernel/memory/page_heap.cpp
|
||||||
hle/kernel/memory/page_heap.h
|
hle/kernel/memory/page_heap.h
|
||||||
hle/kernel/memory/page_table.cpp
|
hle/kernel/memory/page_table.cpp
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
#include "core/hle/kernel/memory_types.h"
|
#include "core/hle/kernel/memory_types.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
|
|
||||||
namespace Kernel::Memory {
|
namespace Kernel {
|
||||||
|
|
||||||
class PageLinkedList final {
|
class KPageLinkedList final {
|
||||||
public:
|
public:
|
||||||
class Node final {
|
class Node final {
|
||||||
public:
|
public:
|
||||||
|
@ -33,8 +33,8 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PageLinkedList() = default;
|
KPageLinkedList() = default;
|
||||||
PageLinkedList(u64 address, u64 num_pages) {
|
KPageLinkedList(u64 address, u64 num_pages) {
|
||||||
ASSERT(AddBlock(address, num_pages).IsSuccess());
|
ASSERT(AddBlock(address, num_pages).IsSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ public:
|
||||||
return num_pages;
|
return num_pages;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsEqual(PageLinkedList& other) const {
|
bool IsEqual(KPageLinkedList& other) const {
|
||||||
auto this_node = nodes.begin();
|
auto this_node = nodes.begin();
|
||||||
auto other_node = other.nodes.begin();
|
auto other_node = other.nodes.begin();
|
||||||
while (this_node != nodes.end() && other_node != other.nodes.end()) {
|
while (this_node != nodes.end() && other_node != other.nodes.end()) {
|
||||||
|
@ -89,4 +89,4 @@ private:
|
||||||
std::list<Node> nodes;
|
std::list<Node> nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Kernel::Memory
|
} // namespace Kernel
|
|
@ -20,7 +20,7 @@ KSharedMemory::~KSharedMemory() {
|
||||||
|
|
||||||
std::shared_ptr<KSharedMemory> KSharedMemory::Create(
|
std::shared_ptr<KSharedMemory> KSharedMemory::Create(
|
||||||
KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process,
|
KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process,
|
||||||
Memory::PageLinkedList&& page_list, KMemoryPermission owner_permission,
|
KPageLinkedList&& page_list, KMemoryPermission owner_permission,
|
||||||
KMemoryPermission user_permission, PAddr physical_address, std::size_t size,
|
KMemoryPermission user_permission, PAddr physical_address, std::size_t size,
|
||||||
std::string name) {
|
std::string name) {
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/device_memory.h"
|
#include "core/device_memory.h"
|
||||||
#include "core/hle/kernel/k_memory_block.h"
|
#include "core/hle/kernel/k_memory_block.h"
|
||||||
#include "core/hle/kernel/memory/page_linked_list.h"
|
#include "core/hle/kernel/k_page_linked_list.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/process.h"
|
#include "core/hle/kernel/process.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
|
@ -26,7 +26,7 @@ public:
|
||||||
|
|
||||||
static std::shared_ptr<KSharedMemory> Create(
|
static std::shared_ptr<KSharedMemory> Create(
|
||||||
KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process,
|
KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process,
|
||||||
Memory::PageLinkedList&& page_list, KMemoryPermission owner_permission,
|
KPageLinkedList&& page_list, KMemoryPermission owner_permission,
|
||||||
KMemoryPermission user_permission, PAddr physical_address, std::size_t size,
|
KMemoryPermission user_permission, PAddr physical_address, std::size_t size,
|
||||||
std::string name);
|
std::string name);
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ public:
|
||||||
private:
|
private:
|
||||||
Core::DeviceMemory& device_memory;
|
Core::DeviceMemory& device_memory;
|
||||||
Process* owner_process{};
|
Process* owner_process{};
|
||||||
Memory::PageLinkedList page_list;
|
KPageLinkedList page_list;
|
||||||
KMemoryPermission owner_permission{};
|
KMemoryPermission owner_permission{};
|
||||||
KMemoryPermission user_permission{};
|
KMemoryPermission user_permission{};
|
||||||
PAddr physical_address{};
|
PAddr physical_address{};
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/scope_exit.h"
|
#include "common/scope_exit.h"
|
||||||
|
#include "core/hle/kernel/k_page_linked_list.h"
|
||||||
#include "core/hle/kernel/memory/memory_manager.h"
|
#include "core/hle/kernel/memory/memory_manager.h"
|
||||||
#include "core/hle/kernel/memory/page_linked_list.h"
|
|
||||||
#include "core/hle/kernel/svc_results.h"
|
#include "core/hle/kernel/svc_results.h"
|
||||||
|
|
||||||
namespace Kernel::Memory {
|
namespace Kernel::Memory {
|
||||||
|
@ -80,7 +80,7 @@ VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_
|
||||||
return allocated_block;
|
return allocated_block;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode MemoryManager::Allocate(PageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
||||||
Direction dir) {
|
Direction dir) {
|
||||||
ASSERT(page_list.GetNumPages() == 0);
|
ASSERT(page_list.GetNumPages() == 0);
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ ResultCode MemoryManager::Allocate(PageLinkedList& page_list, std::size_t num_pa
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode MemoryManager::Free(PageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
ResultCode MemoryManager::Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
||||||
Direction dir) {
|
Direction dir) {
|
||||||
// Early return if we're freeing no pages
|
// Early return if we're freeing no pages
|
||||||
if (!num_pages) {
|
if (!num_pages) {
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
#include "core/hle/kernel/memory/page_heap.h"
|
#include "core/hle/kernel/memory/page_heap.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
|
|
||||||
namespace Kernel::Memory {
|
namespace Kernel {
|
||||||
|
class KPageLinkedList;
|
||||||
|
}
|
||||||
|
|
||||||
class PageLinkedList;
|
namespace Kernel::Memory {
|
||||||
|
|
||||||
class MemoryManager final : NonCopyable {
|
class MemoryManager final : NonCopyable {
|
||||||
public:
|
public:
|
||||||
|
@ -48,9 +50,9 @@ public:
|
||||||
void InitializeManager(Pool pool, u64 start_address, u64 end_address);
|
void InitializeManager(Pool pool, u64 start_address, u64 end_address);
|
||||||
|
|
||||||
VAddr AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option);
|
VAddr AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option);
|
||||||
ResultCode Allocate(PageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
ResultCode Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
||||||
Direction dir = Direction::FromFront);
|
Direction dir = Direction::FromFront);
|
||||||
ResultCode Free(PageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
ResultCode Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
|
||||||
Direction dir = Direction::FromFront);
|
Direction dir = Direction::FromFront);
|
||||||
|
|
||||||
static constexpr std::size_t MaxManagerCount = 10;
|
static constexpr std::size_t MaxManagerCount = 10;
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
#include "core/hle/kernel/k_address_space_info.h"
|
#include "core/hle/kernel/k_address_space_info.h"
|
||||||
#include "core/hle/kernel/k_memory_block.h"
|
#include "core/hle/kernel/k_memory_block.h"
|
||||||
#include "core/hle/kernel/k_memory_block_manager.h"
|
#include "core/hle/kernel/k_memory_block_manager.h"
|
||||||
|
#include "core/hle/kernel/k_page_linked_list.h"
|
||||||
#include "core/hle/kernel/k_resource_limit.h"
|
#include "core/hle/kernel/k_resource_limit.h"
|
||||||
#include "core/hle/kernel/k_scoped_resource_reservation.h"
|
#include "core/hle/kernel/k_scoped_resource_reservation.h"
|
||||||
#include "core/hle/kernel/k_system_control.h"
|
#include "core/hle/kernel/k_system_control.h"
|
||||||
#include "core/hle/kernel/kernel.h"
|
#include "core/hle/kernel/kernel.h"
|
||||||
#include "core/hle/kernel/memory/page_linked_list.h"
|
|
||||||
#include "core/hle/kernel/memory/page_table.h"
|
#include "core/hle/kernel/memory/page_table.h"
|
||||||
#include "core/hle/kernel/process.h"
|
#include "core/hle/kernel/process.h"
|
||||||
#include "core/hle/kernel/svc_results.h"
|
#include "core/hle/kernel/svc_results.h"
|
||||||
|
@ -285,7 +285,7 @@ ResultCode PageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemoryS
|
||||||
return ResultInvalidCurrentMemory;
|
return ResultInvalidCurrentMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
CASCADE_CODE(
|
CASCADE_CODE(
|
||||||
system.Kernel().MemoryManager().Allocate(page_linked_list, num_pages, memory_pool));
|
system.Kernel().MemoryManager().Allocate(page_linked_list, num_pages, memory_pool));
|
||||||
CASCADE_CODE(Operate(addr, num_pages, page_linked_list, OperationType::MapGroup));
|
CASCADE_CODE(Operate(addr, num_pages, page_linked_list, OperationType::MapGroup));
|
||||||
|
@ -311,7 +311,7 @@ ResultCode PageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::
|
||||||
return ResultInvalidCurrentMemory;
|
return ResultInvalidCurrentMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
AddRegionToPages(src_addr, num_pages, page_linked_list);
|
AddRegionToPages(src_addr, num_pages, page_linked_list);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -363,7 +363,7 @@ ResultCode PageTable::UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PageTable::MapPhysicalMemory(PageLinkedList& page_linked_list, VAddr start, VAddr end) {
|
void PageTable::MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start, VAddr end) {
|
||||||
auto node{page_linked_list.Nodes().begin()};
|
auto node{page_linked_list.Nodes().begin()};
|
||||||
PAddr map_addr{node->GetAddress()};
|
PAddr map_addr{node->GetAddress()};
|
||||||
std::size_t src_num_pages{node->GetNumPages()};
|
std::size_t src_num_pages{node->GetNumPages()};
|
||||||
|
@ -423,7 +423,7 @@ ResultCode PageTable::MapPhysicalMemory(VAddr addr, std::size_t size) {
|
||||||
return ResultResourceLimitedExceeded;
|
return ResultResourceLimitedExceeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
|
|
||||||
CASCADE_CODE(
|
CASCADE_CODE(
|
||||||
system.Kernel().MemoryManager().Allocate(page_linked_list, remaining_pages, memory_pool));
|
system.Kernel().MemoryManager().Allocate(page_linked_list, remaining_pages, memory_pool));
|
||||||
|
@ -485,7 +485,7 @@ ResultCode PageTable::UnmapMemory(VAddr addr, std::size_t size) {
|
||||||
|
|
||||||
const VAddr end_addr{addr + size};
|
const VAddr end_addr{addr + size};
|
||||||
ResultCode result{RESULT_SUCCESS};
|
ResultCode result{RESULT_SUCCESS};
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
|
|
||||||
// Unmap each region within the range
|
// Unmap each region within the range
|
||||||
block_manager->IterateForRange(addr, end_addr, [&](const KMemoryInfo& info) {
|
block_manager->IterateForRange(addr, end_addr, [&](const KMemoryInfo& info) {
|
||||||
|
@ -529,7 +529,7 @@ ResultCode PageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) {
|
||||||
return ResultInvalidCurrentMemory;
|
return ResultInvalidCurrentMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
const std::size_t num_pages{size / PageSize};
|
const std::size_t num_pages{size / PageSize};
|
||||||
|
|
||||||
AddRegionToPages(src_addr, num_pages, page_linked_list);
|
AddRegionToPages(src_addr, num_pages, page_linked_list);
|
||||||
|
@ -570,8 +570,8 @@ ResultCode PageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) {
|
||||||
KMemoryPermission::None, KMemoryAttribute::Mask,
|
KMemoryPermission::None, KMemoryAttribute::Mask,
|
||||||
KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped));
|
KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped));
|
||||||
|
|
||||||
PageLinkedList src_pages;
|
KPageLinkedList src_pages;
|
||||||
PageLinkedList dst_pages;
|
KPageLinkedList dst_pages;
|
||||||
const std::size_t num_pages{size / PageSize};
|
const std::size_t num_pages{size / PageSize};
|
||||||
|
|
||||||
AddRegionToPages(src_addr, num_pages, src_pages);
|
AddRegionToPages(src_addr, num_pages, src_pages);
|
||||||
|
@ -597,7 +597,7 @@ ResultCode PageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) {
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode PageTable::MapPages(VAddr addr, const PageLinkedList& page_linked_list,
|
ResultCode PageTable::MapPages(VAddr addr, const KPageLinkedList& page_linked_list,
|
||||||
KMemoryPermission perm) {
|
KMemoryPermission perm) {
|
||||||
VAddr cur_addr{addr};
|
VAddr cur_addr{addr};
|
||||||
|
|
||||||
|
@ -619,7 +619,7 @@ ResultCode PageTable::MapPages(VAddr addr, const PageLinkedList& page_linked_lis
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode PageTable::MapPages(VAddr addr, PageLinkedList& page_linked_list, KMemoryState state,
|
ResultCode PageTable::MapPages(VAddr addr, KPageLinkedList& page_linked_list, KMemoryState state,
|
||||||
KMemoryPermission perm) {
|
KMemoryPermission perm) {
|
||||||
std::lock_guard lock{page_table_lock};
|
std::lock_guard lock{page_table_lock};
|
||||||
|
|
||||||
|
@ -793,7 +793,7 @@ ResultVal<VAddr> PageTable::SetHeapSize(std::size_t size) {
|
||||||
return ResultResourceLimitedExceeded;
|
return ResultResourceLimitedExceeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageLinkedList page_linked_list;
|
KPageLinkedList page_linked_list;
|
||||||
const std::size_t num_pages{delta / PageSize};
|
const std::size_t num_pages{delta / PageSize};
|
||||||
|
|
||||||
CASCADE_CODE(
|
CASCADE_CODE(
|
||||||
|
@ -841,7 +841,7 @@ ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, s
|
||||||
if (is_map_only) {
|
if (is_map_only) {
|
||||||
CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr));
|
CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr));
|
||||||
} else {
|
} else {
|
||||||
PageLinkedList page_group;
|
KPageLinkedList page_group;
|
||||||
CASCADE_CODE(
|
CASCADE_CODE(
|
||||||
system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool));
|
system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool));
|
||||||
CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup));
|
CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup));
|
||||||
|
@ -924,7 +924,7 @@ bool PageTable::IsRegionContiguous(VAddr addr, u64 size) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages,
|
void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages,
|
||||||
PageLinkedList& page_linked_list) {
|
KPageLinkedList& page_linked_list) {
|
||||||
VAddr addr{start};
|
VAddr addr{start};
|
||||||
while (addr < start + (num_pages * PageSize)) {
|
while (addr < start + (num_pages * PageSize)) {
|
||||||
const PAddr paddr{GetPhysicalAddr(addr)};
|
const PAddr paddr{GetPhysicalAddr(addr)};
|
||||||
|
@ -945,7 +945,7 @@ VAddr PageTable::AllocateVirtualMemory(VAddr start, std::size_t region_num_pages
|
||||||
IsKernel() ? 1 : 4);
|
IsKernel() ? 1 : 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, const PageLinkedList& page_group,
|
ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, const KPageLinkedList& page_group,
|
||||||
OperationType operation) {
|
OperationType operation) {
|
||||||
std::lock_guard lock{page_table_lock};
|
std::lock_guard lock{page_table_lock};
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ public:
|
||||||
ResultCode UnmapMemory(VAddr addr, std::size_t size);
|
ResultCode UnmapMemory(VAddr addr, std::size_t size);
|
||||||
ResultCode Map(VAddr dst_addr, VAddr src_addr, std::size_t size);
|
ResultCode Map(VAddr dst_addr, VAddr src_addr, std::size_t size);
|
||||||
ResultCode Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size);
|
ResultCode Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size);
|
||||||
ResultCode MapPages(VAddr addr, PageLinkedList& page_linked_list, KMemoryState state,
|
ResultCode MapPages(VAddr addr, KPageLinkedList& page_linked_list, KMemoryState state,
|
||||||
KMemoryPermission perm);
|
KMemoryPermission perm);
|
||||||
ResultCode SetCodeMemoryPermission(VAddr addr, std::size_t size, KMemoryPermission perm);
|
ResultCode SetCodeMemoryPermission(VAddr addr, std::size_t size, KMemoryPermission perm);
|
||||||
KMemoryInfo QueryInfo(VAddr addr);
|
KMemoryInfo QueryInfo(VAddr addr);
|
||||||
|
@ -79,15 +79,16 @@ private:
|
||||||
KMemoryAttribute::DeviceShared;
|
KMemoryAttribute::DeviceShared;
|
||||||
|
|
||||||
ResultCode InitializeMemoryLayout(VAddr start, VAddr end);
|
ResultCode InitializeMemoryLayout(VAddr start, VAddr end);
|
||||||
ResultCode MapPages(VAddr addr, const PageLinkedList& page_linked_list, KMemoryPermission perm);
|
ResultCode MapPages(VAddr addr, const KPageLinkedList& page_linked_list,
|
||||||
void MapPhysicalMemory(PageLinkedList& page_linked_list, VAddr start, VAddr end);
|
KMemoryPermission perm);
|
||||||
|
void MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start, VAddr end);
|
||||||
bool IsRegionMapped(VAddr address, u64 size);
|
bool IsRegionMapped(VAddr address, u64 size);
|
||||||
bool IsRegionContiguous(VAddr addr, u64 size) const;
|
bool IsRegionContiguous(VAddr addr, u64 size) const;
|
||||||
void AddRegionToPages(VAddr start, std::size_t num_pages, PageLinkedList& page_linked_list);
|
void AddRegionToPages(VAddr start, std::size_t num_pages, KPageLinkedList& page_linked_list);
|
||||||
KMemoryInfo QueryInfoImpl(VAddr addr);
|
KMemoryInfo QueryInfoImpl(VAddr addr);
|
||||||
VAddr AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, u64 needed_num_pages,
|
VAddr AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, u64 needed_num_pages,
|
||||||
std::size_t align);
|
std::size_t align);
|
||||||
ResultCode Operate(VAddr addr, std::size_t num_pages, const PageLinkedList& page_group,
|
ResultCode Operate(VAddr addr, std::size_t num_pages, const KPageLinkedList& page_group,
|
||||||
OperationType operation);
|
OperationType operation);
|
||||||
ResultCode Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm,
|
ResultCode Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm,
|
||||||
OperationType operation, PAddr map_addr = 0);
|
OperationType operation, PAddr map_addr = 0);
|
||||||
|
|
Reference in New Issue