Commit graph

4104 commits

Author SHA1 Message Date
Eladash
07f0ba213e SPU: Allow special channel storage in channel busy waiting period
Move code to SPUThread.cpp.
2022-09-07 20:42:23 +03:00
Eladash
48382564d1 SPU: Implement "quintuple" Inbound MBOX storage 2022-09-07 20:42:23 +03:00
Nekotekina
5985f0eefa BufferUtils: cleanup regarding ARM64 2022-09-07 17:59:07 +03:00
sguo35
a0d48c588a spu/arm64: clean up assembly code generation
Clean up asmjit usage so we don't unnecessarily allocate memory
anymore for SPURecompiler functions.
2022-09-07 17:33:01 +03:00
Eladash
5e2424da58 IdManager.cpp: Fix cellFs IDs 2022-09-07 17:05:51 +03:00
Eladash
72a6696f5c cellGame Fix PS3 disc insert 2022-09-07 17:05:51 +03:00
Eladash
89e0dcba5e cellVdec: Adjust for reservations 2022-09-07 16:05:56 +03:00
Eladash
7698064f5a SPU: Untangle VM lock to avoid deadlocks 2022-09-07 16:05:56 +03:00
Elad Ashkenazi
290226539f
Fix ARM build (#12606) 2022-09-04 21:11:04 +03:00
brian218
75efc79930 Implemented sys_game_board_storage_read() 2022-09-04 13:28:05 +03:00
Nick Renieris
905496e926 PPU: Fix STVLX
Fixes Sly 2 and Sly 3 crash on boot (RSX desync).
2022-09-04 12:27:29 +03:00
Elad Ashkenazi
e0a648240f Unlog sceNpUtilCmpNpId 2022-09-02 08:29:09 +02:00
Eladash
7bad8f3348 Savestates/SPU: Minor fixup after fb01ed55 2022-09-01 20:09:28 +03:00
Eladash
ee1384341e rsx: Implement atomic vertex upload (with Strict Rendering Mode) 2022-09-01 20:09:28 +03:00
Eladash
fb01ed55e5 SPU: Fix potential deadlock in event queue syscalls 2022-09-01 19:03:38 +03:00
Eladash
3f02935844 Add some debugging information 2022-08-30 08:57:33 +02:00
RipleyTom
f98251a05a Fixes -w leaking 2022-08-30 07:46:42 +02:00
Nekotekina
e28707055b Implement simd_builder for x86
ASMJIT-based tool for building vectorized loops (such as ones in BufferUtils.cpp)
2022-08-28 18:38:52 +03:00
brian218
698c3415ea Fixed SIG: Thread terminated due to fatal error: Failed to read hex string: invalid argument
Fixed the error which occurred when a game attempted to read the VID/PID of an undefined VFS USB device:

SIG: Thread terminated due to fatal error: Failed to read hex string: invalid argument
(in file C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\rpcs3\Emu\Cell\lv2\sys_fs.cpp:1942[:25], in function sys_fs_fcntl)
2022-08-26 08:45:14 +02:00
Eladash
c7586de280 Savestates/sys_fs: Fix saving encrypted and split-files file descriptors 2022-08-25 23:54:56 +03:00
Eladash
506b9deec5 Savestates/SPU LLVM: Improve saving performance 2022-08-25 23:54:56 +03:00
Eladash
a71bdc761e SPU/Debugger: Improve debugging reservations
Simplify and make the debugging results more consistent.
2022-08-22 18:24:26 +03:00
Eladash
9d8f4d5cfa Bugfix after #12523 2022-08-22 18:24:26 +03:00
Eladash
ee87fdc869 Fix GETLLAR spin detection 2022-08-22 08:33:22 +03:00
Eladash
bf63a18c5f SPU Add ability to specify percentage of busy waiting 2022-08-21 15:02:01 +03:00
Eladash
ddba30988b vm: Attempt to not remove cpu_flag::wait flag during access violation 2022-08-21 15:02:01 +03:00
Eladash
b0e2c959eb SPU: Disable notification if no changes were made in PUTLLC 2022-08-21 15:02:01 +03:00
Eladash
28bec8e1bf SPU: Implement custom reservation condition in atomic wait 2022-08-21 15:02:01 +03:00
Eladash
86702186f2 PPU: Detect lwmutex reservation pattern and optimize it 2022-08-21 15:02:01 +03:00
Eladash
82b1a2bd7a SPU: add the concept of inaccurate reservations
Implement cellSpursRequestIdleSpu
2022-08-21 15:02:01 +03:00
Eladash
d36cf71a2d Savestates: Fix PPU analysis when patches are applied 2022-08-21 15:02:01 +03:00
Eladash
1dd1062be1 PPU LLVM: Fix HLE function injection 2022-08-21 15:02:01 +03:00
Eladash
c0e3b86064 SPU: Optimize spu_thread::get_events() 2022-08-21 15:02:01 +03:00
Eladash
6210a8491f SPU: Optimize and enable SPU GETLLAR Polling detection by default
* Make this setting guard all reservation waitings. (renamed)
* Revert atomic list usage: it's more expensive and not needed because it has a timeout and is not optimized for the rest of the waitables.
2022-08-21 15:02:01 +03:00
Eladash
33a4f05ffa SPU: Interleave loads/stores in reservation access utilities 2022-08-21 15:02:01 +03:00
Eladash
a3007e11ca SPU: Fix minor race in sys_spu_thread_receive_event
Check final cpu_state::state value for suspend state because that's the variable the thread waits on.
2022-08-12 15:20:48 +03:00
Eladash
7ff4509858 sys_lwcond: Fix a loose notification in cond wait 2022-08-11 12:44:40 +03:00
Eladash
f2997e4c00 LV2: Fix the most annoying race ever
Timeline of the race:
1. The PPU is in SLEEP state. state = suspend.
2. lv2_obj::awake is called on the traced thread and is now in ONPROC state, state = signal.
3. lv2_obj::awake is called by another thread externally with a priority higher than our traced thread and appends it to g_pending. state = suspend + signal.
4. lv2_obj::sleep/set_priority (higering priority) is called on any thread which is in ONPROC. Causing it to enter SLEEP or RUNNING state, while the traced thread is back in queue in ONPROC. state = suspend + signal.
5. The traced thread finally calls lv2_obj::awake on itself, g_pending decrements to 0 and we a have a rescheduling event, after XOR state = 0!!! (no signal)
6. In check_state: cpu_sleep_called is now true and remains this way.
7. Another thread with a higher prioty kicks in and appends the traced thread into g_pending. state = suspend.
8. The traced thread is at cpu_thread::cpu_wait(), and that's where it's gonna spend the rest of its life.
2022-08-11 12:44:40 +03:00
Eladash
683c1a6512 LV2: Optimize sys_ppu_thread a bit 2022-08-11 11:42:16 +03:00
Eladash
9b0d33048c Savestates/LV2: Fix race on _sys_lwcond_queue_wait saving
cpu_flag::again modification requires exclusive access.
2022-08-11 11:42:16 +03:00
Eladash
bc8bf2c329 sys_cond/lwcond: Fix waiting time in the debugger for mutex lock 2022-08-11 11:42:16 +03:00
Elad Ashkenazi
f0002501f7 sys_mutex/lwmutex: Regression fixes after #12378 2022-08-11 11:42:16 +03:00
Elad Ashkenazi
c4cc0154be LV2: Optimizations and fixes
Fix and optimize sys_ppu_thread_yield

Fix LV2 syscalls with timeout bug. (use ppu_thread::cancel_sleep instead)

Move timeout notification out of mutex scope

Allow g_waiting timeouts to be awaked in scope
2022-08-11 11:42:16 +03:00
Eladash
26e731b487 LV2: Re-add dropped optimization by previous commit
Currently only for lock-free syscalls.
2022-08-07 20:23:54 +03:00
Eladash
34bae90820 LV2: Move nearly all notifications out of all mutex scopes including IDM 2022-08-07 20:23:54 +03:00
Eladash
011aabe9ed LV2: Make sys_mutex and sys_lwmutex lock-free, add some busy waiting in sys_mutex_lock 2022-08-07 20:23:54 +03:00
Eladash
a17a6527f6 LV2: Move memory unlocking outside of mutex ownership and make it conditional 2022-08-07 20:23:54 +03:00
Eladash
122c6256ca A fix of _spurs::add_workload 2022-08-07 20:23:54 +03:00
Eladash
73aaff1b29 LV2: allocation-free synchronization syscalls
* Show waiters' ID in kernel explorer.
* Remove deque dependency from sys_sync.h
2022-08-07 20:23:54 +03:00
Eladash
c7fbc16357 SPU: Postpone notifications to afterward group mutex ownership 2022-08-07 20:23:54 +03:00