From 20ce37dee6158ede18ad699338ecea083728423b Mon Sep 17 00:00:00 2001 From: Mary Date: Sat, 29 Jan 2022 22:18:03 +0100 Subject: kernel: A bit of refactoring and fix GetThreadContext3 correctness (#3042) * Start refactoring kernel a bit and import some changes from kernel decoupling PR * kernel: Put output always at the start in Syscall functions * kernel: Rewrite GetThreadContext3 to use a structure and to be accurate * kernel: make KernelTransfer use generic types and simplify * Fix some warning and do not use getters on MemoryInfo * Address gdkchan's comment * GetThreadContext3: use correct pause flag --- Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs | 6 +++--- Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs | 5 +++-- Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'Ryujinx.HLE/HOS/Kernel/Memory') diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs index ff87ecb7..fb3d669d 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs @@ -2682,7 +2682,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return Context.MemoryManager.MemoryRegions[(int)_memRegion]; } - public long GetMmUsedPages() + public ulong GetMmUsedPages() { lock (_blockManager) { @@ -2690,9 +2690,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - private long GetMmUsedSize() + private ulong GetMmUsedSize() { - return _blockManager.BlocksCount * KMemoryBlockSize; + return (ulong)(_blockManager.BlocksCount * KMemoryBlockSize); } public bool IsInvalidRegion(ulong address, ulong size) diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs b/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs index 12300e4f..563b817d 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs @@ -5,8 +5,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory [Flags] enum KMemoryPermission : uint { - None = 0, - Mask = uint.MaxValue, + None = 0, + UserMask = Read | Write | Execute, + Mask = uint.MaxValue, Read = 1 << 0, Write = 1 << 1, diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs b/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs index f7161a88..d3b61780 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs @@ -26,6 +26,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KernelStack = 0x00002013, CodeReadOnly = 0x00402214, CodeWritable = 0x00402015, + UserMask = 0xff, Mask = 0xffffffff, PermissionChangeAllowed = 1 << 8, -- cgit v1.2.3