Commit Graph

57 Commits

Author SHA1 Message Date
Joel Linn
7e894d10a7 [kernel] Correct status for looked up objects
- The guest will check for 0x40000000 and replace it with
  0xb7 (ERROR_ALREADY_EXISTS), which is the correct return value.
  For example, see:
  https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createmutexa
2022-03-08 12:17:57 -06:00
Joel Linn
91f4954967 [kernel] Refactor uses of attribute names 2022-03-08 12:17:57 -06:00
Joel Linn
986dcf4f65 [Base] Check success of sync primitive creation
- Mainly use `assert`s, since failure is very rare
- Forward failure of `CreateSemaphore` to guests because it is more easy
  to trigger with invalid initial parameters.
2022-03-08 12:17:57 -06:00
gibbed
12ec728989 [Kernel] Use tables for export groups. 2022-01-09 14:16:37 -06:00
gibbed
3ad0a7dab2 [Kernel] Suffix export functions with _entry. 2022-01-09 12:17:03 -06:00
gibbed
600c14b3f0 [xboxknrl] Implement ExTryToAcquireRWLShared.
[xboxknrl] Implement ExTryToAcquireReadWriteLockShared.
2022-01-07 10:22:48 -06:00
gibbed
1f9c434b5e [xboxkrnl] Implement ExAcquireRWLShared.
[xboxkrnl] Implement ExAcquireReadWriteLockShared.
2022-01-07 10:22:48 -06:00
gibbed
3162a6435c [xboxkrnl] Implement ExTryToAcquireRWLExclusive.
[xboxkrnl] Implement ExTryToAcquireReadWriteLockExclusive.
2022-01-07 10:22:48 -06:00
gibbed
e795337071 [xboxkrnl] ExReleaseReadWriteLock fixes.
[xboxkrnl] ExReleaseReadWriteLock fixes:
- Don't unncessarily double-load lock members.
- Reset readers entry count when lock count becomes negative.
- Properly decrease writers waiting count when writer event fired.
2022-01-07 10:22:48 -06:00
gibbed
b4f35635c5 [xboxkrnl] ExAcquireReadWriteLockExclusive fixes.
[xboxkrnl] ExAcquireReadWriteLockExclusive fixes:
- Don't unnecessarily double-load lock count.
- Don't release spin lock before we're done with the lock.
2022-01-07 10:22:48 -06:00
emoose
052ce3d389 [Kernel] Make KeEnter/LeaveCriticalRegion only affect the caller thread
Adds a new X_KTHREAD::apc_disable_count field at 0xB0 into X_KTHREAD based on where 360 kernel seems to store it, and made CriticalRegion funcs act on that, instead of locking things between all threads, and changes DeliverAPCs to check that field before running the APCs.

