bunnei
f499c8177e
core: hle: kernel: KThread: Integrate with KWorkerTask and implement DoWorkerTaskImpl.
...
- This is used to terminate a thread asynchronously after it has been exited.
- This fixes a crash that can occur in Pokemon Sword/Shield because a thread is incorrectly closed on svcExitThread, then, the thread is destroyed on svcCloseHandle while it is still scheduled.
- Instead, we now wait for the thread to no longer be scheduled on all cores before destroying it from KWorkerTaskManager, which is accurate to HOS behavior.
2022-01-14 16:44:14 -08:00
bunnei
d8b3f665db
core: hle: kernel: KProcess: Integrate with KWorkerTask and add unimplemented DoWorkerTaskImpl.
2022-01-14 16:44:14 -08:00
bunnei
03884b7ea6
core: hle: kernel: KThread: Replace Suspend with UpdateState & various updates.
...
- This makes our implementations of these more closely match HOS.
2022-01-14 16:44:14 -08:00
bunnei
c905044e1b
core: hle: kernel: Instantiate a kernel instance of KWorkerTaskManager.
2022-01-14 16:44:14 -08:00
bunnei
bf32fcc817
core: hle: kernel: Add KWorkerTask and KWorkerTaskManager.
...
- These primitives are used to dispatch asynchronous kernel tasks from KThread and KProcess.
2022-01-14 16:43:59 -08:00
bunnei
cc112f971e
hle: kernel: Fix service_threads access to be thread safe V2.
...
- PR #7699 attempted to fix CreateServiceThread and ReleaseServiceThread to be thread safe, but inadvertently introduced a possible dead-lock.
- With this PR, we use a worker thread to manage the service thread list, allowing it only to be accessed by a single thread, and guaranteeing threads will not destroy themselves.
- Fixes a rare crash in Pokemon Sword/Shield, I've now run this game for ~12 hours non-stop and am quite confident this is a good solution for this issue.
2022-01-14 16:02:57 -08:00
Mai M
b2d45a4072
Merge pull request #7699 from bunnei/fix-service-thread-race
...
hle: kernel: Fix service_threads access to be thread safe.
2022-01-14 00:46:16 -05:00
bunnei
2147240e47
hle: kernel: Fix service_threads access to be thread safe.
...
- CreateServiceThread and ReleaseServiceThread can be accessed by different threads, uses a lock to make this thread safe.
- Fixes a rare crash in Pokemon Sword/Shield that can occur when a new service thread is being created while an old one is being destroyed.
2022-01-13 21:26:10 -08:00
bunnei
49a0e4330e
hle: kernel: k_page_table: Update SetProcessMemoryPermission.
2022-01-11 16:28:11 -08:00
bunnei
6123b6ea45
hle: kernel: k_page_table: ReadAndWrite -> UserReadWrite.
2022-01-11 16:28:11 -08:00
bunnei
081669c334
hle: kernel: k_page_table: Rename *ProcessCodeMemory -> *CodeMemory.
2022-01-11 16:28:11 -08:00
bunnei
af4696657c
core: hle: kernel: svc: Updates to SetMemoryAttribute and SetMemoryPermission.
2022-01-08 12:18:14 -08:00
bunnei
b9a313057e
core: hle: kernel: k_page_table: Update CheckMemoryState.
2022-01-08 03:20:57 -08:00
bunnei
3a89723d97
core: hle: kernel: Implement thread pinning.
...
- We largely had the mechanics in place for thread pinning, this change hooks these up.
- Validated with tests https://github.com/Atmosphere-NX/Atmosphere/blob/master/tests/TestSvc/source/test_thread_pinning.cpp .
2021-12-30 15:50:45 -08:00
bunnei
091463a429
core: hle: kernel: Updated implementation of svcSetHeapSize.
...
- Updates our svcSetHeapSize with latest HOS, furthermore allowing heap size to properly be extended/shrunk.
- Validated with tests https://github.com/Atmosphere-NX/Atmosphere/blob/master/tests/TestSvc/source/test_set_heap_size.cpp .
2021-12-28 01:25:20 -08:00
bunnei
9a0648ff0a
Merge pull request #7621 from bunnei/set-mem-perm
...
core: hle: kernel: Implement SetMemoryPermission.
2021-12-27 23:33:11 -08:00
bunnei
4e7a6639d2
core: hle: kernel: Implement SetMemoryPermission.
...
- Not seen in any games yet, but validated with kernel tests.
2021-12-23 01:10:36 -08:00
bunnei
a0c7d93b84
core: hle: kernel: KThread: X18 should be a cryptographically random number.
...
- This was added with firmware 11.0.0 (https://switchbrew.org/wiki/11.0.0 ).
- X18 is OR'd by kernel with 1, to make sure it is odd.
2021-12-23 00:03:39 -08:00
bunnei
49e3c073a5
hle: kernel: svc: GetInfo: Fix error checking with IdleTickCount.
...
- Enforce tha the supplied handle is invalid, not valid.
- This gets Witcher 3 booting.
2021-12-21 22:41:23 -08:00
bunnei
ee6d40d414
Merge pull request #7597 from bunnei/remove-global-lock
...
core: hle: Remove global HLE lock.
2021-12-20 14:24:50 -08:00
ameerj
55650c5b75
kernel: Manually destroy the current process during shut down
...
Avoids a memory leak.
2021-12-19 01:38:25 -05:00
bunnei
c73841500a
core: hle: Remove global HLE lock.
...
- This was added early on as a hack to protect against some concurrency issues.
- It's not clear that this serves any purpose anymore, and if it does, individual components should be fixed rather than using a global recursive mutex.
2021-12-17 16:05:51 -08:00
Valeri
04301e1a8a
Remove erroneous #pragma once
2021-12-13 16:49:01 +03:00
bunnei
280c779898
Merge pull request #7462 from bunnei/kernel-improve-scheduling
...
Kernel: Improve threading & scheduling V3
2021-12-12 22:43:25 -08:00
itsmeft24
e05c86aa3c
Update k_code_memory.h
2021-12-07 16:58:23 -05:00
itsmeft24
d197246880
make KCodeMemory::GetSourceAddress const
...
Co-authored-by: Mai M. <mathew1800@gmail.com>
2021-12-07 07:58:33 -05:00
bunnei
257d3c9ecf
hle: kernel k_scheduler: EnableScheduling: Remove redundant GetCurrentThreadPointer calls.
2021-12-06 16:39:18 -08:00
bunnei
9a9e7dd78b
hle: kernel k_process: Remove unnecessary .at usage with thread pinning methods.
2021-12-06 16:39:18 -08:00
bunnei
834c25f4d9
hle: kernel: Remove unnecessary virtual specifier on NotifyAvailable.
2021-12-06 16:39:18 -08:00
bunnei
a63af9860b
hle: kernel: Remove unnecessary virtual specifier on EndWait.
2021-12-06 16:39:18 -08:00
bunnei
3f8eb44e7d
hle: kernel: k_light_condition_variable: Revert unnecessary license comment changes.
2021-12-06 16:39:18 -08:00
bunnei
2e8d737a96
hle: kernel: k_condition_variable: Revert unnecessary style changes.
2021-12-06 16:39:18 -08:00
bunnei
0d1bdfc1d4
hle: kernel: Remove unnecessary virtual specifier on CancelWait.
2021-12-06 16:39:18 -08:00
bunnei
d7f6d516ce
hle: kernel: service_thread: Force stop threads on destruction.
2021-12-06 16:39:18 -08:00
bunnei
e596fac6ee
hle: kernel: k_light_lock: Implement CancelWait.
...
- Fixes a crash in Megadimension Neptunia VII.
2021-12-06 16:39:18 -08:00
bunnei
efb5de1c5f
hle: kernel: service_thread: Use std::jthread.
...
- Fixes a potential deadlock on service thread shutdown.
2021-12-06 16:39:18 -08:00
bunnei
a2384a18fa
hle: kernel: k_thread: Skip reschedule on DisableDispatch with SC.
2021-12-06 16:39:18 -08:00
bunnei
42697527ba
hle: kernel: k_thread: Rename sleeping_queue -> wait_queue.
2021-12-06 16:39:18 -08:00
bunnei
e3d156ab0e
hle: kernel: svc: Fix deadlock that can occur with single core.
2021-12-06 16:39:18 -08:00
bunnei
0d9afdedc4
hle: kernel: k_thread: Treat dummy threads as a special type.
2021-12-06 16:39:18 -08:00
FernandoS27
894ed14ebc
hle: kernel: fix timing on thread preemption
2021-12-06 16:39:18 -08:00
FernandoS27
3c2a451f47
hle: kernel: fix scheduling ops from HLE host thread.
2021-12-06 16:39:17 -08:00
bunnei
abbea575cf
hle: kernel: Add a flag for indicating that the kernel is currently shutting down.
2021-12-06 16:39:17 -08:00
bunnei
2c49a65d2b
hle: kernel: KSynchronizationObject: Fix variable shadowing.
2021-12-06 16:39:17 -08:00
bunnei
8f4ff06c4c
hle: kernel: Cleanup to match coding style.
2021-12-06 16:39:17 -08:00
bunnei
316a2dd22a
hle: kernel: KProcess: Improvements for thread pinning.
2021-12-06 16:39:17 -08:00
bunnei
4c74761155
hle: kernel: KThreadQueue: Remove deprecated code.
2021-12-06 16:39:17 -08:00
bunnei
f3d6e31e78
hle: kernel: KConditionVariable: Various updates & simplifications.
2021-12-06 16:39:17 -08:00
bunnei
f62c7091a2
hle: kernel: KThread: Migrate to updated KThreadQueue (part 2).
2021-12-06 16:39:17 -08:00
bunnei
b0671c7cfa
hle: kernel: KThread: Migrate to updated KThreadQueue (part 1).
2021-12-06 16:39:17 -08:00
bunnei
beb55cb90e
hle: kernel: KConditionVariable: Migrate to updated KThreadQueue.
2021-12-06 16:39:17 -08:00
bunnei
e942d97540
hle: kernel: KServerSession: Migrate to updated KThreadQueue.
2021-12-06 16:39:17 -08:00
bunnei
5dff28290f
hle: kernel: KLightConditionVariable: Migrate to updated KThreadQueue.
2021-12-06 16:39:17 -08:00
bunnei
423acf53b7
hle: kernel: KLightLock: Migrate to updated KThreadQueue.
2021-12-06 16:39:17 -08:00
bunnei
15c721b909
hle: kernel: KAddressArbiter: Migrate to updated KThreadQueue.
2021-12-06 16:39:17 -08:00
bunnei
2f89456041
hle: kernel: KThread: Remove tracking of sync object from threads.
2021-12-06 16:39:17 -08:00
bunnei
bc1399204b
hle: kernel: Update KThreadQueue and migrate KSynchronizationObject.
2021-12-06 16:39:17 -08:00
bunnei
3dc803a430
core: hle: kernel: Disable dispatch count tracking on single core.
...
- This would have limited value, and would be a mess to handle properly.
2021-12-06 16:39:17 -08:00
bunnei
d14b8fc747
core: hle: kernel: k_thread: Mark KScopedDisableDispatch as nodiscard.
2021-12-06 16:39:17 -08:00
bunnei
07690572f7
core: hle: kernel: k_auto_object: Add GetName method.
...
- Useful purely for debugging.
2021-12-06 16:39:16 -08:00
bunnei
3239442de6
core: hle: kernel: DisableDispatch on suspend threads.
2021-12-06 16:39:16 -08:00
bunnei
284015dfd7
core: hle: kernel: k_scheduler: Improve DisableScheduling and EnableScheduling.
2021-12-06 16:39:16 -08:00
bunnei
178584e56f
core: hle: kernel: Use CurrentPhysicalCoreIndex as appropriate.
2021-12-06 16:39:16 -08:00
bunnei
629f9274ac
core: hle: kernel: k_scheduler: Remove unnecessary MakeCurrentProcess.
2021-12-06 16:39:16 -08:00
bunnei
13c82d042f
core: hle: kernel: k_scheduler: Improve ScheduleImpl.
2021-12-06 16:39:16 -08:00
bunnei
f412d2027a
core: hle: kernel: k_scheduler: Improve Unload.
2021-12-06 16:39:16 -08:00
bunnei
f13fce3953
core: hle: kernel: k_process: DisableDispatch on main thread.
2021-12-06 16:39:16 -08:00
bunnei
4c18a207a4
core: hle: kernel: k_handle_table: Use KScopedDisableDispatch as necessary.
2021-12-06 16:39:16 -08:00
bunnei
04daefa488
core: hle: kernel: k_thread: Add KScopedDisableDispatch.
2021-12-06 16:39:16 -08:00
bunnei
3bd5d4b6f8
core: hle: kernel: Ensure idle threads are closed before destroying scheduler.
2021-12-06 16:39:16 -08:00
bunnei
669a2d2c67
core: hle: kernel: Reflect non-emulated threads as core 3.
2021-12-06 16:39:16 -08:00
itsmeft24
8ed2748820
fix formatting
2021-12-06 11:02:33 -05:00
itsmeft24
e10903cab9
move private members below public members
2021-12-06 10:37:13 -05:00
itsmeft24
4bdacdedc1
fix formatting
2021-12-06 10:37:09 -05:00
itsmeft24
32854a2992
fix formatting
...
Co-authored-by: Mai M. <mathew1800@gmail.com>
2021-12-06 07:58:28 -05:00
itsmeft24
14c03b9748
fix formatting
2021-12-05 19:00:29 -05:00
itsmeft24
8254f238b9
Remove unnecessary includes
2021-12-05 18:49:40 -05:00
itsmeft24
b7d80c127f
Add copyright notice
2021-12-05 16:49:52 -05:00
itsmeft24
8aef8f39d8
kernel: svc: Implement Map/UnmapProcessMemory and Create/ControlCodeMemory
...
Used by Skyline modding framework
2021-12-05 15:04:08 -05:00
bunnei
daecbd3a7f
Merge pull request #7394 from Morph1984/svc-SetMemoryPermission
...
kernel: svc: Implement SetProcessMemoryPermission
2021-11-22 14:06:09 -08:00
Morph
5cf93c1346
kernel: svc: Move all IsValid functions to an anonymous namespace
2021-11-20 22:49:13 -05:00
Morph
2726d705f8
kernel: svc: Implement SetProcessMemoryPermission
...
- Used by Skyline modding framework
2021-11-20 22:18:56 -05:00
Morph
281437c811
kernel: KPageTable: Rename SetCodeMemoryPermission to SetProcessMemoryPermission
2021-11-20 22:18:56 -05:00
Adam Heinermann
d8a783a368
Fix crash on exit due to static scoped dummy threads
2021-11-17 15:29:25 -08:00
Morph
64275dfbf4
general: Rename GetTitleID to GetProgramID
2021-11-04 16:57:16 -04:00
ameerj
b275f2e475
core: Fix transitive include build errors
2021-11-03 21:42:58 -04:00
ameerj
7c4b6aab2e
core: Remove unused includes
2021-11-03 21:42:57 -04:00
Morph
b871388a31
svc: Correct WaitSynchronization num_handles param type
...
num_handles is a s32
2021-11-02 22:31:04 -04:00
Morph
cb09ea0f01
general: Remove MakeResult helpers
...
This is made obsolete by the presence of implicit constructors.
2021-11-02 17:23:19 -04:00
bunnei
b118fa8698
Merge pull request #7227 from vonchenplus/fix_memory_leak_v2
...
Fix memory leak v2
2021-11-01 20:11:30 -07:00
Feng Chen
dd29285e35
Fix dangling kernel objects when exiting
2021-10-27 09:06:30 +08:00
Feng Chen
052017e189
Revert PR7009
2021-10-27 09:06:30 +08:00
Feng Chen
a8b0104923
Fix memory leak
2021-10-27 09:06:22 +08:00
Morph
63ed7d9af7
Merge pull request #7193 from FernandoS27/idle
...
SVC: Implement svcInfo:IdleTickCount
2021-10-25 09:17:49 -04:00
Fernando Sahmkow
da6673e79a
SVC: Implement svcInfo:IdleTickCount
...
Used by the Witcher 3
2021-10-16 20:33:44 +02:00
Morph
50384e2619
KPageTable: Perform ranged invalidation when unmapping code memory
...
Co-Authored-By: Fernando S. <1731197+FernandoS27@users.noreply.github.com>
2021-10-13 14:27:11 -04:00
Morph
bea7824bd1
kernel: hle_ipc: Foward declare KAutoObject
2021-10-07 13:32:36 -04:00
bunnei
5b2fa8dd41
Merge pull request #7115 from ameerj/log-compile
...
common/logging: Reduce dependent header include overhead
2021-10-05 10:05:46 -07:00
Ameer J
01f79d638f
Merge pull request #7091 from vonchenplus/fix_memroy_leak
...
core: Fix memory leak
2021-10-04 00:09:08 -04:00
ameerj
5daf3abe65
common/logging: Move Log::Entry declaration to a separate header
...
This reduces the load of requiring to include std::chrono in all files which include log.h
2021-10-01 20:48:49 -04:00