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 <[email protected]>
---
 .../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


Reply via email to