KVM: selftests: Add helper to generate random u64 in range [min,max]

Introduce kvm_random_u64_in_range(state, min, max). This function
returns a random u64 in the inclusive range of [min, max] using a struct
kvm_random_state.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Josh Hilke <jrhilke@google.com>
Link: https://patch.msgid.link/20260626213534.3866178-7-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Josh Hilke 2026-06-26 14:35:19 -07:00 committed by Sean Christopherson
parent 5506feb242
commit c772591d27
2 changed files with 21 additions and 0 deletions

View File

@ -134,6 +134,9 @@ static inline u64 kvm_random_u64(struct kvm_random_state *state)
return ((u64)kvm_random_u32(state) << 32) | kvm_random_u32(state);
}
u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min,
u64 max);
enum vm_mem_backing_src_type {
VM_MEM_SRC_ANONYMOUS,
VM_MEM_SRC_ANONYMOUS_THP,

View File

@ -42,6 +42,24 @@ u32 kvm_random_u32(struct kvm_random_state *state)
return state->seed;
}
/* Returns a random u64 in the inclusive range [min, max] */
u64 kvm_random_u64_in_range(struct kvm_random_state *state, u64 min,
u64 max)
{
u64 value;
u64 range;
TEST_ASSERT(min <= max, "PEBKAC, min = 0x%lx, max = 0x%lx", min, max);
value = kvm_random_u64(state);
range = max - min;
if (range == ULLONG_MAX)
return value;
return min + (value % (range + 1));
}
/*
* Parses "[0-9]+[kmgt]?".
*/