diff options
author | 2025-01-10 16:30:01 -0800 | |
---|---|---|
committer | 2025-02-12 09:00:56 -0800 | |
commit | 2020d3b77a5a40a133e18fb4c870e9fe384405fd (patch) | |
tree | 17c1215b2f607279f1fe527148c2a0680c5c981e | |
parent | KVM: selftests: Ensure guest writes min number of pages in dirty_log_test (diff) | |
download | wireguard-linux-2020d3b77a5a40a133e18fb4c870e9fe384405fd.tar.xz wireguard-linux-2020d3b77a5a40a133e18fb4c870e9fe384405fd.zip |
KVM: selftests: Tighten checks around prev iter's last dirty page in ring
Now that each iteration collects all dirty entries and ensures the guest
*completes* at least one write, tighten the exemptions for the last dirty
page of the previous iteration. Specifically, the only legal value (other
than the current iteration) is N-1.
Unlike the last page for the current iteration, the in-progress write from
the previous iteration is guaranteed to have completed, otherwise the test
would have hung.
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Link: https://lore.kernel.org/r/20250111003004.1235645-18-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to '')
-rw-r--r-- | tools/testing/selftests/kvm/dirty_log_test.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/selftests/kvm/dirty_log_test.c index c6b843ec8e0c..e9854b5a28f1 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -517,14 +517,22 @@ static void vm_dirty_log_verify(enum vm_guest_mode mode, unsigned long **bmap) if (host_log_mode == LOG_MODE_DIRTY_RING) { /* - * The last page in the ring from this iteration - * or the previous can be written with the value - * from the previous iteration (relative to the - * last page's iteration), as the value to be - * written may be cached in a CPU register. + * The last page in the ring from previous + * iteration can be written with the value + * from the previous iteration, as the value to + * be written may be cached in a CPU register. */ - if ((page == dirty_ring_last_page || - page == dirty_ring_prev_iteration_last_page) && + if (page == dirty_ring_prev_iteration_last_page && + val == iteration - 1) + continue; + + /* + * Any value from a previous iteration is legal + * for the last entry, as the write may not yet + * have retired, i.e. the page may hold whatever + * it had before this iteration started. + */ + if (page == dirty_ring_last_page && val < iteration) continue; } else if (!val && iteration == 1 && bmap0_dirty) { |