rpcsx/rpcs3/Emu/Cell
elad335 047f71b434 PPU/cellSpurs: MGS4: Fix cellSpursAddUrgentCommand race condition
cellSpursAddUrgentCommand searches in 4 slots for an empty slot to put the command at.
At first, it seems to do so unordered.

Meanwhile, on SPU side, it expects an order between all the commands because it pops them it in FIFO manner.
Not keeping track of how many commands are queued in total.

After second observation of cellSpursAddUrgentCommand, something odd comes takes places here.
Usually, reservation loops are individual and are expected to be closed without any changes of the previous loop affected by the proceeding one.
But in this case, after a single failure, the entire operayion is reset, a loop of 4 reservation operations suddenly is reset completely.

This makes one wonder if it the HW expects sometjing else here, perhaps it caches the reservation internally here?
After some adjustments to LDARX and STDCX to cache the reservation between succeeding loops, Metal Gear Solid 4 no longer freezes!
2025-03-28 19:56:54 +03:00
..
lv2 Fix p2p binding to vport 0 2025-03-23 06:08:09 +01:00
Modules cellMic: log ALCenum error string 2025-03-27 00:51:15 +01:00
Common.h fix some warnings 2023-12-30 19:07:35 +01:00
ErrorCodes.cpp move error_report to ErrorCodes.cpp 2025-01-06 15:49:09 +01:00
ErrorCodes.h use concepts instead of std::enable_if 2025-02-26 11:04:02 +02:00
MFC.cpp SPU/MFC: Format command more consistently 2023-07-27 02:50:01 +03:00
MFC.h SPU/MFC: Add block has to command history 2023-10-24 22:14:12 +03:00
PPCDisAsm.h PPU DisAsm: Fixup conditional indirect branches disasm 2024-03-20 12:48:31 +02:00
PPUAnalyser.cpp PPU Analyzer: Firmware/import caller analysis and KLIC finding pass 2025-02-27 12:32:21 +02:00
PPUAnalyser.h PPU Analyzer: Firmware/import caller analysis and KLIC finding pass 2025-02-27 12:32:21 +02:00
PPUCallback.h Fix HLE PPU callback stack arguments 2024-11-23 17:01:25 +02:00
PPUDisAsm.cpp PPU Analyzer: GPR-assisted jump table analysis 2025-02-07 20:27:17 +02:00
PPUDisAsm.h Initial Linux Aarch64 support 2022-01-15 06:48:04 +03:00
PPUFunction.cpp Savestates Support For PS3 Emulation (#10478) 2022-07-04 16:02:17 +03:00
PPUFunction.h More constexpr 2024-11-16 15:10:20 +01:00
PPUInterpreter.cpp PPU/cellSpurs: MGS4: Fix cellSpursAddUrgentCommand race condition 2025-03-28 19:56:54 +03:00
PPUInterpreter.h Initial Linux Aarch64 support 2022-01-15 06:48:04 +03:00
PPUModule.cpp PPU Analyzer: Firmware/import caller analysis and KLIC finding pass 2025-02-27 12:32:21 +02:00
PPUModule.h cellDmuxPamf: add module + stubs 2024-11-23 17:01:25 +02:00
PPUOpcodes.h PPU LLVM/RawSPU: Implement MMIO violation elimination pass 2023-07-06 19:46:36 +03:00
PPUThread.cpp PPU/cellSpurs: MGS4: Fix cellSpursAddUrgentCommand race condition 2025-03-28 19:56:54 +03:00
PPUThread.h PPU/cellSpurs: MGS4: Fix cellSpursAddUrgentCommand race condition 2025-03-28 19:56:54 +03:00
PPUTranslator.cpp Headers cleanup 2025-02-11 20:38:35 +01:00
PPUTranslator.h IDM: Implement lock-free smart pointers (#16403) 2024-12-22 20:59:48 +02:00
RawSPUThread.cpp Headers cleanup 2025-02-11 20:38:35 +01:00
RawSPUThread.h Headers cleanup 2025-02-11 20:38:35 +01:00
SPUAnalyser.cpp Initial Linux Aarch64 support 2022-01-15 06:48:04 +03:00
SPUAnalyser.h Headers cleanup 2025-02-11 20:38:35 +01:00
SPUASMJITRecompiler.cpp Headers cleanup 2025-02-11 20:38:35 +01:00
SPUASMJITRecompiler.h Initial Linux Aarch64 support 2022-01-15 06:48:04 +03:00
SPUCommonRecompiler.cpp SPU: Fixup 2025-03-08 14:21:57 +02:00
SPUDisAsm.cpp SPU/DisAsm: Fix constant propagation with non-GPR-writing instructions 2023-09-05 06:20:57 +03:00
SPUDisAsm.h SPU LLVM: Initial precompilation of tail-calls 2023-09-02 12:31:11 +03:00
SPUInterpreter.cpp Headers cleanup 2025-02-11 20:38:35 +01:00
SPUInterpreter.h Initial Linux Aarch64 support 2022-01-15 06:48:04 +03:00
SPULLVMRecompiler.cpp SPU LLVM: Dump some funcs 2025-03-28 19:56:54 +03:00
SPUOpcodes.h SPU LLVM Precompilation 2023-08-28 09:03:56 +03:00
SPURecompiler.h Fix std::basic_string warnings (#16261) 2024-11-11 21:54:44 +02:00
SPUThread.cpp SPU: Add Disable SPU GETLLAR Spin Optimization checkbox 2025-03-18 09:30:28 +02:00
SPUThread.h Headers cleanup 2025-02-11 20:38:35 +01:00
timers.hpp cellCrossControllerInitialize: add dialog 2022-07-13 19:12:46 +02:00