diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
index aca43f431..b7d8c28c2 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
@@ -376,8 +376,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
- public KernelResult UnmapPages(ulong address, ulong pagesCount, KPageList pageList, MemoryState stateExpected)
+ public KernelResult UnmapPages(ulong address, KPageList pageList, MemoryState stateExpected)
{
+ ulong pagesCount = pageList.GetPagesCount();
ulong size = pagesCount * PageSize;
ulong endAddr = address + size;
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
index 72f4b6caf..8921034c7 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
@@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
class KSharedMemory : KAutoObject
{
- private readonly SharedMemoryStorage _storage;
+ private readonly KPageList _pageList;
private readonly long _ownerPid;
@@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
KMemoryPermission ownerPermission,
KMemoryPermission userPermission) : base(context)
{
- _storage = storage;
+ _pageList = storage.GetPageList();
_ownerPid = ownerPid;
_ownerPermission = ownerPermission;
_userPermission = userPermission;
@@ -33,10 +33,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
KProcess process,
KMemoryPermission permission)
{
- ulong pagesCountRounded = BitUtils.DivRoundUp(size, KPageTableBase.PageSize);
-
- var pageList = _storage.GetPageList();
- if (pageList.GetPagesCount() != pagesCountRounded)
+ if (_pageList.GetPagesCount() != BitUtils.DivRoundUp(size, KPageTableBase.PageSize))
{
return KernelResult.InvalidSize;
}
@@ -50,22 +47,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return KernelResult.InvalidPermission;
}
- return memoryManager.MapPages(address, pageList, MemoryState.SharedMemory, permission);
+ return memoryManager.MapPages(address, _pageList, MemoryState.SharedMemory, permission);
}
public KernelResult UnmapFromProcess(KPageTableBase memoryManager, ulong address, ulong size, KProcess process)
{
- ulong pagesCountRounded = BitUtils.DivRoundUp(size, KPageTableBase.PageSize);
-
- var pageList = _storage.GetPageList();
- ulong pagesCount = pageList.GetPagesCount();
-
- if (pagesCount != pagesCountRounded)
+ if (_pageList.GetPagesCount() != BitUtils.DivRoundUp(size, KPageTableBase.PageSize))
{
return KernelResult.InvalidSize;
}
- return memoryManager.UnmapPages(address, pagesCount, pageList, MemoryState.SharedMemory);
+ return memoryManager.UnmapPages(address, _pageList, MemoryState.SharedMemory);
}
}
}
\ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
index 3b9b70176..107f04c91 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
@@ -14,8 +14,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
private readonly KPageList _pageList;
- private readonly SharedMemoryStorage _storage;
-
public ulong Address { get; private set; }
public ulong Size { get; private set; }
@@ -31,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
public KTransferMemory(KernelContext context, SharedMemoryStorage storage) : base(context)
{
- _storage = storage;
+ _pageList = storage.GetPageList();
Permission = KMemoryPermission.ReadAndWrite;
_hasBeenInitialized = true;
@@ -69,15 +67,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
KProcess process,
KMemoryPermission permission)
{
- if (_storage == null)
- {
- throw new NotImplementedException();
- }
-
- ulong pagesCountRounded = BitUtils.DivRoundUp(size, KPageTableBase.PageSize);
-
- var pageList = _storage.GetPageList();
- if (pageList.GetPagesCount() != pagesCountRounded)
+ if (_pageList.GetPagesCount() != BitUtils.DivRoundUp(size, KPageTableBase.PageSize))
{
return KernelResult.InvalidSize;
}
@@ -89,7 +79,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
MemoryState state = Permission == KMemoryPermission.None ? MemoryState.TransferMemoryIsolated : MemoryState.TransferMemory;
- KernelResult result = memoryManager.MapPages(address, pageList, state, KMemoryPermission.ReadAndWrite);
+ KernelResult result = memoryManager.MapPages(address, _pageList, state, KMemoryPermission.ReadAndWrite);
if (result == KernelResult.Success)
{
@@ -105,24 +95,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
ulong size,
KProcess process)
{
- if (_storage == null)
- {
- throw new NotImplementedException();
- }
-
- ulong pagesCountRounded = BitUtils.DivRoundUp(size, KPageTableBase.PageSize);
-
- var pageList = _storage.GetPageList();
- ulong pagesCount = pageList.GetPagesCount();
-
- if (pagesCount != pagesCountRounded)
+ if (_pageList.GetPagesCount() != BitUtils.DivRoundUp(size, KPageTableBase.PageSize))
{
return KernelResult.InvalidSize;
}
MemoryState state = Permission == KMemoryPermission.None ? MemoryState.TransferMemoryIsolated : MemoryState.TransferMemory;
- KernelResult result = memoryManager.UnmapPages(address, pagesCount, pageList, state);
+ KernelResult result = memoryManager.UnmapPages(address, _pageList, state);
if (result == KernelResult.Success)
{
diff --git a/Ryujinx.Memory/Range/HostMemoryRange.cs b/Ryujinx.Memory/Range/HostMemoryRange.cs
deleted file mode 100644
index c6d8689c5..000000000
--- a/Ryujinx.Memory/Range/HostMemoryRange.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-
-namespace Ryujinx.Memory.Range
-{
- ///
- /// Range of memory composed of an address and size.
- ///
- public struct HostMemoryRange : IEquatable
- {
- ///
- /// An empty memory range, with a null address and zero size.
- ///
- public static HostMemoryRange Empty => new HostMemoryRange(0, 0);
-
- ///
- /// Start address of the range.
- ///
- public nuint Address { get; }
-
- ///
- /// Size of the range in bytes.
- ///
- public ulong Size { get; }
-
- ///
- /// Address where the range ends (exclusive).
- ///
- public nuint EndAddress => Address + (nuint)Size;
-
- ///
- /// Creates a new memory range with the specified address and size.
- ///
- /// Start address
- /// Size in bytes
- public HostMemoryRange(nuint address, ulong size)
- {
- Address = address;
- Size = size;
- }
-
- ///
- /// Checks if the range overlaps with another.
- ///
- /// The other range to check for overlap
- /// True if the ranges overlap, false otherwise
- public bool OverlapsWith(HostMemoryRange other)
- {
- nuint thisAddress = Address;
- nuint thisEndAddress = EndAddress;
- nuint otherAddress = other.Address;
- nuint otherEndAddress = other.EndAddress;
-
- return thisAddress < otherEndAddress && otherAddress < thisEndAddress;
- }
-
- public override bool Equals(object obj)
- {
- return obj is HostMemoryRange other && Equals(other);
- }
-
- public bool Equals(HostMemoryRange other)
- {
- return Address == other.Address && Size == other.Size;
- }
-
- public override int GetHashCode()
- {
- return HashCode.Combine(Address, Size);
- }
- }
-}