XThread::LockApc/UnlockApc were also updated too as those previously called into EnterCrit/LeaveCrit to work, but AFAIK the code that uses LockApc/UnlockApc does have an actual need for locking between threads, so changed them to work on XThread::global_critical_region_ directly instead.
2021-06-25 23:11:14 -05:00
gibbed
1513dd235b [Kernel] Code reentrance for guest fibers.
[Kernel] Code reentrance using exceptions for guest fibers.
2020-12-05 14:17:33 -06:00
gibbed
164aa8e8ca [Kernel] Scope object type enum. 2020-11-22 20:34:07 -06:00
Triang3l
a319617185 [Kernel] Thread affinity cleanup 2020-11-14 18:09:47 +03:00
Gliniak
2dc6b0b2ad [Kernel/Thread] Added missing paramteter to KeSetAffinityThread 2020-11-14 17:48:30 +03:00
Gliniak
ab2b9393c2 [Kernel] Implemented NtQueueApcThread 2020-07-12 08:56:15 -05:00
gibbed
a48bb71c2f Overhaul logging. 2020-04-07 16:09:41 -05:00
Silent
05ef022fd7 [Kernel] Do not retain handle in ExCreateThread
Closing the thread handle should delete the thread object
if it's finished. When this handle was retained, closing the handle
left a lingering handle reference and thus this XThread would leak
2019-11-30 20:08:30 -06:00
Triang3l
2507f1a819 [Memory] TranslateVirtual in shim and strings 2019-08-14 10:31:11 +03:00
gibbed
7d6d732999 [Kernel] Of course I forget to commit another local change. 2019-08-04 11:44:18 -05:00
gibbed
1ebf7bb484 [Kernel] Implement KeTryToAcquireSpinLockAtRaisedIrql. Maybe correctly. 2019-08-04 11:36:49 -05:00
gibbed
64b2be92d6 [Kernel] Retain handle in ExCreateThread. Game closing a created thread's handle shouldn't result in its handle being freed. 2018-12-03 12:09:24 -06:00
gibbed
dcde6308bb [Kernel] Simplify KeWaitForMultipleObjects. 2018-12-03 12:08:22 -06:00
gibbed
bd45a5defd [Kernel] Fix timeout in NtWaitForMultipleObjectsEx. 2018-11-25 11:06:57 -06:00
gibbed
4dfe83af6c [Kernel] Fix threading issues caused by direct use of exports. 2018-11-25 05:08:16 -06:00
gibbed
3baf668055 [Kernel] Implement ExAcquireReadWriteLockExclusive, ExReleaseReadWriteLock. 2018-11-24 19:04:42 -06:00
Margen67
896ac4a682 Update documentation.
- Convert http to https, provide archive link when possible.
- Made CPU-JIT.png more readable on dark themes;
Added a white background so there isn't black text on a black
background.
2018-11-22 09:20:09 -06:00
gibbed
683de76b9b [Kernel] Remove stray logging in NtReleaseMutant. 2018-11-21 18:07:46 -06:00
gibbed
7ae0e2b8e5 [Kernel] Fix Travis whining. 2018-11-20 16:05:45 -06:00
gibbed
5b776b99da [Kernel] Move xboxkrnl_threading to new shim convention. 2018-11-20 15:49:06 -06:00
gibbed
394105d359 [CPU/Kernel] Cleanup and rework of how kernel exports are declared. 2018-11-20 13:03:17 -06:00
Dr. Chat
dcca5f587e [Kernel] ExInitializeReadWriteLock 2018-05-07 18:46:15 -05:00
Dr. Chat
10c8413acf [Kernel] Flag a few frequently-used functions as kHighFrequency 2018-05-05 18:44:08 -05:00
Svyatoslav
2f1cf1452d xboxkrnl_threading.cc: PVS-Studio: fixed return value. 2017-06-27 12:16:29 +03:00
Dr. Chat
c538671c24 Kernel: Wrap new objects in object_ref to avoid a memory leak! 2017-02-03 20:57:08 -06:00
Dr. Chat
bd6bf16bd1 New flag: disable_global_lock - Disables global lock usage in guest code. 2016-01-13 19:40:00 -06:00
Ben Vanik
c8b544ffd4 Fixing casts. This is why I need tests. 2016-01-01 12:45:06 -08:00
Ben Vanik
b02ca62388 Fixing most remaining C++ warnings in clang. 2016-01-01 18:37:33 +00:00
Dr. Chat
764dcba75a Update TLS comments 2015-12-29 13:10:01 -08:00
Dr. Chat
eee0bb070c Store thread TLS in guest memory rather than using host APIs 2015-12-29 13:09:58 -08:00
Dr. Chat
4cbe219476 Don't update the dispatch header in KetSetEvent/KeResetEvent (threading issues) 2015-12-29 13:09:46 -08:00
Dr. Chat
b8d4f26e46 Fix NtWaitForMultipleObjectsEx definition 2015-12-29 12:32:49 -08:00
Dr. Chat
87cdce1440 Export kBlocking tag 2015-12-29 12:32:48 -08:00
Ben Vanik
b9326be93c Merge pull request #447 from DrChat/excreatethread_ptr_fix
Fix ExCreateThread returning a handle when game requests a pointer
2015-11-03 20:01:12 -08:00
Dr. Chat
b628577855 Implemented KeSetCurrentStackPointers 2015-11-01 21:56:40 -06:00
Dr. Chat
cee0e582c2 Remove workarounds for handles passed into Ke* functions. 2015-10-31 10:31:35 -05:00
Dr. Chat
4d22c21688 ExCreateThread: Flag 0x80 indicates we should return the thread pointer, not handle. 2015-10-31 10:28:53 -05:00
Dr. Chat
c33e95981b Formatting. 2015-09-25 18:46:50 -05:00
Dr. Chat
71818a3129 Convert NtCreateEvent to new format 2015-09-25 18:39:14 -05:00
Ben Vanik
e5fbf840d2 Shuffling kernel/. 2015-09-06 18:07:52 -07:00