On Fri, 19 Jun 2026 at 01:32, Ackerley Tng via B4 Relay <[email protected]> wrote: > > From: Ackerley Tng <[email protected]> > > private_mem_conversions_test used to reset the shared memory that was used > for the test to an initial pattern at the end of each test iteration. Then, > it would punch out the pages, which would zero memory. > > Without in-place conversion, the resetting would write shared memory, and > hole-punching will zero private memory, hence resetting the test to the > state at the beginning of the for loop. > > With in-place conversion, resetting writes memory as shared, and > hole-punching zeroes the same physical memory, hence undoing the reset > done before the hole punch. > > Move the resetting after the hole-punching, and reset the entire > PER_CPU_DATA_SIZE instead of just the tested range. > > With in-place conversion, this zeroes and then resets the same physical > memory. Without in-place conversion, the private memory is zeroed, and the > shared memory is reset to init_p. > > This is sufficient since at each test stage, the memory is assumed to start > as shared, and private memory is always assumed to start zeroed. Conversion > zeroes memory, so the future test stages will work as expected. > > Fixes: 43f623f350ce1 ("KVM: selftests: Add x86-only selftest for private > memory conversions") > Signed-off-by: Ackerley Tng <[email protected]>
Reviewed-by: Fuad Tabba <[email protected]> Cheers, /fuad > --- > tools/testing/selftests/kvm/x86/private_mem_conversions_test.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c > b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c > index 861baff201e78..289ad10063fca 100644 > --- a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c > +++ b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c > @@ -202,15 +202,18 @@ static void guest_test_explicit_conversion(u64 > base_gpa, bool do_fallocate) > guest_sync_shared(gpa, size, p3, p4); > memcmp_g(gpa, p4, size); > > - /* Reset the shared memory back to the initial pattern. */ > - memset((void *)gpa, init_p, size); > - > /* > * Free (via PUNCH_HOLE) *all* private memory so that the next > * iteration starts from a clean slate, e.g. with respect to > * whether or not there are pages/folios in guest_mem. > */ > guest_map_shared(base_gpa, PER_CPU_DATA_SIZE, true); > + > + /* > + * Hole-punching above zeroed private memory. Reset shared > + * memory in preparation for the next GUEST_STAGE. > + */ > + memset((void *)base_gpa, init_p, PER_CPU_DATA_SIZE); > } > } > > > -- > 2.55.0.rc0.738.g0c8ab3ebcc-goog > >
