Expand run_guest_do_rmw() to support checking that data at given pgoff is not equal to expected_val. This will be used in a later patch that tests that memory contents are scrambled. Signed-off-by: Ackerley Tng --- .../selftests/kvm/guest_memfd_conversions_test.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_conversions_test.c b/tools/testing/selftests/kvm/guest_memfd_conversions_test.c index c0abc69f15332..277b122ec294c 100644 --- a/tools/testing/selftests/kvm/guest_memfd_conversions_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_conversions_test.c @@ -137,6 +137,7 @@ static void __gmem_conversions_multipage_##test(test_data_t *t, int nr_pages, \ struct guest_check_data { void *mem; char expected_val; + bool assert_not_equal; char write_val; }; static struct guest_check_data guest_data; @@ -146,7 +147,13 @@ static void guest_do_rmw(void) for (;;) { char *mem = READ_ONCE(guest_data.mem); - GUEST_ASSERT_EQ(READ_ONCE(*mem), READ_ONCE(guest_data.expected_val)); + if (READ_ONCE(guest_data.assert_not_equal)) { + GUEST_ASSERT_NE(READ_ONCE(*mem), + READ_ONCE(guest_data.expected_val)); + } else { + GUEST_ASSERT_EQ(READ_ONCE(*mem), + READ_ONCE(guest_data.expected_val)); + } WRITE_ONCE(*mem, READ_ONCE(guest_data.write_val)); GUEST_SYNC(0); @@ -154,13 +161,15 @@ static void guest_do_rmw(void) } static void run_guest_do_rmw(struct kvm_vcpu *vcpu, loff_t pgoff, - char expected_val, char write_val) + char expected_val, char write_val, + bool assert_not_equal) { struct ucall uc; int r; guest_data.mem = (void *)GUEST_MEMFD_SHARING_TEST_GVA + pgoff * page_size; guest_data.expected_val = expected_val; + guest_data.assert_not_equal = assert_not_equal; guest_data.write_val = write_val; sync_global_to_guest(vcpu->vm, guest_data); @@ -191,7 +200,7 @@ static void test_private(test_data_t *t, loff_t pgoff, char starting_val, char write_val) { TEST_EXPECT_SIGBUS(WRITE_ONCE(t->mem[pgoff * page_size], write_val)); - run_guest_do_rmw(t->vcpu, pgoff, starting_val, write_val); + run_guest_do_rmw(t->vcpu, pgoff, starting_val, write_val, false); TEST_EXPECT_SIGBUS(READ_ONCE(t->mem[pgoff * page_size])); } @@ -207,7 +216,7 @@ static void test_shared(test_data_t *t, loff_t pgoff, char starting_val, char host_write_val, char write_val) { host_do_rmw(t->mem, pgoff, starting_val, host_write_val); - run_guest_do_rmw(t->vcpu, pgoff, host_write_val, write_val); + run_guest_do_rmw(t->vcpu, pgoff, host_write_val, write_val, false); TEST_ASSERT_EQ(READ_ONCE(t->mem[pgoff * page_size]), write_val); } -- 2.53.0.1018.g2bb0e51243-goog