mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-08 02:14:41 -04:00
kern: reorder resource manager implementation
This commit is contained in:
parent
86e4bed056
commit
96d4546498
1 changed files with 23 additions and 21 deletions
|
@ -74,43 +74,45 @@ namespace ams::kern {
|
||||||
MESOSPHERE_ABORT_UNLESS(rc_size < size);
|
MESOSPHERE_ABORT_UNLESS(rc_size < size);
|
||||||
size -= rc_size;
|
size -= rc_size;
|
||||||
|
|
||||||
|
/* Determine dynamic page managers. */
|
||||||
|
KDynamicPageManager * const app_dynamic_page_manager = nullptr;
|
||||||
|
KDynamicPageManager * const sys_dynamic_page_manager = KTargetSystem::IsDynamicResourceLimitsEnabled() ? std::addressof(g_resource_manager_page_manager) : nullptr;
|
||||||
|
|
||||||
/* Initialize the resource managers' shared page manager. */
|
/* Initialize the resource managers' shared page manager. */
|
||||||
g_resource_manager_page_manager.Initialize(address, size, std::max<size_t>(PageSize, KPageBufferSlabHeap::BufferSize));
|
g_resource_manager_page_manager.Initialize(address, size, std::max<size_t>(PageSize, KPageBufferSlabHeap::BufferSize));
|
||||||
|
|
||||||
/* Initialize the KPageBuffer slab heap. */
|
/* Initialize the KPageBuffer slab heap. */
|
||||||
KPageBuffer::InitializeSlabHeap(g_resource_manager_page_manager);
|
KPageBuffer::InitializeSlabHeap(g_resource_manager_page_manager);
|
||||||
|
|
||||||
/* Initialize the fixed-size slabheaps. */
|
/* Initialize the block info heap. */
|
||||||
s_app_memory_block_heap.Initialize(std::addressof(g_resource_manager_page_manager), ApplicationMemoryBlockSlabHeapSize);
|
|
||||||
s_sys_memory_block_heap.Initialize(std::addressof(g_resource_manager_page_manager), SystemMemoryBlockSlabHeapSize);
|
|
||||||
s_block_info_heap.Initialize(std::addressof(g_resource_manager_page_manager), BlockInfoSlabHeapSize);
|
s_block_info_heap.Initialize(std::addressof(g_resource_manager_page_manager), BlockInfoSlabHeapSize);
|
||||||
|
|
||||||
|
/* Initialize the system slab managers. */
|
||||||
|
s_sys_block_info_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_block_info_heap));
|
||||||
|
s_sys_memory_block_heap.Initialize(std::addressof(g_resource_manager_page_manager), SystemMemoryBlockSlabHeapSize);
|
||||||
|
s_sys_memory_block_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_sys_memory_block_heap));
|
||||||
|
|
||||||
|
/* Initialize the application slab managers. */
|
||||||
|
s_app_block_info_manager.Initialize(app_dynamic_page_manager, std::addressof(s_block_info_heap));
|
||||||
|
s_app_memory_block_heap.Initialize(std::addressof(g_resource_manager_page_manager), ApplicationMemoryBlockSlabHeapSize);
|
||||||
|
s_app_memory_block_manager.Initialize(app_dynamic_page_manager, std::addressof(s_app_memory_block_heap));
|
||||||
|
|
||||||
/* Reserve all but a fixed number of remaining pages for the page table heap. */
|
/* Reserve all but a fixed number of remaining pages for the page table heap. */
|
||||||
const size_t num_pt_pages = g_resource_manager_page_manager.GetCount() - g_resource_manager_page_manager.GetUsed() - ReservedDynamicPageCount;
|
const size_t num_pt_pages = g_resource_manager_page_manager.GetCount() - g_resource_manager_page_manager.GetUsed() - ReservedDynamicPageCount;
|
||||||
s_page_table_heap.Initialize(std::addressof(g_resource_manager_page_manager), num_pt_pages, GetPointer<KPageTableManager::RefCount>(address + size));
|
s_page_table_heap.Initialize(std::addressof(g_resource_manager_page_manager), num_pt_pages, GetPointer<KPageTableManager::RefCount>(address + size));
|
||||||
|
|
||||||
/* Setup the slab managers. */
|
/* Create and initialize the system system resource. */
|
||||||
KDynamicPageManager * const app_dynamic_page_manager = nullptr;
|
|
||||||
KDynamicPageManager * const sys_dynamic_page_manager = KTargetSystem::IsDynamicResourceLimitsEnabled() ? std::addressof(g_resource_manager_page_manager) : nullptr;
|
|
||||||
s_app_memory_block_manager.Initialize(app_dynamic_page_manager, std::addressof(s_app_memory_block_heap));
|
|
||||||
s_sys_memory_block_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_sys_memory_block_heap));
|
|
||||||
|
|
||||||
s_app_block_info_manager.Initialize(app_dynamic_page_manager, std::addressof(s_block_info_heap));
|
|
||||||
s_sys_block_info_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_block_info_heap));
|
|
||||||
|
|
||||||
s_app_page_table_manager.Initialize(app_dynamic_page_manager, std::addressof(s_page_table_heap));
|
|
||||||
s_sys_page_table_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_page_table_heap));
|
s_sys_page_table_manager.Initialize(sys_dynamic_page_manager, std::addressof(s_page_table_heap));
|
||||||
|
KAutoObject::Create<KSystemResource>(std::addressof(s_sys_system_resource));
|
||||||
|
s_sys_system_resource.SetManagers(s_sys_memory_block_manager, s_sys_block_info_manager, s_sys_page_table_manager);
|
||||||
|
|
||||||
|
/* Create and initialize the application system resource. */
|
||||||
|
s_app_page_table_manager.Initialize(app_dynamic_page_manager, std::addressof(s_page_table_heap));
|
||||||
|
KAutoObject::Create<KSystemResource>(std::addressof(s_app_system_resource));
|
||||||
|
s_app_system_resource.SetManagers(s_app_memory_block_manager, s_app_block_info_manager, s_app_page_table_manager);
|
||||||
|
|
||||||
/* Check that we have the correct number of dynamic pages available. */
|
/* Check that we have the correct number of dynamic pages available. */
|
||||||
MESOSPHERE_ABORT_UNLESS(g_resource_manager_page_manager.GetCount() - g_resource_manager_page_manager.GetUsed() == ReservedDynamicPageCount);
|
MESOSPHERE_ABORT_UNLESS(g_resource_manager_page_manager.GetCount() - g_resource_manager_page_manager.GetUsed() == ReservedDynamicPageCount);
|
||||||
|
|
||||||
/* Create the system page table managers. */
|
|
||||||
KAutoObject::Create<KSystemResource>(std::addressof(s_app_system_resource));
|
|
||||||
KAutoObject::Create<KSystemResource>(std::addressof(s_sys_system_resource));
|
|
||||||
|
|
||||||
/* Set the managers for the system resources. */
|
|
||||||
s_app_system_resource.SetManagers(s_app_memory_block_manager, s_app_block_info_manager, s_app_page_table_manager);
|
|
||||||
s_sys_system_resource.SetManagers(s_sys_memory_block_manager, s_sys_block_info_manager, s_sys_page_table_manager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Kernel::PrintLayout() {
|
void Kernel::PrintLayout() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue