aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs11
1 files changed, 7 insertions, 4 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
index a2db8dcc..e1ab0b93 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
@@ -2411,9 +2411,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
if (info.State == MemoryState.Unmapped)
{
- ulong currBaseAddr = info.Address + reservedSize;
+ ulong currBaseAddr = info.Address <= regionStart ? regionStart : info.Address;
ulong currEndAddr = info.Address + info.Size - 1;
+ currBaseAddr += reservedSize;
+
ulong address = BitUtils.AlignDown(currBaseAddr, alignment) + reservedStart;
if (currBaseAddr > address)
@@ -2423,9 +2425,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
ulong allocationEndAddr = address + totalNeededSize - 1;
- if (allocationEndAddr <= regionEndAddr &&
- allocationEndAddr <= currEndAddr &&
- address < allocationEndAddr)
+ if (info.Address <= address &&
+ address < allocationEndAddr &&
+ allocationEndAddr <= regionEndAddr &&
+ allocationEndAddr <= currEndAddr)
{
return address;
}