aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/thread.cpp
AgeCommit message (Collapse)Author
2020-03-02core: Implement separate A32/A64 ARM interfaces.bunnei
2020-02-22Kernel: Rename ThreadCallbackHandleTable and Setup Thread Ids on Kernel.Fernando Sahmkow
2020-02-14Merge pull request #3401 from FernandoS27/synchronizationbunnei
Set of refactors for Kernel Synchronization and Hardware Constants
2020-02-12kernel/thread: Remove trivial usages of the global system accessorLioncash
We can just use the kernel member variable directly instead of going through the system to obtain the same thing.
2020-02-11Core: Set all hardware emulation constants in a single file.Fernando Sahmkow
2020-02-11Kernel: Refactor synchronization to better match REFernando Sahmkow
2020-02-11Kernel: Change WaitObject to Synchronization object. In order to better ↵Fernando Sahmkow
reflect RE.
2020-01-26Kernel: Remove a few global instances from the kernel.Fernando Sahmkow
2020-01-26Core: Refactor CpuCoreManager to CpuManager and Cpu to Core Manager.Fernando Sahmkow
This commit instends on better naming the new purpose of this classes.
2019-11-26core/memory: Migrate over address checking functions to the new Memory classLioncash
A fairly straightforward migration. These member functions can just be mostly moved verbatim with minor changes. We already have the necessary plumbing in places that they're used. IsKernelVirtualAddress() can remain a non-member function, since it doesn't rely on class state in any form.
2019-11-24kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for ↵bunnei
kernel objects. (#3154) * kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. - See https://github.com/citra-emu/citra/pull/4710 for details.
2019-11-23Merge pull request #3114 from FernandoS27/cond-varbunnei
Kernel: Correct behavior of Condition Variables to be more similar to real hardware.
2019-11-23Merge pull request #3130 from FernandoS27/cancel-syncbunnei
Kernel: Correct Cancel Synchronization.
2019-11-21Kernel: Correct behavior of Condition Variables to be more similar to real ↵Fernando Sahmkow
hardware. This commit ensures cond var threads act exactly as they do in the real console. The original implementation uses an RBTree and the behavior of cond var threads is that at the same priority level they act like a FIFO.
2019-11-16Kernel: Correct Cancel Synchronization.Fernando Sahmkow
This commit corrects the behavior of cancel synchronization when the thread is running/ready and ensures the next wait is cancelled as it's suppose to.
2019-11-12kernel: Resolve sign conversion warningsLioncash
Uncovered a bug within Thread's SetCoreAndAffinityMask() where an unsigned variable (ideal_core) was being compared against "< 0", which would always be a false condition. We can also get rid of an unused function (GetNextProcessorId) which contained a sign mismatch warning.
2019-10-15Kernel Thread: Cleanup THREADPROCESSORID_DONT_UPDATE.Fernando Sahmkow
2019-10-15Kernel: Address Feedback 2Fernando Sahmkow
2019-10-15Kernel: Clang FormatFernando Sahmkow
2019-10-15Kernel: Reverse global accessor removal.Fernando Sahmkow
2019-10-15Kernel: Address Feedback.Fernando Sahmkow
2019-10-15Kernel_Thread: Eliminate most global accessors.Fernando Sahmkow
2019-10-15Kernel: Correct Paused schedulingFernando Sahmkow
2019-10-15Kernel: Corrections to Wait Objects clearing in which a thread could still ↵Fernando Sahmkow
be signalled after a timeout or a cancel.
2019-10-15Scheduler: Add protections for Yield bombingFernando Sahmkow
In case of redundant yields, the scheduler will now idle the core for it's timeslice, in order to avoid continuously yielding the same thing over and over.
2019-10-15Kernel: Style and CorrectionsFernando Sahmkow
2019-10-15Addapt thread class to the new SchedulerFernando Sahmkow
2019-07-03kernel/process: Decouple TLS handling from threadsLioncash
Extracts out all of the thread local storage management from thread instances themselves and makes the owning process handle the management of the memory. This brings the memory management slightly more in line with how the kernel handles these allocations. Furthermore, this also makes the TLS page management a little more readable compared to the lingering implementation that was carried over from Citra.
2019-06-16Core_Timing: Make core_timing threadsafe by default.Fernando Sahmkow
The old implementation had faulty Threadsafe methods where events could be missing. This implementation unifies unsafe/safe methods and makes core timing thread safe overall.
2019-06-04core/core_timing_util: Use std::chrono types for specifying time unitsLioncash
Makes the interface more type-safe and consistent in terms of return values.
2019-04-17kernel/thread: Unify wait synchronization typesLioncash
This is a holdover from Citra, where the 3DS has both WaitSynchronization1 and WaitSynchronizationN. The switch only has one form of wait synchronizing (literally WaitSynchonization). This allows us to throw out code that doesn't apply at all to the Switch kernel. Because of this unnecessary dichotomy within the wait synchronization utilities, we were also neglecting to properly handle waiting on multiple objects. While we're at it, we can also scrub out any lingering references to WaitSynchronization1/WaitSynchronizationN in comments, and change them to WaitSynchronization (or remove them if the mention no longer applies).
2019-04-17kernel/svc: Migrate svcCancelSynchronization behavior to a thread functionLioncash
The actual behavior of this function is slightly more complex than what we're currently doing within the supervisor call. To avoid dumping most of this behavior in the supervisor call itself, we can migrate this to another function.
2019-04-15kernel/thread: Remove BoostPriority()Lioncash
This is a holdover from Citra that currently remains unused, so it can be removed from the Thread interface.
2019-04-03Merge pull request #2314 from lioncash/constbunnei
kernel/thread: Minor interface cleanup
2019-04-02kernel/svc: Implement svcGetThreadListLioncash
Similarly like svcGetProcessList, this retrieves the list of threads from the current process. In the kernel itself, a process instance maintains a list of threads, which are used within this function. Threads are registered to a process' thread list at thread initialization, and unregistered from the list upon thread destruction (if said thread has a non-null owning process). We assert on the debug event case, as we currently don't implement kernel debug objects.
2019-04-01kernel/thread: Make AllWaitObjectsReady() a const qualified member functionLioncash
Now that ShouldWait() is a const qualified member function, this one can be made const qualified as well, since it can handle passing a const qualified this pointer to ShouldWait().
2019-04-01kernel/wait_object: Make ShouldWait() take thread members by pointer-to-constLioncash
Given this is intended as a querying function, it doesn't make sense to allow the implementer to modify the state of the given thread.
2019-04-01kernel/thread: Avoid sign conversion within GetCommandBufferAddress()Lioncash
Previously this was performing a u64 + int sign conversion. When dealing with addresses, we should generally be keeping the arithmetic in the same signedness type. This also gets rid of the static lifetime of the constant, as there's no need to make a trivial type like this potentially live for the entire duration of the program.
2019-04-01kernel/thread: Make parameter of GetWaitObjectIndex() const qualifiedLioncash
The pointed to member is never actually modified, so it can be made const.
2019-03-30kernel/scheduler: Remove unused parameter to AddThread()Lioncash
This was made unused in b404fcdf1443b91ac9994c05ad1fe039fcd9675e, but the parameter itself wasn't removed.
2019-03-28Merge pull request #2266 from FernandoS27/arbitrationbunnei
Kernel: Fixes to Arbitration and SignalProcessWideKey Management
2019-03-19Fix crash caused by 2238.Fernando Sahmkow
2019-03-19Add CondVar Thread State.Fernando Sahmkow
2019-03-17Merge pull request #2238 from lioncash/threadbunnei
kernel/thread: Amend conditional test and assignment within UpdatePriority()
2019-03-16kernel/thread: Actually remove the definition of ExitCurrentThread()Lioncash
This was intended to be removed in 51d7f6bffcc0498a47abc7de27bf0906fc523dae, but I guess I forgot to actually save the file like a dingus.
2019-03-15kernel/thread: Migrate WaitCurrentThread_Sleep into the Thread interfaceLioncash
Rather than make a global accessor for this sort of thing. We can make it a part of the thread interface itself. This allows getting rid of a hidden global accessor in the kernel code.
2019-03-15kernel/thread: Expand documentation of nominal_priority and current_priorityLioncash
Aims to disambiguate why each priority instance exists a little bit. While we're at it, also add an explanatory comment to UpdatePriority().
2019-03-15kernel/thread: Make bracing consistent within UpdatePriority()Lioncash
2019-03-15kernel/thread: Amend condition within UpdatePriority()Lioncash
This condition was checking against the nominal thread priority, whereas the kernel itself checks against the current priority instead. We were also assigning the nominal priority, when we should be assigning current_priority, which takes priority inheritance into account. This can lead to the incorrect priority being assigned to a thread. Given we recursively update the relevant threads, we don't need to go through the whole mutex waiter list. This matches what the kernel does as well (only accessing the first entry within the waiting list).
2019-03-15kernel/thread: Maintain priority ordering of added mutex waiting threadsLioncash
The kernel keeps the internal waiting list ordered by priority. This is trivial to do with std::find_if followed by an insertion.