diff options
author | Sean Christopherson <seanjc@google.com> | 2024-03-14 11:54:55 -0700 |
---|---|---|
committer | Sean Christopherson <seanjc@google.com> | 2024-04-29 12:50:42 -0700 |
commit | 73369acd9fbdf6cbf3029cace886abcc626f46ad (patch) | |
tree | bf1452726af1fc9e564e86c6e9ec1887b6da4296 | |
parent | cb6c6914788f65efc8efa72b8a582e2aa2ccc386 (diff) | |
download | linux-73369acd9fbdf6cbf3029cace886abcc626f46ad.tar.gz linux-73369acd9fbdf6cbf3029cace886abcc626f46ad.tar.bz2 linux-73369acd9fbdf6cbf3029cace886abcc626f46ad.zip |
KVM: selftests: Provide an API for getting a random bool from an RNG
Move memstress' random bool logic into common code to avoid reinventing
the wheel for basic yes/no decisions. Provide an outer wrapper to handle
the basic/common case of just wanting a 50/50 chance of something
happening.
Link: https://lore.kernel.org/r/20240314185459.2439072-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
-rw-r--r-- | tools/testing/selftests/kvm/include/test_util.h | 11 | ||||
-rw-r--r-- | tools/testing/selftests/kvm/lib/memstress.c | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/tools/testing/selftests/kvm/include/test_util.h b/tools/testing/selftests/kvm/include/test_util.h index 4b78fb7e539e..3e473058849f 100644 --- a/tools/testing/selftests/kvm/include/test_util.h +++ b/tools/testing/selftests/kvm/include/test_util.h @@ -97,6 +97,17 @@ extern struct guest_random_state guest_rng; struct guest_random_state new_guest_random_state(uint32_t seed); uint32_t guest_random_u32(struct guest_random_state *state); +static inline bool __guest_random_bool(struct guest_random_state *state, + uint8_t percent) +{ + return (guest_random_u32(state) % 100) < percent; +} + +static inline bool guest_random_bool(struct guest_random_state *state) +{ + return __guest_random_bool(state, 50); +} + static inline uint64_t guest_random_u64(struct guest_random_state *state) { return ((uint64_t)guest_random_u32(state) << 32) | guest_random_u32(state); diff --git a/tools/testing/selftests/kvm/lib/memstress.c b/tools/testing/selftests/kvm/lib/memstress.c index 3b7fe1778d7b..aa0a01988150 100644 --- a/tools/testing/selftests/kvm/lib/memstress.c +++ b/tools/testing/selftests/kvm/lib/memstress.c @@ -74,7 +74,7 @@ void memstress_guest_code(uint32_t vcpu_idx) addr = gva + (page * args->guest_page_size); - if (guest_random_u32(&rand_state) % 100 < args->write_percent) + if (__guest_random_bool(&rand_state, args->write_percent)) *(uint64_t *)addr = 0x0123456789ABCDEF; else READ_ONCE(*(uint64_t *)addr); |