Add arch_timer_edge_cases selftest to test various corner cases of the ARM timers such as: * timers above the max TVAL value * timers in the past * moving counters ahead and behind pending timers * reprograming timers * timers fired multiple times * masking/unmasking using the timer control mask These are intentionally unusual scenarios to stress compliance with the arm architecture. v4: * Convert macros to functions where possible * Remove magic numbers * Improve naming of variables and types v3: https://lore.kernel.org/kvmarm/20231103192915.2209393-1-coltonlewis@xxxxxxxxxx/ v2: https://lore.kernel.org/kvmarm/20230928210201.1310536-1-coltonlewis@xxxxxxxxxx/ v1: https://lore.kernel.org/kvm/20230516213731.387132-1-coltonlewis@xxxxxxxxxx/ Colton Lewis (3): KVM: arm64: selftests: Standardize GIC base addresses KVM: arm64: selftests: Guarantee interrupts are handled KVM: arm64: selftests: Add arch_timer_edge_cases selftest tools/testing/selftests/kvm/Makefile | 1 + .../selftests/kvm/aarch64/arch_timer.c | 8 +- .../kvm/aarch64/arch_timer_edge_cases.c | 1102 +++++++++++++++++ .../testing/selftests/kvm/aarch64/vgic_irq.c | 23 +- .../kvm/aarch64/vpmu_counter_access.c | 3 +- .../selftests/kvm/dirty_log_perf_test.c | 5 +- .../kvm/include/aarch64/arch_timer.h | 18 +- .../selftests/kvm/include/aarch64/gic.h | 8 +- .../selftests/kvm/include/aarch64/vgic.h | 3 +- tools/testing/selftests/kvm/lib/aarch64/gic.c | 12 +- .../testing/selftests/kvm/lib/aarch64/vgic.c | 7 +- 11 files changed, 1158 insertions(+), 32 deletions(-) create mode 100644 tools/testing/selftests/kvm/aarch64/arch_timer_edge_cases.c -- 2.44.0.278.ge034bb2e1d-goog