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

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: default avatarSean Christopherson <seanjc@google.com>
parent cb6c6914
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);