]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: selftests: Test memslot move in memslot_perf_test with quirk disabled
authorYan Zhao <yan.y.zhao@intel.com>
Wed, 3 Jul 2024 02:12:19 +0000 (10:12 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 14 Aug 2024 16:29:11 +0000 (12:29 -0400)
Add a new user option to memslot_perf_test to allow testing memslot move
with quirk KVM_X86_QUIRK_SLOT_ZAP_ALL disabled.

Signed-off-by: Yan Zhao <yan.y.zhao@intel.com>
Message-ID: <20240703021219.13939-1-yan.y.zhao@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/memslot_perf_test.c

index 579a64f97333b8d0ebd4533fdfdee1a172ef731a..893366982f77bb02ddbf19aaa35abc6af7f1275b 100644 (file)
@@ -113,6 +113,7 @@ static_assert(ATOMIC_BOOL_LOCK_FREE == 2, "atomic bool is not lockless");
 static sem_t vcpu_ready;
 
 static bool map_unmap_verify;
+static bool disable_slot_zap_quirk;
 
 static bool verbose;
 #define pr_info_v(...)                         \
@@ -578,6 +579,9 @@ static bool test_memslot_move_prepare(struct vm_data *data,
        uint32_t guest_page_size = data->vm->page_size;
        uint64_t movesrcgpa, movetestgpa;
 
+       if (disable_slot_zap_quirk)
+               vm_enable_cap(data->vm, KVM_CAP_DISABLE_QUIRKS2, KVM_X86_QUIRK_SLOT_ZAP_ALL);
+
        movesrcgpa = vm_slot2gpa(data, data->nslots - 1);
 
        if (isactive) {
@@ -896,6 +900,7 @@ static void help(char *name, struct test_args *targs)
        pr_info(" -h: print this help screen.\n");
        pr_info(" -v: enable verbose mode (not for benchmarking).\n");
        pr_info(" -d: enable extra debug checks.\n");
+       pr_info(" -q: Disable memslot zap quirk during memslot move.\n");
        pr_info(" -s: specify memslot count cap (-1 means no cap; currently: %i)\n",
                targs->nslots);
        pr_info(" -f: specify the first test to run (currently: %i; max %zu)\n",
@@ -954,7 +959,7 @@ static bool parse_args(int argc, char *argv[],
        uint32_t max_mem_slots;
        int opt;
 
-       while ((opt = getopt(argc, argv, "hvds:f:e:l:r:")) != -1) {
+       while ((opt = getopt(argc, argv, "hvdqs:f:e:l:r:")) != -1) {
                switch (opt) {
                case 'h':
                default:
@@ -966,6 +971,11 @@ static bool parse_args(int argc, char *argv[],
                case 'd':
                        map_unmap_verify = true;
                        break;
+               case 'q':
+                       disable_slot_zap_quirk = true;
+                       TEST_REQUIRE(kvm_check_cap(KVM_CAP_DISABLE_QUIRKS2) &
+                                    KVM_X86_QUIRK_SLOT_ZAP_ALL);
+                       break;
                case 's':
                        targs->nslots = atoi_paranoid(optarg);
                        if (targs->nslots <= 1 && targs->nslots != -1) {