diff --git a/crates/xenia-app/src/main.rs b/crates/xenia-app/src/main.rs index 420c64f..eb7849a 100644 --- a/crates/xenia-app/src/main.rs +++ b/crates/xenia-app/src/main.rs @@ -1031,7 +1031,15 @@ fn cmd_exec_inner( let v = v.trim().to_ascii_lowercase(); v == "1" || v == "true" || v == "yes" }); - let parallel_active = parallel || parallel_via_env; + // iterate-4E: native-threads mode is a superset of parallel behavior (it + // delegates to the free-run executor and runs guest code on multiple host + // threads concurrently). Folding it into `parallel_active` is what enables + // the host-atomic ReservationTable below — MANDATORY under concurrency, else + // lwarx/stwcx on non-primary slots silently can't observe cross-thread + // stores (PPCBUG-108). Also flips `kernel.parallel_active` so the wall-clock + // vsync/coordination paths engage like `--parallel`. + let native_active = native_threads_enabled(); + let parallel_active = parallel || parallel_via_env || native_active; kernel.parallel_active = parallel_active; // AUDIT-032: default is `KernelState::xaudio_tick_enabled = true` now // that the dedicated worker eliminates HW-thread hijack regressions.