mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
Watchdog: seed the stall clock instead of bailing on it
poll_frame_stall_watchdog returned early when g_last_frame_time was zero, where the RSX-side check seeds it -- and seeding is what starts the clock. Since the whole reason the watchdog exists is an RSX thread too stuck to run that check, nothing ever seeded it: the value stayed zero and the watchdog bailed on every tick forever, blocked in exactly the scenario it was written for. Reproduced on Tales of Xillia 2: white screen held for nearly nine minutes, guest mutex traffic zero throughout, and not one dump.
This commit is contained in:
@@ -1450,8 +1450,17 @@ namespace rsx
|
||||
{
|
||||
const u64 now = get_system_time();
|
||||
|
||||
// SEED the timestamp, do not merely bail on it.
|
||||
//
|
||||
// The RSX-side check sets g_last_frame_time here, which is what starts its clock. This
|
||||
// half returned instead -- and since the case it exists for is an RSX thread too stuck to
|
||||
// run that check, nothing ever seeded it, g_last_frame_time stayed zero, and the watchdog
|
||||
// bailed on every tick forever. Blocked in exactly the scenario it was written for.
|
||||
if (g_progr_text || !g_last_frame_time)
|
||||
{
|
||||
g_last_frame_time = now;
|
||||
g_frame_stall_reported = false;
|
||||
g_frame_stall_dumps = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user