Improve kernel WaitSynchronization syscall implementation (#1362)

This commit is contained in:
gdkchan 2020-07-17 01:22:13 -03:00 committed by GitHub
parent 88619d71b8
commit 20774dab14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 16 deletions

View file

@ -12,6 +12,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
class KThread : KSynchronizationObject, IKFutureSchedulerObject
{
public const int MaxWaitSyncObjects = 64;
private int _hostThreadRunning;
public Thread HostThread { get; private set; }
@ -39,6 +41,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
public ulong TlsAddress => _tlsAddress;
public ulong TlsDramAddress { get; private set; }
public KSynchronizationObject[] WaitSyncObjects { get; }
public int[] WaitSyncHandles { get; }
public long LastScheduledTime { get; set; }
public LinkedListNode<KThread>[] SiblingsPerCore { get; private set; }
@ -96,6 +101,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
_scheduler = KernelContext.Scheduler;
_schedulingData = KernelContext.Scheduler.SchedulingData;
WaitSyncObjects = new KSynchronizationObject[MaxWaitSyncObjects];
WaitSyncHandles = new int[MaxWaitSyncObjects];
SiblingsPerCore = new LinkedListNode<KThread>[KScheduler.CpuCoresCount];
_mutexWaiters = new LinkedList<KThread>();