|
|
@@ -259,9 +259,9 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|
|
|
|
|
InsertBlock(FreeAddr, PagesCount, MemoryState.Unmapped);
|
|
|
|
|
|
- CpuMemory.Unmap(FreeAddr, DiffSize);
|
|
|
-
|
|
|
FreePages(FreeAddr, PagesCount);
|
|
|
+
|
|
|
+ CpuMemory.Unmap(FreeAddr, DiffSize);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -631,7 +631,14 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|
|
{
|
|
|
long CurrSize = GetSizeInRange(Info, Position, End);
|
|
|
|
|
|
- CpuMemory.Map(Info.Position, PA, CurrSize);
|
|
|
+ long MapPosition = Info.Position;
|
|
|
+
|
|
|
+ if ((ulong)MapPosition < (ulong)Position)
|
|
|
+ {
|
|
|
+ MapPosition = Position;
|
|
|
+ }
|
|
|
+
|
|
|
+ CpuMemory.Map(MapPosition, PA, CurrSize);
|
|
|
|
|
|
PA += CurrSize;
|
|
|
}
|
|
|
@@ -705,10 +712,10 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|
|
|
|
|
InsertBlock(Position, PagesCount, MemoryState.Unmapped);
|
|
|
|
|
|
- CpuMemory.Unmap(Position, Size);
|
|
|
-
|
|
|
FreePages(Position, PagesCount);
|
|
|
|
|
|
+ CpuMemory.Unmap(Position, Size);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
@@ -737,6 +744,11 @@ namespace Ryujinx.HLE.HOS.Kernel
|
|
|
{
|
|
|
long VA = Position + Page * PageSize;
|
|
|
|
|
|
+ if (!CpuMemory.IsMapped(VA))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
long PA = CpuMemory.GetPhysicalAddress(VA);
|
|
|
|
|
|
Allocator.Free(PA, PageSize);
|