Skip to content

Commit

Permalink
KVM: selftests: Provide an API for getting a random bool from an RNG
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
sean-jc committed Apr 29, 2024
1 parent cb6c691 commit 73369ac
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
11 changes: 11 additions & 0 deletions tools/testing/selftests/kvm/include/test_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/kvm/lib/memstress.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 73369ac

Please sign in to comment.