mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-26 19:32:40 -06:00
core: hle: kernel: k_memory_layout: Refresh.
This commit is contained in:
parent
84d130f143
commit
1f21fa866d
3 changed files with 23 additions and 12 deletions
|
@ -153,13 +153,9 @@ void KMemoryLayout::InitializeLinearMemoryRegionTrees(PAddr aligned_linear_phys_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t KMemoryLayout::GetResourceRegionSizeForInit() {
|
size_t KMemoryLayout::GetResourceRegionSizeForInit(bool use_extra_resource) {
|
||||||
// Calculate resource region size based on whether we allow extra threads.
|
return KernelResourceSize + KSystemControl::SecureAppletMemorySize +
|
||||||
const bool use_extra_resources = KSystemControl::Init::ShouldIncreaseThreadResourceLimit();
|
(use_extra_resource ? KernelSlabHeapAdditionalSize + KernelPageBufferAdditionalSize : 0);
|
||||||
size_t resource_region_size =
|
|
||||||
KernelResourceSize + (use_extra_resources ? KernelSlabHeapAdditionalSize : 0);
|
|
||||||
|
|
||||||
return resource_region_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -60,10 +60,12 @@ constexpr std::size_t KernelSlabHeapGapsSizeMax = 2_MiB - 64_KiB;
|
||||||
constexpr std::size_t KernelSlabHeapSize = KernelSlabHeapDataSize + KernelSlabHeapGapsSizeMax;
|
constexpr std::size_t KernelSlabHeapSize = KernelSlabHeapDataSize + KernelSlabHeapGapsSizeMax;
|
||||||
|
|
||||||
// NOTE: This is calculated from KThread slab counts, assuming KThread size <= 0x860.
|
// NOTE: This is calculated from KThread slab counts, assuming KThread size <= 0x860.
|
||||||
constexpr std::size_t KernelSlabHeapAdditionalSize = 0x68000;
|
constexpr size_t KernelPageBufferHeapSize = 0x3E0000;
|
||||||
|
constexpr size_t KernelSlabHeapAdditionalSize = 0x148000;
|
||||||
|
constexpr size_t KernelPageBufferAdditionalSize = 0x33C000;
|
||||||
|
|
||||||
constexpr std::size_t KernelResourceSize =
|
constexpr std::size_t KernelResourceSize = KernelPageTableHeapSize + KernelInitialPageHeapSize +
|
||||||
KernelPageTableHeapSize + KernelInitialPageHeapSize + KernelSlabHeapSize;
|
KernelSlabHeapSize + KernelPageBufferHeapSize;
|
||||||
|
|
||||||
constexpr bool IsKernelAddressKey(VAddr key) {
|
constexpr bool IsKernelAddressKey(VAddr key) {
|
||||||
return KernelVirtualAddressSpaceBase <= key && key <= KernelVirtualAddressSpaceLast;
|
return KernelVirtualAddressSpaceBase <= key && key <= KernelVirtualAddressSpaceLast;
|
||||||
|
@ -168,6 +170,11 @@ public:
|
||||||
KMemoryRegionType_VirtualDramKernelTraceBuffer));
|
KMemoryRegionType_VirtualDramKernelTraceBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const KMemoryRegion& GetSecureAppletMemoryRegion() {
|
||||||
|
return Dereference(GetVirtualMemoryRegionTree().FindByType(
|
||||||
|
KMemoryRegionType_VirtualDramKernelSecureAppletMemory));
|
||||||
|
}
|
||||||
|
|
||||||
const KMemoryRegion& GetVirtualLinearRegion(VAddr address) const {
|
const KMemoryRegion& GetVirtualLinearRegion(VAddr address) const {
|
||||||
return Dereference(FindVirtualLinear(address));
|
return Dereference(FindVirtualLinear(address));
|
||||||
}
|
}
|
||||||
|
@ -229,7 +236,7 @@ public:
|
||||||
|
|
||||||
void InitializeLinearMemoryRegionTrees(PAddr aligned_linear_phys_start,
|
void InitializeLinearMemoryRegionTrees(PAddr aligned_linear_phys_start,
|
||||||
VAddr linear_virtual_start);
|
VAddr linear_virtual_start);
|
||||||
static size_t GetResourceRegionSizeForInit();
|
static size_t GetResourceRegionSizeForInit(bool use_extra_resource);
|
||||||
|
|
||||||
auto GetKernelRegionExtents() const {
|
auto GetKernelRegionExtents() const {
|
||||||
return GetVirtualMemoryRegionTree().GetDerivedRegionExtents(KMemoryRegionType_Kernel);
|
return GetVirtualMemoryRegionTree().GetDerivedRegionExtents(KMemoryRegionType_Kernel);
|
||||||
|
@ -279,6 +286,10 @@ public:
|
||||||
return GetPhysicalMemoryRegionTree().GetDerivedRegionExtents(
|
return GetPhysicalMemoryRegionTree().GetDerivedRegionExtents(
|
||||||
KMemoryRegionType_DramKernelSlab);
|
KMemoryRegionType_DramKernelSlab);
|
||||||
}
|
}
|
||||||
|
auto GetKernelSecureAppletMemoryRegionPhysicalExtents() {
|
||||||
|
return GetPhysicalMemoryRegionTree().GetDerivedRegionExtents(
|
||||||
|
KMemoryRegionType_DramKernelSecureAppletMemory);
|
||||||
|
}
|
||||||
auto GetKernelPageTableHeapRegionPhysicalExtents() const {
|
auto GetKernelPageTableHeapRegionPhysicalExtents() const {
|
||||||
return GetPhysicalMemoryRegionTree().GetDerivedRegionExtents(
|
return GetPhysicalMemoryRegionTree().GetDerivedRegionExtents(
|
||||||
KMemoryRegionType_DramKernelPtHeap);
|
KMemoryRegionType_DramKernelPtHeap);
|
||||||
|
|
|
@ -454,6 +454,9 @@ struct KernelCore::Impl {
|
||||||
ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert(
|
ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert(
|
||||||
misc_region_start, misc_region_size, KMemoryRegionType_KernelMisc));
|
misc_region_start, misc_region_size, KMemoryRegionType_KernelMisc));
|
||||||
|
|
||||||
|
// Determine if we'll use extra thread resources.
|
||||||
|
const bool use_extra_resources = KSystemControl::Init::ShouldIncreaseThreadResourceLimit();
|
||||||
|
|
||||||
// Setup the stack region.
|
// Setup the stack region.
|
||||||
constexpr size_t StackRegionSize = 14_MiB;
|
constexpr size_t StackRegionSize = 14_MiB;
|
||||||
constexpr size_t StackRegionAlign = KernelAslrAlignment;
|
constexpr size_t StackRegionAlign = KernelAslrAlignment;
|
||||||
|
@ -464,7 +467,8 @@ struct KernelCore::Impl {
|
||||||
stack_region_start, StackRegionSize, KMemoryRegionType_KernelStack));
|
stack_region_start, StackRegionSize, KMemoryRegionType_KernelStack));
|
||||||
|
|
||||||
// Determine the size of the resource region.
|
// Determine the size of the resource region.
|
||||||
const size_t resource_region_size = memory_layout->GetResourceRegionSizeForInit();
|
const size_t resource_region_size =
|
||||||
|
memory_layout->GetResourceRegionSizeForInit(use_extra_resources);
|
||||||
|
|
||||||
// Determine the size of the slab region.
|
// Determine the size of the slab region.
|
||||||
const size_t slab_region_size =
|
const size_t slab_region_size =
|
||||||
|
|
Loading…
Reference in a new issue