The end goal of this series is to add a regression test for commit 910c57dfa4d1 ("KVM: x86: Mark target gfn of emulated atomic instruction as dirty"), *without* polluting the common dirty_log_test.c code with gory x86 details. The regression test requires forcing KVM to emulate a guest atomic RMW access, which is done via a magic instruction prefix/opcode that is guarded by an off-by-default KVM module param. To allow x86 to (a) detect the param, (b) shove in the unique instruction, and (c) do all of that conditionally so that selftests doesn't test _only_ the forced emulation path, this series provides a pseudo-RNG instance for all tests, and a new arch hook for doing "interesting" guest writes (vcpu_arch_put_guest()). Tested on x86 and ARM, compile tested on s390 and RISC-V. Sean Christopherson (5): KVM: selftests: Provide a global pseudo-RNG instance for all tests KVM: selftests: Provide an API for getting a random bool from an RNG KVM: selftests: Add global snapshot of kvm_is_forced_emulation_enabled() KVM: selftests: Add vcpu_arch_put_guest() to do writes from guest code KVM: selftests: Randomly force emulation on x86 writes from guest code .../selftests/kvm/dirty_log_perf_test.c | 9 ++++---- tools/testing/selftests/kvm/dirty_log_test.c | 22 ++++-------------- .../selftests/kvm/include/kvm_util_base.h | 3 +++ .../testing/selftests/kvm/include/memstress.h | 1 - .../testing/selftests/kvm/include/test_util.h | 19 +++++++++++++++ .../kvm/include/x86_64/kvm_util_arch.h | 23 +++++++++++++++++++ tools/testing/selftests/kvm/lib/kvm_util.c | 9 ++++++++ tools/testing/selftests/kvm/lib/memstress.c | 10 ++------ .../selftests/kvm/lib/x86_64/processor.c | 3 +++ .../selftests/kvm/x86_64/pmu_counters_test.c | 3 --- .../kvm/x86_64/userspace_msr_exit_test.c | 10 ++------ .../selftests/kvm/x86_64/xen_shinfo_test.c | 5 ++-- 12 files changed, 72 insertions(+), 45 deletions(-) base-commit: e9a2bba476c8332ed547fce485c158d03b0b9659 -- 2.44.0.291.gc1ea87d7ee-goog