Commit 73369acd authored by Sean Christopherson's avatar Sean Christopherson

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.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
parent cb6c6914
...@@ -97,6 +97,17 @@ extern struct guest_random_state guest_rng; ...@@ -97,6 +97,17 @@ extern struct guest_random_state guest_rng;
struct guest_random_state new_guest_random_state(uint32_t seed); struct guest_random_state new_guest_random_state(uint32_t seed);
uint32_t guest_random_u32(struct guest_random_state *state); 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) static inline uint64_t guest_random_u64(struct guest_random_state *state)
{ {
return ((uint64_t)guest_random_u32(state) << 32) | guest_random_u32(state); return ((uint64_t)guest_random_u32(state) << 32) | guest_random_u32(state);
......
...@@ -74,7 +74,7 @@ void memstress_guest_code(uint32_t vcpu_idx) ...@@ -74,7 +74,7 @@ void memstress_guest_code(uint32_t vcpu_idx)
addr = gva + (page * args->guest_page_size); 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; *(uint64_t *)addr = 0x0123456789ABCDEF;
else else
READ_ONCE(*(uint64_t *)addr); READ_ONCE(*(uint64_t *)addr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment