mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Peter Xu <peterx@redhat.com>,
	Maxim Levitsky <mlevitsk@redhat.com>,
	 Sean Christopherson <seanjc@google.com>
Subject: [PATCH v2 02/20] KVM: selftests: Sync dirty_log_test iteration to guest *before* resuming
Date: Fri, 10 Jan 2025 16:29:46 -0800	[thread overview]
Message-ID: <20250111003004.1235645-3-seanjc@google.com> (raw)
In-Reply-To: <20250111003004.1235645-1-seanjc@google.com>

Sync the new iteration to the guest prior to restarting the vCPU, otherwise
it's possible for the vCPU to dirty memory for the next iteration using the
current iteration's value.

Note, because the guest can be interrupted between the vCPU's load of the
iteration and its write to memory, it's still possible for the guest to
store the previous iteration to memory as the previous iteration may be
cached in a CPU register (which the test accounts for).

Note #2, the test's current approach of collecting dirty entries *before*
stopping the vCPU also results dirty memory having the previous iteration.
E.g. if page is dirtied in the previous iteration, but not the current
iteration, the verification phase will observe the previous iteration's
value in memory.  That wart will be remedied in the near future, at which
point synchronizing the iteration before restarting the vCPU will guarantee
the only way for verification to observe stale iterations is due to the
CPU register caching case, or due to a dirty entry being collected before
the store retires.

Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 tools/testing/selftests/kvm/dirty_log_test.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/selftests/kvm/dirty_log_test.c
index cdae103314fc..41c158cf5444 100644
--- a/tools/testing/selftests/kvm/dirty_log_test.c
+++ b/tools/testing/selftests/kvm/dirty_log_test.c
@@ -859,9 +859,9 @@ static void run_test(enum vm_guest_mode mode, void *arg)
 		 */
 		if (++iteration == p->iterations)
 			WRITE_ONCE(host_quit, true);
-
-		sem_post(&sem_vcpu_cont);
 		sync_global_to_guest(vm, iteration);
+
+		sem_post(&sem_vcpu_cont);
 	}
 
 	pthread_join(vcpu_thread, NULL);
-- 
2.47.1.613.gc27f4b7a9f-goog


  parent reply	other threads:[~2025-01-11  0:30 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-11  0:29 [PATCH v2 00/20] KVM: selftests: Fixes and cleanups for dirty_log_test Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 01/20] KVM: selftests: Support multiple write retires in dirty_log_test Sean Christopherson
2025-01-11  0:29 ` Sean Christopherson [this message]
2025-01-11  0:29 ` [PATCH v2 03/20] KVM: selftests: Drop signal/kick from dirty ring testcase Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 04/20] KVM: selftests: Drop stale srandom() initialization from dirty_log_test Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 05/20] KVM: selftests: Precisely track number of dirty/clear pages for each iteration Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 06/20] KVM: selftests: Read per-page value into local var when verifying dirty_log_test Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 07/20] KVM: selftests: Continuously reap dirty ring while vCPU is running Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 08/20] KVM: selftests: Limit dirty_log_test's s390x workaround to s390x Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 09/20] KVM: selftests: Honor "stop" request in dirty ring test Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 10/20] KVM: selftests: Keep dirty_log_test vCPU in guest until it needs to stop Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 11/20] KVM: selftests: Post to sem_vcpu_stop if and only if vcpu_stop is true Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 12/20] KVM: selftests: Use continue to handle all "pass" scenarios in dirty_log_test Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 13/20] KVM: selftests: Print (previous) last_page on dirty page value mismatch Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 14/20] KVM: selftests: Collect *all* dirty entries in each dirty_log_test iteration Sean Christopherson
2025-01-11  0:29 ` [PATCH v2 15/20] KVM: sefltests: Verify value of dirty_log_test last page isn't bogus Sean Christopherson
2025-01-11  0:30 ` [PATCH v2 16/20] KVM: selftests: Ensure guest writes min number of pages in dirty_log_test Sean Christopherson
2025-01-11  0:30 ` [PATCH v2 17/20] KVM: selftests: Tighten checks around prev iter's last dirty page in ring Sean Christopherson
2025-01-11  0:30 ` [PATCH v2 18/20] KVM: selftests: Set per-iteration variables at the start of each iteration Sean Christopherson
2025-01-11  0:30 ` [PATCH v2 19/20] KVM: selftests: Fix an off-by-one in the number of dirty_log_test iterations Sean Christopherson
2025-01-11  0:30 ` [PATCH v2 20/20] KVM: selftests: Allow running a single iteration of dirty_log_test Sean Christopherson
2025-01-20 20:34 ` [PATCH v2 00/20] KVM: selftests: Fixes and cleanups for dirty_log_test Maxim Levitsky
2025-02-15  0:50 ` Sean Christopherson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250111003004.1235645-3-seanjc@google.com \
    --to=seanjc@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®