diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs index 90cd01f0..fbdd812e 100644 --- a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs +++ b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs @@ -126,6 +126,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AddressSpaceType addrSpaceType = (AddressSpaceType)((int)(creationInfo.Flags & ProcessCreationFlags.AddressSpaceMask) >> (int)ProcessCreationFlags.AddressSpaceShift); + Pid = KernelContext.NewKipId(); + + if (Pid == 0 || (ulong)Pid >= KernelConstants.InitialProcessId) + { + throw new InvalidOperationException($"Invalid KIP Id {Pid}."); + } + InitializeMemoryManager(creationInfo.Flags); bool aslrEnabled = creationInfo.Flags.HasFlag(ProcessCreationFlags.EnableAslr); @@ -171,13 +178,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return result; } - Pid = KernelContext.NewKipId(); - - if (Pid == 0 || (ulong)Pid >= KernelConstants.InitialProcessId) - { - throw new InvalidOperationException($"Invalid KIP Id {Pid}."); - } - return ParseProcessInfo(creationInfo); } @@ -233,6 +233,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AddressSpaceType addrSpaceType = (AddressSpaceType)((int)(creationInfo.Flags & ProcessCreationFlags.AddressSpaceMask) >> (int)ProcessCreationFlags.AddressSpaceShift); + Pid = KernelContext.NewProcessId(); + + if (Pid == -1 || (ulong)Pid < KernelConstants.InitialProcessId) + { + throw new InvalidOperationException($"Invalid Process Id {Pid}."); + } + InitializeMemoryManager(creationInfo.Flags); bool aslrEnabled = creationInfo.Flags.HasFlag(ProcessCreationFlags.EnableAslr); @@ -286,13 +293,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return result; } - Pid = KernelContext.NewProcessId(); - - if (Pid == -1 || (ulong)Pid < KernelConstants.InitialProcessId) - { - throw new InvalidOperationException($"Invalid Process Id {Pid}."); - } - result = ParseProcessInfo(creationInfo); if (result != KernelResult.Success) @@ -1051,14 +1051,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process bool for64Bit = flags.HasFlag(ProcessCreationFlags.Is64Bit); - Context = _contextFactory.Create(KernelContext, 1UL << addrSpaceBits, InvalidAccessHandler, for64Bit); - - // TODO: This should eventually be removed. - // The GPU shouldn't depend on the CPU memory manager at all. - if (flags.HasFlag(ProcessCreationFlags.IsApplication)) - { - KernelContext.Device.Gpu.SetVmm((IVirtualMemoryManagerTracked)CpuMemory); - } + Context = _contextFactory.Create(KernelContext, Pid, 1UL << addrSpaceBits, InvalidAccessHandler, for64Bit); if (Context.AddressSpace is MemoryManagerHostMapped) { |