From 08831eecf77cedd3c4192ebab5a9c485fb15d51e Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Wed, 4 Jan 2023 19:15:45 -0300
Subject: IPC refactor part 3+4: New server HIPC message processor (#4188)

* IPC refactor part 3 + 4: New server HIPC message processor with source generator based serialization

* Make types match on calls to AlignUp/AlignDown

* Formatting

* Address some PR feedback

* Move BitfieldExtensions to Ryujinx.Common.Utilities and consolidate implementations

* Rename Reader/Writer to SpanReader/SpanWriter and move to Ryujinx.Common.Memory

* Implement EventType

* Address more PR feedback

* Log request processing errors since they are not normal

* Rename waitable to multiwait and add missing lock

* PR feedback

* Ac_K PR feedback
---
 Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs | 261 ++++++++++++------------
 1 file changed, 131 insertions(+), 130 deletions(-)

(limited to 'Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs')

diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
index 2c94cba2..e19e22c8 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
@@ -1,6 +1,7 @@
 using Ryujinx.Common;
 using Ryujinx.HLE.HOS.Kernel.Common;
 using Ryujinx.HLE.HOS.Kernel.Process;
+using Ryujinx.Horizon.Common;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
@@ -88,7 +89,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
         private static readonly int[] AddrSpaceSizes = new int[] { 32, 36, 32, 39 };
 
-        public KernelResult InitializeForProcess(
+        public Result InitializeForProcess(
             AddressSpaceType addrSpaceType,
             bool aslrEnabled,
             bool aslrDisabled,
@@ -107,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             ulong addrSpaceBase = 0;
             ulong addrSpaceSize = 1UL << AddrSpaceSizes[(int)addrSpaceType];
 
-            KernelResult result = CreateUserAddressSpace(
+            Result result = CreateUserAddressSpace(
                 addrSpaceType,
                 aslrEnabled,
                 aslrDisabled,
@@ -118,7 +119,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 size,
                 slabManager);
 
-            if (result != KernelResult.Success)
+            if (result != Result.Success)
             {
                 Context.ContextIdManager.PutId(_contextId);
             }
@@ -134,7 +135,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             public ulong AslrOffset;
         }
 
-        private KernelResult CreateUserAddressSpace(
+        private Result CreateUserAddressSpace(
             AddressSpaceType addrSpaceType,
             bool aslrEnabled,
             bool aslrDisabled,
@@ -342,7 +343,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult MapPages(ulong address, KPageList pageList, MemoryState state, KMemoryPermission permission)
+        public Result MapPages(ulong address, KPageList pageList, MemoryState state, KMemoryPermission permission)
         {
             ulong pagesCount = pageList.GetPagesCount();
 
@@ -365,9 +366,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     return KernelResult.OutOfResource;
                 }
 
-                KernelResult result = MapPages(address, pageList, permission);
+                Result result = MapPages(address, pageList, permission);
 
-                if (result == KernelResult.Success)
+                if (result == Result.Success)
                 {
                     _blockManager.InsertBlock(address, pagesCount, state, permission);
                 }
@@ -376,7 +377,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnmapPages(ulong address, KPageList pageList, MemoryState stateExpected)
+        public Result UnmapPages(ulong address, KPageList pageList, MemoryState stateExpected)
         {
             ulong pagesCount = pageList.GetPagesCount();
             ulong size = pagesCount * PageSize;
@@ -430,9 +431,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         return KernelResult.OutOfResource;
                     }
 
-                    KernelResult result = Unmap(address, pagesCount);
+                    Result result = Unmap(address, pagesCount);
 
-                    if (result == KernelResult.Success)
+                    if (result == Result.Success)
                     {
                         _blockManager.InsertBlock(address, pagesCount, MemoryState.Unmapped);
                     }
@@ -446,19 +447,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult MapNormalMemory(long address, long size, KMemoryPermission permission)
+        public Result MapNormalMemory(long address, long size, KMemoryPermission permission)
         {
             // TODO.
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult MapIoMemory(long address, long size, KMemoryPermission permission)
+        public Result MapIoMemory(long address, long size, KMemoryPermission permission)
         {
             // TODO.
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult MapPages(
+        public Result MapPages(
             ulong pagesCount,
             int alignment,
             ulong srcPa,
@@ -497,7 +498,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     return KernelResult.OutOfResource;
                 }
 
-                KernelResult result;
+                Result result;
 
                 if (paIsValid)
                 {
@@ -508,7 +509,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     result = AllocateAndMapPages(address, pagesCount, permission);
                 }
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     return result;
                 }
@@ -516,10 +517,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 _blockManager.InsertBlock(address, pagesCount, state, permission);
             }
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult MapPages(ulong address, ulong pagesCount, MemoryState state, KMemoryPermission permission)
+        public Result MapPages(ulong address, ulong pagesCount, MemoryState state, KMemoryPermission permission)
         {
             ulong size = pagesCount * PageSize;
 
@@ -540,9 +541,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     return KernelResult.OutOfResource;
                 }
 
-                KernelResult result = AllocateAndMapPages(address, pagesCount, permission);
+                Result result = AllocateAndMapPages(address, pagesCount, permission);
 
-                if (result == KernelResult.Success)
+                if (result == Result.Success)
                 {
                     _blockManager.InsertBlock(address, pagesCount, state, permission);
                 }
@@ -551,13 +552,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        private KernelResult AllocateAndMapPages(ulong address, ulong pagesCount, KMemoryPermission permission)
+        private Result AllocateAndMapPages(ulong address, ulong pagesCount, KMemoryPermission permission)
         {
             KMemoryRegionManager region = GetMemoryRegionManager();
 
-            KernelResult result = region.AllocatePages(out KPageList pageList, pagesCount);
+            Result result = region.AllocatePages(out KPageList pageList, pagesCount);
 
-            if (result != KernelResult.Success)
+            if (result != Result.Success)
             {
                 return result;
             }
@@ -567,7 +568,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             return MapPages(address, pageList, permission);
         }
 
-        public KernelResult MapProcessCodeMemory(ulong dst, ulong src, ulong size)
+        public Result MapProcessCodeMemory(ulong dst, ulong src, ulong size)
         {
             lock (_blockManager)
             {
@@ -596,12 +597,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong pagesCount = size / PageSize;
 
-                    KernelResult result = MapMemory(src, dst, pagesCount, permission, KMemoryPermission.None);
+                    Result result = MapMemory(src, dst, pagesCount, permission, KMemoryPermission.None);
 
                     _blockManager.InsertBlock(src, pagesCount, state, KMemoryPermission.None, MemoryAttribute.Borrowed);
                     _blockManager.InsertBlock(dst, pagesCount, MemoryState.ModCodeStatic);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -610,7 +611,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnmapProcessCodeMemory(ulong dst, ulong src, ulong size)
+        public Result UnmapProcessCodeMemory(ulong dst, ulong src, ulong size)
         {
             lock (_blockManager)
             {
@@ -656,9 +657,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 {
                     ulong pagesCount = size / PageSize;
 
-                    KernelResult result = Unmap(dst, pagesCount);
+                    Result result = Unmap(dst, pagesCount);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         return result;
                     }
@@ -673,7 +674,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped);
                     _blockManager.InsertBlock(src, pagesCount, MemoryState.Heap, KMemoryPermission.ReadAndWrite);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -682,7 +683,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult SetHeapSize(ulong size, out ulong address)
+        public Result SetHeapSize(ulong size, out ulong address)
         {
             address = 0;
 
@@ -712,7 +713,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     KMemoryRegionManager region = GetMemoryRegionManager();
 
-                    KernelResult result = region.AllocatePages(out KPageList pageList, pagesCount);
+                    Result result = region.AllocatePages(out KPageList pageList, pagesCount);
 
                     using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager));
 
@@ -724,7 +725,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         }
                     }
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         CleanUpForError();
 
@@ -747,7 +748,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     result = MapPages(_currentHeapAddr, pageList, KMemoryPermission.ReadAndWrite, true, (byte)_heapFillValue);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         CleanUpForError();
 
@@ -786,9 +787,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong pagesCount = sizeDelta / PageSize;
 
-                    KernelResult result = Unmap(freeAddr, pagesCount);
+                    Result result = Unmap(freeAddr, pagesCount);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         return result;
                     }
@@ -803,10 +804,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
             address = HeapRegionStart;
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult SetMemoryPermission(ulong address, ulong size, KMemoryPermission permission)
+        public Result SetMemoryPermission(ulong address, ulong size, KMemoryPermission permission)
         {
             lock (_blockManager)
             {
@@ -833,9 +834,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                         ulong pagesCount = size / PageSize;
 
-                        KernelResult result = Reprotect(address, pagesCount, permission);
+                        Result result = Reprotect(address, pagesCount, permission);
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             return result;
                         }
@@ -843,7 +844,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         _blockManager.InsertBlock(address, pagesCount, oldState, permission);
                     }
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -865,17 +866,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             return _currentHeapAddr - HeapRegionStart;
         }
 
-        public KernelResult SetHeapCapacity(ulong capacity)
+        public Result SetHeapCapacity(ulong capacity)
         {
             lock (_blockManager)
             {
                 _heapCapacity = capacity;
             }
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult SetMemoryAttribute(
+        public Result SetMemoryAttribute(
             ulong address,
             ulong size,
             MemoryAttribute attributeMask,
@@ -909,7 +910,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     _blockManager.InsertBlock(address, pagesCount, state, permission, attribute);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -942,7 +943,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult Map(ulong dst, ulong src, ulong size)
+        public Result Map(ulong dst, ulong src, ulong size)
         {
             bool success;
 
@@ -973,9 +974,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong pagesCount = size / PageSize;
 
-                    KernelResult result = MapMemory(src, dst, pagesCount, KMemoryPermission.ReadAndWrite, KMemoryPermission.ReadAndWrite);
+                    Result result = MapMemory(src, dst, pagesCount, KMemoryPermission.ReadAndWrite, KMemoryPermission.ReadAndWrite);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         return result;
                     }
@@ -983,7 +984,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     _blockManager.InsertBlock(src, pagesCount, srcState, KMemoryPermission.None, MemoryAttribute.Borrowed);
                     _blockManager.InsertBlock(dst, pagesCount, MemoryState.Stack, KMemoryPermission.ReadAndWrite);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -992,7 +993,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnmapForKernel(ulong address, ulong pagesCount, MemoryState stateExpected)
+        public Result UnmapForKernel(ulong address, ulong pagesCount, MemoryState stateExpected)
         {
             ulong size = pagesCount * PageSize;
 
@@ -1017,14 +1018,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         return KernelResult.OutOfResource;
                     }
 
-                    KernelResult result = Unmap(address, pagesCount);
+                    Result result = Unmap(address, pagesCount);
 
-                    if (result == KernelResult.Success)
+                    if (result == Result.Success)
                     {
                         _blockManager.InsertBlock(address, pagesCount, MemoryState.Unmapped);
                     }
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -1033,7 +1034,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult Unmap(ulong dst, ulong src, ulong size)
+        public Result Unmap(ulong dst, ulong src, ulong size)
         {
             bool success;
 
@@ -1076,9 +1077,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong pagesCount = size / PageSize;
 
-                    KernelResult result = UnmapMemory(dst, src, pagesCount, dstPermission, KMemoryPermission.ReadAndWrite);
+                    Result result = UnmapMemory(dst, src, pagesCount, dstPermission, KMemoryPermission.ReadAndWrite);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         return result;
                     }
@@ -1086,7 +1087,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     _blockManager.InsertBlock(src, pagesCount, srcState, KMemoryPermission.ReadAndWrite);
                     _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -1095,7 +1096,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnmapProcessMemory(ulong dst, ulong size, KPageTableBase srcPageTable, ulong src)
+        public Result UnmapProcessMemory(ulong dst, ulong size, KPageTableBase srcPageTable, ulong src)
         {
             lock (_blockManager)
             {
@@ -1153,20 +1154,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 ulong pagesCount = size / PageSize;
 
-                KernelResult result = Unmap(dst, pagesCount);
+                Result result = Unmap(dst, pagesCount);
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     return result;
                 }
 
                 _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped);
 
-                return KernelResult.Success;
+                return Result.Success;
             }
         }
 
-        public KernelResult SetProcessMemoryPermission(ulong address, ulong size, KMemoryPermission permission)
+        public Result SetProcessMemoryPermission(ulong address, ulong size, KMemoryPermission permission)
         {
             lock (_blockManager)
             {
@@ -1213,7 +1214,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                         ulong pagesCount = size / PageSize;
 
-                        KernelResult result;
+                        Result result;
 
                         if ((oldPermission & KMemoryPermission.Execute) != 0)
                         {
@@ -1224,7 +1225,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                             result = Reprotect(address, pagesCount, permission);
                         }
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             return result;
                         }
@@ -1232,7 +1233,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         _blockManager.InsertBlock(address, pagesCount, newState, permission);
                     }
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -1241,7 +1242,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult MapPhysicalMemory(ulong address, ulong size)
+        public Result MapPhysicalMemory(ulong address, ulong size)
         {
             ulong endAddr = address + size;
 
@@ -1259,7 +1260,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 if (mappedSize == size)
                 {
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
 
                 ulong remainingSize = size - mappedSize;
@@ -1276,7 +1277,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 KMemoryRegionManager region = GetMemoryRegionManager();
 
-                KernelResult result = region.AllocatePages(out KPageList pageList, remainingPages);
+                Result result = region.AllocatePages(out KPageList pageList, remainingPages);
 
                 using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager));
 
@@ -1285,7 +1286,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     currentProcess.ResourceLimit?.Release(LimitableResource.Memory, remainingSize);
                 }
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     CleanUpForError();
 
@@ -1357,10 +1358,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     MemoryAttribute.None);
             }
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult UnmapPhysicalMemory(ulong address, ulong size)
+        public Result UnmapPhysicalMemory(ulong address, ulong size)
         {
             ulong endAddr = address + size;
 
@@ -1391,7 +1392,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 if (heapMappedSize == 0)
                 {
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
 
                 if (!_slabManager.CanAllocate(MaxBlocksNeededForInsertion))
@@ -1400,7 +1401,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 }
 
                 // Try to unmap all the heap mapped memory inside range.
-                KernelResult result = KernelResult.Success;
+                Result result = Result.Success;
 
                 foreach (KMemoryInfo info in IterateOverRange(address, endAddr))
                 {
@@ -1416,11 +1417,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         // The kernel would attempt to remap if this fails, but we don't because:
                         // - The implementation may not support remapping if memory aliasing is not supported on the platform.
                         // - Unmap can't ever fail here anyway.
-                        Debug.Assert(result == KernelResult.Success);
+                        Debug.Assert(result == Result.Success);
                     }
                 }
 
-                if (result == KernelResult.Success)
+                if (result == Result.Success)
                 {
                     PhysicalMemoryUsage -= heapMappedSize;
 
@@ -1437,7 +1438,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult CopyDataToCurrentProcess(
+        public Result CopyDataToCurrentProcess(
             ulong dst,
             ulong size,
             ulong src,
@@ -1460,7 +1461,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 toServer: true);
         }
 
-        public KernelResult CopyDataFromCurrentProcess(
+        public Result CopyDataFromCurrentProcess(
             ulong dst,
             ulong size,
             MemoryState stateMask,
@@ -1483,7 +1484,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 toServer: false);
         }
 
-        private KernelResult CopyDataFromOrToCurrentProcess(
+        private Result CopyDataFromOrToCurrentProcess(
             ulong size,
             ulong clientAddress,
             ulong serverAddress,
@@ -1543,7 +1544,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                         size -= copySize;
                     }
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -1552,7 +1553,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult MapBufferFromClientProcess(
+        public Result MapBufferFromClientProcess(
             ulong size,
             ulong src,
             KPageTableBase srcPageTable,
@@ -1567,14 +1568,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             {
                 lock (_blockManager)
                 {
-                    KernelResult result = srcPageTable.ReprotectClientProcess(
+                    Result result = srcPageTable.ReprotectClientProcess(
                         src,
                         size,
                         permission,
                         state,
                         out int blocksNeeded);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         return result;
                     }
@@ -1590,7 +1591,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     result = MapPagesFromClientProcess(size, src, permission, state, srcPageTable, send, out ulong va);
 
-                    if (result != KernelResult.Success)
+                    if (result != Result.Success)
                     {
                         if (srcMapEndAddr > srcMapAddress)
                         {
@@ -1613,10 +1614,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 }
             }
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        private KernelResult ReprotectClientProcess(
+        private Result ReprotectClientProcess(
             ulong address,
             ulong size,
             KMemoryPermission permission,
@@ -1689,8 +1690,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                         ulong blockPagesCount = blockSize / PageSize;
 
-                        KernelResult reprotectResult = Reprotect(blockAddress, blockPagesCount, info.Permission);
-                        Debug.Assert(reprotectResult == KernelResult.Success);
+                        Result reprotectResult = Reprotect(blockAddress, blockPagesCount, info.Permission);
+                        Debug.Assert(reprotectResult == Result.Success);
                     }
                 }
             }
@@ -1699,7 +1700,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             SignalMemoryTracking(addressTruncated, endAddrRounded - addressTruncated, false);
 
             // Reprotect the aligned pages range on the client to make them inaccessible from the client process.
-            KernelResult result;
+            Result result;
 
             if (addressRounded < endAddrTruncated)
             {
@@ -1736,7 +1737,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     {
                         result = Reprotect(blockAddress, blockPagesCount, permissionMask);
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             CleanUpForError();
 
@@ -1748,10 +1749,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 }
             }
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        private KernelResult MapPagesFromClientProcess(
+        private Result MapPagesFromClientProcess(
             ulong size,
             ulong address,
             KMemoryPermission permission,
@@ -1877,9 +1878,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                     Context.Memory.Fill(GetDramAddressFromPa(firstPageFillAddress), unusedSizeAfter, (byte)_ipcFillValue);
                 }
 
-                KernelResult result = MapPages(currentVa, 1, dstFirstPagePa, permission);
+                Result result = MapPages(currentVa, 1, dstFirstPagePa, permission);
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     CleanUpForError();
 
@@ -1896,9 +1897,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 KPageList pageList = new KPageList();
                 srcPageTable.GetPhysicalRegions(addressRounded, alignedSize, pageList);
 
-                KernelResult result = MapPages(currentVa, pageList, permission);
+                Result result = MapPages(currentVa, pageList, permission);
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     CleanUpForError();
 
@@ -1931,9 +1932,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 Context.Memory.Fill(GetDramAddressFromPa(lastPageFillAddr), unusedSizeAfter, (byte)_ipcFillValue);
 
-                KernelResult result = MapPages(currentVa, 1, dstLastPagePa, permission);
+                Result result = MapPages(currentVa, 1, dstLastPagePa, permission);
 
-                if (result != KernelResult.Success)
+                if (result != Result.Success)
                 {
                     CleanUpForError();
 
@@ -1945,10 +1946,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
             dst = va + (address - addressTruncated);
 
-            return KernelResult.Success;
+            return Result.Success;
         }
 
-        public KernelResult UnmapNoAttributeIfStateEquals(ulong address, ulong size, MemoryState state)
+        public Result UnmapNoAttributeIfStateEquals(ulong address, ulong size, MemoryState state)
         {
             if (AddrSpaceStart > address)
             {
@@ -1990,9 +1991,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong pagesCount = (endAddrRounded - addressTruncated) / PageSize;
 
-                    KernelResult result = Unmap(addressTruncated, pagesCount);
+                    Result result = Unmap(addressTruncated, pagesCount);
 
-                    if (result == KernelResult.Success)
+                    if (result == Result.Success)
                     {
                         _blockManager.InsertBlock(addressTruncated, pagesCount, MemoryState.Unmapped);
                     }
@@ -2006,7 +2007,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnmapIpcRestorePermission(ulong address, ulong size, MemoryState state)
+        public Result UnmapIpcRestorePermission(ulong address, ulong size, MemoryState state)
         {
             ulong endAddr = address + size;
 
@@ -2019,7 +2020,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
             if (pagesCount == 0)
             {
-                return KernelResult.Success;
+                return Result.Success;
             }
 
             MemoryState stateMask;
@@ -2069,9 +2070,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                         ulong blockPagesCount = blockSize / PageSize;
 
-                        KernelResult result = Reprotect(blockAddress, blockPagesCount, info.SourcePermission);
+                        Result result = Reprotect(blockAddress, blockPagesCount, info.SourcePermission);
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             return result;
                         }
@@ -2080,7 +2081,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                 _blockManager.InsertBlock(addressRounded, pagesCount, RestoreIpcMappingPermissions);
 
-                return KernelResult.Success;
+                return Result.Success;
             }
         }
 
@@ -2094,7 +2095,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             block.RestoreIpcMappingPermission();
         }
 
-        public KernelResult GetPagesIfStateEquals(
+        public Result GetPagesIfStateEquals(
             ulong address,
             ulong size,
             MemoryState stateMask,
@@ -2128,7 +2129,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 {
                     GetPhysicalRegions(address, size, pageList);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -2137,7 +2138,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult BorrowIpcBuffer(ulong address, ulong size)
+        public Result BorrowIpcBuffer(ulong address, ulong size)
         {
             return SetAttributesAndChangePermission(
                 address,
@@ -2152,7 +2153,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 MemoryAttribute.Borrowed);
         }
 
-        public KernelResult BorrowTransferMemory(KPageList pageList, ulong address, ulong size, KMemoryPermission permission)
+        public Result BorrowTransferMemory(KPageList pageList, ulong address, ulong size, KMemoryPermission permission)
         {
             return SetAttributesAndChangePermission(
                 address,
@@ -2168,7 +2169,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 pageList);
         }
 
-        public KernelResult BorrowCodeMemory(KPageList pageList, ulong address, ulong size)
+        public Result BorrowCodeMemory(KPageList pageList, ulong address, ulong size)
         {
             return SetAttributesAndChangePermission(
                 address,
@@ -2184,7 +2185,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 pageList);
         }
 
-        private KernelResult SetAttributesAndChangePermission(
+        private Result SetAttributesAndChangePermission(
             ulong address,
             ulong size,
             MemoryState stateMask,
@@ -2237,9 +2238,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     if (newPermission != oldPermission)
                     {
-                        KernelResult result = Reprotect(address, pagesCount, newPermission);
+                        Result result = Reprotect(address, pagesCount, newPermission);
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             return result;
                         }
@@ -2249,7 +2250,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     _blockManager.InsertBlock(address, pagesCount, oldState, newPermission, newAttribute);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -2258,7 +2259,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             }
         }
 
-        public KernelResult UnborrowIpcBuffer(ulong address, ulong size)
+        public Result UnborrowIpcBuffer(ulong address, ulong size)
         {
             return ClearAttributesAndChangePermission(
                 address,
@@ -2273,7 +2274,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 MemoryAttribute.Borrowed);
         }
 
-        public KernelResult UnborrowTransferMemory(ulong address, ulong size, KPageList pageList)
+        public Result UnborrowTransferMemory(ulong address, ulong size, KPageList pageList)
         {
             return ClearAttributesAndChangePermission(
                 address,
@@ -2289,7 +2290,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 pageList);
         }
 
-        public KernelResult UnborrowCodeMemory(ulong address, ulong size, KPageList pageList)
+        public Result UnborrowCodeMemory(ulong address, ulong size, KPageList pageList)
         {
             return ClearAttributesAndChangePermission(
                 address,
@@ -2305,7 +2306,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
                 pageList);
         }
 
-        private KernelResult ClearAttributesAndChangePermission(
+        private Result ClearAttributesAndChangePermission(
             ulong address,
             ulong size,
             MemoryState stateMask,
@@ -2365,9 +2366,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     if (newPermission != oldPermission)
                     {
-                        KernelResult result = Reprotect(address, pagesCount, newPermission);
+                        Result result = Reprotect(address, pagesCount, newPermission);
 
-                        if (result != KernelResult.Success)
+                        if (result != Result.Success)
                         {
                             return result;
                         }
@@ -2377,7 +2378,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     _blockManager.InsertBlock(address, pagesCount, oldState, newPermission, newAttribute);
 
-                    return KernelResult.Success;
+                    return Result.Success;
                 }
                 else
                 {
@@ -2915,7 +2916,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="oldSrcPermission">Current protection of the source memory region</param>
         /// <param name="newDstPermission">Desired protection for the destination memory region</param>
         /// <returns>Result of the mapping operation</returns>
-        protected abstract KernelResult MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission);
+        protected abstract Result MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission);
 
         /// <summary>
         /// Unmaps a region of memory that was previously mapped with <see cref="MapMemory"/>.
@@ -2926,7 +2927,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="oldDstPermission">Current protection of the destination memory region</param>
         /// <param name="newSrcPermission">Desired protection of the source memory region</param>
         /// <returns>Result of the unmapping operation</returns>
-        protected abstract KernelResult UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission);
+        protected abstract Result UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission);
 
         /// <summary>
         /// Maps a region of memory into the specified physical memory region.
@@ -2938,7 +2939,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="shouldFillPages">Indicate if the pages should be filled with the <paramref name="fillValue"/> value</param>
         /// <param name="fillValue">The value used to fill pages when <paramref name="shouldFillPages"/> is set to true</param>
         /// <returns>Result of the mapping operation</returns>
-        protected abstract KernelResult MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0);
+        protected abstract Result MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0);
 
         /// <summary>
         /// Maps a region of memory into the specified physical memory region.
@@ -2949,7 +2950,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="shouldFillPages">Indicate if the pages should be filled with the <paramref name="fillValue"/> value</param>
         /// <param name="fillValue">The value used to fill pages when <paramref name="shouldFillPages"/> is set to true</param>
         /// <returns>Result of the mapping operation</returns>
-        protected abstract KernelResult MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0);
+        protected abstract Result MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0);
 
         /// <summary>
         /// Unmaps a region of memory that was previously mapped with one of the page mapping methods.
@@ -2957,7 +2958,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="address">Virtual address of the region to unmap</param>
         /// <param name="pagesCount">Number of pages to unmap</param>
         /// <returns>Result of the unmapping operation</returns>
-        protected abstract KernelResult Unmap(ulong address, ulong pagesCount);
+        protected abstract Result Unmap(ulong address, ulong pagesCount);
 
         /// <summary>
         /// Changes the permissions of a given virtual memory region.
@@ -2966,7 +2967,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="pagesCount">Number of pages to have their permissions changed</param>
         /// <param name="permission">New permission</param>
         /// <returns>Result of the permission change operation</returns>
-        protected abstract KernelResult Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission);
+        protected abstract Result Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission);
 
         /// <summary>
         /// Changes the permissions of a given virtual memory region.
@@ -2975,7 +2976,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
         /// <param name="pagesCount">Number of pages to have their permissions changed</param>
         /// <param name="permission">New permission</param>
         /// <returns>Result of the permission change operation</returns>
-        protected abstract KernelResult ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission);
+        protected abstract Result ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission);
 
         /// <summary>
         /// Alerts the memory tracking that a given region has been read from or written to.
-- 
cgit v1.2.3-70-g09d2