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.
Only the following patch still need review:
target/arm: enable event stream on WFE instructions
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: <20260417164328.1009132-1-alex.bennee@linaro.org>
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?= <alex.bennee@linaro.org>
- 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 (7):
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/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 | 254 ++++++++++++++++++++++++++++++---
target/arm/tcg/translate-a64.c | 64 +++++----
target/arm/tcg/translate.c | 31 ++--
16 files changed, 395 insertions(+), 105 deletions(-)
--
2.47.3