Implement support for page sizes > 4KB (#4252)
* Implement support for page sizes > 4KB * Check and work around more alignment issues * Was not meant to change this * Use MemoryBlock.GetPageSize() value for signal handler code * Do not take the path for private allocations if host supports 4KB pages * Add Flags attribute on MemoryMapFlags * Fix dirty region size with 16kb pages Would accidentally report a size that was too high (generally 16k instead of 4k, uploading 4x as much data) Co-authored-by: riperiperi <rhy3756547@hotmail.com>
This commit is contained in:
parent
43a83a401e
commit
86fd0643c2
29 changed files with 1294 additions and 146 deletions
|
@ -84,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|||
KernelConstants.UserSlabHeapItemSize,
|
||||
KernelConstants.UserSlabHeapSize);
|
||||
|
||||
memory.Commit(KernelConstants.UserSlabHeapBase - DramMemoryMap.DramBase, KernelConstants.UserSlabHeapSize);
|
||||
CommitMemory(KernelConstants.UserSlabHeapBase - DramMemoryMap.DramBase, KernelConstants.UserSlabHeapSize);
|
||||
|
||||
CriticalSection = new KCriticalSection(this);
|
||||
Schedulers = new KScheduler[KScheduler.CpuCoresCount];
|
||||
|
@ -119,6 +119,17 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|||
new Thread(PreemptionThreadStart) { Name = "HLE.PreemptionThread" }.Start();
|
||||
}
|
||||
|
||||
public void CommitMemory(ulong address, ulong size)
|
||||
{
|
||||
ulong alignment = MemoryBlock.GetPageSize();
|
||||
ulong endAddress = address + size;
|
||||
|
||||
address &= ~(alignment - 1);
|
||||
endAddress = (endAddress + (alignment - 1)) & ~(alignment - 1);
|
||||
|
||||
Memory.Commit(address, endAddress - address);
|
||||
}
|
||||
|
||||
public ulong NewThreadUid()
|
||||
{
|
||||
return Interlocked.Increment(ref _threadUid) - 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue