aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2019-02-24 04:24:35 -0300
committerjduncanator <1518948+jduncanator@users.noreply.github.com>2019-02-24 18:24:35 +1100
commit5001f78b1d07b988709dd5f5d1009ebe9b44c669 (patch)
treebb1307949ea9102b8ae2b68fa7e182ed7b75b2df /Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs
parenta3d46e41335efd049042cc2e38b35c4077e8ed41 (diff)
Optimize address translation and write tracking on the MMU (#571)
* Implement faster address translation and write tracking on the MMU * Rename MemoryAlloc to MemoryManagement, and other nits * Support multi-level page tables * Fix typo * Reword comment a bit * Support scalar vector loads/stores on the memory fast path, and minor fixes * Add missing cast * Alignment * Fix VirtualFree function signature * Change MemoryProtection enum to uint aswell for consistency
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs21
1 files changed, 8 insertions, 13 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs
index 6f8180c5..f794d130 100644
--- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs
+++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcMemory.cs
@@ -62,11 +62,6 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
attributeMask,
attributeValue);
- if (result == KernelResult.Success)
- {
- _memory.StopObservingRegion((long)position, (long)size);
- }
-
return result;
}
@@ -157,14 +152,14 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
{
KMemoryInfo blkInfo = _process.MemoryManager.QueryMemory(position);
- _memory.WriteUInt64((long)infoPtr + 0x00, blkInfo.Address);
- _memory.WriteUInt64((long)infoPtr + 0x08, blkInfo.Size);
- _memory.WriteInt32 ((long)infoPtr + 0x10, (int)blkInfo.State & 0xff);
- _memory.WriteInt32 ((long)infoPtr + 0x14, (int)blkInfo.Attribute);
- _memory.WriteInt32 ((long)infoPtr + 0x18, (int)blkInfo.Permission);
- _memory.WriteInt32 ((long)infoPtr + 0x1c, blkInfo.IpcRefCount);
- _memory.WriteInt32 ((long)infoPtr + 0x20, blkInfo.DeviceRefCount);
- _memory.WriteInt32 ((long)infoPtr + 0x24, 0);
+ _process.CpuMemory.WriteUInt64((long)infoPtr + 0x00, blkInfo.Address);
+ _process.CpuMemory.WriteUInt64((long)infoPtr + 0x08, blkInfo.Size);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x10, (int)blkInfo.State & 0xff);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x14, (int)blkInfo.Attribute);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x18, (int)blkInfo.Permission);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x1c, blkInfo.IpcRefCount);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x20, blkInfo.DeviceRefCount);
+ _process.CpuMemory.WriteInt32 ((long)infoPtr + 0x24, 0);
return KernelResult.Success;
}