0197e28cc9
core_timing: Namespace all functions and constants in core_timing's header
...
All of these variables and functions are related to timings and should be within the namespace.
2018-04-30 03:32:59 -04:00
8475496630
general: Convert assertion macros over to be fmt-compatible
2018-04-27 10:04:02 -04:00
40dee76c57
kernel: Migrate logging macros to fmt-compatible ones
2018-04-25 20:32:09 -04:00
46572d027d
Kernel: Implemented mutex priority inheritance.
...
Verified with a hwtest and implemented based on reverse engineering.
Thread A's priority will get bumped to the highest priority among all the threads that are waiting for a mutex that A holds.
Once A releases the mutex and ownership is transferred to B, A's priority will return to normal and B's priority will be bumped.
2018-04-23 11:23:44 -05:00
be155f4d9d
Kernel: Remove unused ConditionVariable class.
2018-04-20 21:04:33 -05:00
5fdfbfe25a
Kernel: Remove old and unused Mutex code.
2018-04-20 21:04:32 -05:00
e81a2080eb
Kernel: Corrected the implementation of svcArbitrateLock and svcArbitrateUnlock.
...
Switch mutexes are no longer kernel objects, they are managed in userland and only use the kernel to handle the contention case.
Mutex addresses store a special flag value (0x40000000) to notify the guest code that there are still some threads waiting for the mutex to be released. This flag is updated when a thread calls ArbitrateUnlock.
TODO:
* Fix svcWaitProcessWideKey
* Fix svcSignalProcessWideKey
* Remove the Mutex class.
2018-04-20 21:04:25 -05:00
b27ab46bde
memory: Fix stack region.
2018-03-31 16:06:45 -04:00
e353b9fb3d
thread: Add THREADSTATUS_WAIT_HLE_EVENT, remove THREADSTATUS_WAIT_ARB.
2018-03-18 20:56:32 -04:00
8581404482
kernel: Move stack region outside of application heap.
2018-03-16 18:32:23 -04:00
8be7131033
MemoryState: Add additional memory states and improve naming.
2018-03-16 18:32:21 -04:00
7d6653268f
core: Move process creation out of global state.
2018-03-14 18:42:19 -04:00
c74af07c49
thread: Clear the process list on shutdown.
2018-02-27 17:13:39 +01:00
ac81c02ed9
kernel: Use Scheduler class for threading.
2018-02-18 15:17:16 -05:00
cec0d4f191
kernel: Remove unused address_arbiter code.
2018-02-18 14:46:11 -05:00
94ee8fc97b
Kernel/IPC: Add a small delay after each SyncRequest to prevent thread starvation.
...
Ported from citra PR #3091
The delay specified here is from a Nintendo 3DS, and should be measured in a Nintendo Switch.
This change is enough to prevent Puyo Puyo Tetris's main thread starvation.
2018-02-18 13:25:48 -05:00
c1146d2a5f
thread: Silence formatting specifier warnings
2018-02-14 01:50:14 -05:00
2a3f8e8484
Kernel: Allow chaining WaitSynchronization calls inside a wakeup callback.
2018-01-08 21:12:49 -05:00
82151d407d
CoreTiming: Reworked CoreTiming (cherry-picked from Citra #3119 )
...
* CoreTiming: New CoreTiming; Add Test for CoreTiming
2018-01-08 19:10:25 -05:00
b172f0d770
arm: Remove SkyEye/Dyncom code that is ARMv6-only.
2018-01-02 22:24:12 -05:00
1cb978eb82
thread: Keep track of the initially created handle.
...
This is kinda crufty, but we need it for now to update guest state variables.
2017-12-31 17:23:36 -05:00
b6087e35b5
thread: Main thread should set thread handle to reg 1.
2017-12-30 12:10:58 -05:00
7ccd8de863
thread: Remove THUMB mode flag.
2017-12-30 12:08:26 -05:00
eed4f2e229
thread: Main thread should be ready by default, all others dormant.
2017-12-30 12:05:10 -05:00
ebd4b1422d
kernel: Various 64-bit fixes in memory/process/thread
2017-12-29 13:27:58 -05:00
34571f4d2e
hle: Use Switch formatted result codes.
2017-10-31 19:26:11 -04:00
dcd6bb82f7
hle: Fix QueryMemory response for MemoryInfo.
2017-10-19 23:00:46 -04:00
b1d5db1cf6
Merge remote-tracking branch 'upstream/master' into nx
...
# Conflicts:
# src/core/CMakeLists.txt
# src/core/arm/dynarmic/arm_dynarmic.cpp
# src/core/arm/dyncom/arm_dyncom.cpp
# src/core/hle/kernel/process.cpp
# src/core/hle/kernel/thread.cpp
# src/core/hle/kernel/thread.h
# src/core/hle/kernel/vm_manager.cpp
# src/core/loader/3dsx.cpp
# src/core/loader/elf.cpp
# src/core/loader/ncch.cpp
# src/core/memory.cpp
# src/core/memory.h
# src/core/memory_setup.h
2017-10-09 23:56:20 -04:00
23ce4f5afc
loader: Various improvements for NSO/NRO loaders.
2017-10-09 21:39:32 -04:00
30fabc41c6
Merge pull request #2971 from Subv/per_process_memops
...
Memory: Add overloads for ReadBlock and WriteBlock that operate on a specific process.
2017-10-01 14:44:06 -05:00
8217ed7acb
Kernel/Thread: Added a helper function to get a thread's command buffer VAddr.
2017-10-01 14:18:35 -05:00
c5ce5c06e4
kernel: Various threading fixes to support 64-bit addressing.
2017-09-30 14:28:54 -04:00
db752b52e8
Merge pull request #2967 from Subv/thread_wakeup_callbacks
...
Kernel/Threads: When putting a thread to wait, specify a function to execute when it is awoken
2017-09-30 09:12:18 -05:00
a13ab958cb
Fixed type conversion ambiguity
2017-09-30 09:34:35 +01:00
8432749db7
Kernel/Threads: When putting a thread to wait, specify a function to execute when it is awoken.
...
This change makes for a clearer (less confusing) path of execution in the scheduler, now the code to execute when a thread awakes is closer to the code that puts the thread to sleep (WaitSynch1, WaitSynchN). It also allows us to implement the special wake up behavior of ReplyAndReceive without hacking up WaitObject::WakeupAllWaitingThreads.
If savestates are desired in the future, we can change this implementation to one similar to the CoreTiming event system, where we first register the callback functions at startup and assign their identifiers to the Thread callback variable instead of directly assigning a lambda to the wake up callback variable.
2017-09-28 11:53:32 -05:00
3165466b66
Kernel/Thread: Allow specifying which process a thread belongs to when creating it.
...
Don't automatically assume that Thread::Create will only be called when the parent process is currently scheduled. This assumption will be broken when applets or system modules are loaded.
2017-09-26 17:40:49 -05:00
c02bbb7030
memory: Add GetCurrentPageTable/SetCurrentPageTable
...
Don't expose Memory::current_page_table as a global.
2017-09-24 22:42:42 +01:00
813837c5cf
Merge pull request #2842 from Subv/switchable_page_table
...
Kernel/Memory: Give each process its own page table and allow switching the current page table upon reschedule
2017-09-15 22:41:45 +02:00
b178089251
Kernel/Threads: Don't clear the CPU instruction cache when performing a context switch from an idle thread into a thread in the same process.
...
We were unnecessarily clearing the cache when going from Process A -> Idle -> Process A, this caused extreme performance regressions.
2017-09-15 14:26:15 -05:00
c34ec5e77c
Kernel/Memory: Switch the current page table when a new process is scheduled.
2017-09-10 15:14:31 -05:00
fa228ca637
Kernel/Threads: Don't immediately switch to the new main thread when loading a new process.
...
This is necessary for loading multiple processes at the same time.
The main thread will be automatically scheduled when necessary once the scheduler runs.
2017-08-21 20:54:29 -05:00
723dc644fa
ResultVal: Remove MoveFrom()
...
Replace it with std::move(result_val).Unwrap(), or Foo().Unwrap() in
case you already have an rvalue.
2017-06-18 19:03:15 -07:00
be031989ee
Kernel: Move HandleTable to a separate file
2017-05-29 17:34:39 -07:00
2cdb40d709
Kernel: Centralize error definitions in errors.h
2017-05-24 21:06:00 -07:00
1ddff14511
Threads: Check the process' resource limit for the max allowed priority when creating a thread and remove the priority clamping code.
2017-01-11 16:38:05 -05:00
f2f2572fed
Thread: Added priority range checking to svcSetThreadPriority and removed priority clamping code from Thread::SetPriority.
2017-01-11 16:38:04 -05:00
b5eac78b43
Merge pull request #2410 from Subv/sleepthread
...
Don't yield execution in SleepThread(0) if there are no available threads to run
2017-01-06 22:01:33 -05:00
1c792389e6
Merge pull request #2408 from Subv/priority_boosting
...
Kernel: Removed the priority boost code for starved threads.
2017-01-06 00:40:39 -05:00
fc2266130b
Kernel: Don't attempt to yield execution in SleepThread(0) if there are no available threads to run.
...
With this we avoid an useless temporary deschedule of the current thread.
2017-01-05 19:11:34 -05:00
5e2a8ebabf
Kernel: Remove some unused functions.
2017-01-05 13:17:06 -05:00