aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs35
1 files changed, 7 insertions, 28 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
index 4e516842..3711b9df 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 ulong _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,35 +47,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return KernelResult.InvalidPermission;
}
- KernelResult result = memoryManager.MapPages(address, pageList, MemoryState.SharedMemory, permission);
-
- if (result == KernelResult.Success && !memoryManager.SupportsMemoryAliasing)
- {
- _storage.Borrow(process, address);
- }
-
- return result;
+ return memoryManager.MapPages(address, _pageList, MemoryState.SharedMemory, permission);
}
- public KernelResult UnmapFromProcess(
- KPageTableBase memoryManager,
- ulong address,
- ulong size,
- KProcess process)
+ 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;
}
- var ranges = _storage.GetRanges();
-
- return memoryManager.UnmapPages(address, pagesCount, ranges, MemoryState.SharedMemory);
+ return memoryManager.UnmapPages(address, _pageList, MemoryState.SharedMemory);
}
}
} \ No newline at end of file