Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+12 -1
+11
tools/testing/selftests/kvm/include/test_util.h
··· 97 97 struct guest_random_state new_guest_random_state(uint32_t seed); 98 98 uint32_t guest_random_u32(struct guest_random_state *state); 99 99 100 + static inline bool __guest_random_bool(struct guest_random_state *state, 101 + uint8_t percent) 102 + { 103 + return (guest_random_u32(state) % 100) < percent; 104 + } 105 + 106 + static inline bool guest_random_bool(struct guest_random_state *state) 107 + { 108 + return __guest_random_bool(state, 50); 109 + } 110 + 100 111 static inline uint64_t guest_random_u64(struct guest_random_state *state) 101 112 { 102 113 return ((uint64_t)guest_random_u32(state) << 32) | guest_random_u32(state);
+1 -1
tools/testing/selftests/kvm/lib/memstress.c
··· 74 74 75 75 addr = gva + (page * args->guest_page_size); 76 76 77 - if (guest_random_u32(&rand_state) % 100 < args->write_percent) 77 + if (__guest_random_bool(&rand_state, args->write_percent)) 78 78 *(uint64_t *)addr = 0x0123456789ABCDEF; 79 79 else 80 80 READ_ONCE(*(uint64_t *)addr);