This series fully models the behaviour of WFxT instructions. We already had support for WFE for M-profile but we left off A-profile as it has more potential sources of wake-ups. The main one is the event stream which includes events from significant bits of the timer ticking over.
The refactoring from the previous iterations of the patch have now been merged. I've dropped trying to fully model the global monitor in favour of taking advantage of the architectural flexibility to have an IMPDEF event wake up for any reason. We treat the setting of exclusive_addr as such a reason because it indicates the current vCPU is in a ldstx exclusive region and we don't want the guest to deadlock. This does mean the system won't sleep on WFE enabled locks but people shouldn't be relying on QEMU to model real world sleep patterns anyway given the efficiency of emulation compared to real HW. I've written a test case using kvm-unit-tests: Message-ID: <[email protected]> Date: Wed, 27 May 2026 12:18:21 +0100 Subject: [kvm-unit-tests PATCH v2] arm: add wfx test case From: =?UTF-8?q?Alex=20Benn=C3=A9e?= <[email protected]> All patches are now reviewed. v7 - more r-b's - extended comment for typo fix v6 - add typo fix - addressed rth's comments v5 - addressed rth's comments - all but one patch now reviewed v4 - precursor refactor patches now merged - dropped global monitor emulation - addressed other comments - tested with check-tcg and kvm-unit-test wfx tests v3 - fixed the WFE exception handling v2 - I've kept the tests separate, see: Message-ID: <[email protected]> Date: Fri, 17 Apr 2026 17:43:20 +0100 Subject: [PATCH 0/7] tests/tcg: more capabilities for aarch64-softmmu tests From: =?UTF-8?q?Alex=20Benn=C3=A9e?= <[email protected]> - tweaks to global monitor behaviour - STLR/STL will also trigger events to avoid deadlocks - see under the --- in the patches for details Alex. Alex Bennée (8): target/arm: fix WFET typo in syndrome target/arm: teach arm_cpu_has_work about halting reasons target/arm: redefine event stream fields target/arm: ensure aarch64 DISAS_WFE will exit target/arm: implements SEV/SEVL for all modes target/arm: enable event stream on WFE instructions target/arm: handle the WFE trap case target/arm: implement WFET target/arm/cpu.h | 16 +++ target/arm/internals.h | 22 ++- target/arm/syndrome.h | 2 +- target/arm/tcg/helper-defs.h | 3 +- target/arm/tcg/translate.h | 18 +++ target/arm/tcg/a32.decode | 5 +- target/arm/tcg/a64.decode | 5 +- target/arm/tcg/t16.decode | 4 +- target/arm/tcg/t32.decode | 4 +- target/arm/arm-powerctl.c | 6 +- target/arm/cpu.c | 53 +++++-- target/arm/helper.c | 8 +- target/arm/kvm.c | 5 +- target/arm/machine.c | 2 +- target/arm/tcg/op_helper.c | 253 ++++++++++++++++++++++++++++++--- target/arm/tcg/translate-a64.c | 64 +++++---- target/arm/tcg/translate.c | 31 ++-- 17 files changed, 395 insertions(+), 106 deletions(-) -- 2.47.3
