We don't want to have to create a new binary for each vcpu config, so
prepare to run the test for multiple vcpu configs in a single binary.
We do this by factoring out the test from main() and then looping over
configs. When given '--list' we still never print more than a single
reg-list for a single vcpu config though, because it would be confusing
otherwise.

No functional change intended.

Signed-off-by: Andrew Jones <[email protected]>
---
 .../selftests/kvm/aarch64/get-reg-list.c      | 68 ++++++++++++++-----
 1 file changed, 51 insertions(+), 17 deletions(-)

diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c 
b/tools/testing/selftests/kvm/aarch64/get-reg-list.c
index e5d9cb312717..06f737973511 100644
--- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c
+++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c
@@ -53,8 +53,8 @@ struct vcpu_config {
        struct reg_sublist sublists[];
 };
 
-static struct vcpu_config vregs_config;
-static struct vcpu_config sve_config;
+static struct vcpu_config *vcpu_configs[];
+static int vcpu_configs_n;
 
 #define for_each_sublist(c, s)                                                 
\
        for ((s) = &(c)->sublists[0]; (s)->regs; ++(s))
@@ -351,29 +351,20 @@ static void check_supported(struct vcpu_config *c)
        }
 }
 
-int main(int ac, char **av)
+static bool print_list;
+static bool print_filtered;
+static bool fixup_core_regs;
+
+static void run_test(struct vcpu_config *c)
 {
-       struct vcpu_config *c = reg_list_sve() ? &sve_config : &vregs_config;
        struct kvm_vcpu_init init = { .target = -1, };
        int new_regs = 0, missing_regs = 0, i, n;
        int failed_get = 0, failed_set = 0, failed_reject = 0;
-       bool print_list = false, print_filtered = false, fixup_core_regs = 
false;
        struct kvm_vm *vm;
        struct reg_sublist *s;
 
        check_supported(c);
 
-       for (i = 1; i < ac; ++i) {
-               if (strcmp(av[i], "--core-reg-fixup") == 0)
-                       fixup_core_regs = true;
-               else if (strcmp(av[i], "--list") == 0)
-                       print_list = true;
-               else if (strcmp(av[i], "--list-filtered") == 0)
-                       print_filtered = true;
-               else
-                       TEST_FAIL("Unknown option: %s\n", av[i]);
-       }
-
        vm = vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR);
        prepare_vcpu_init(c, &init);
        aarch64_vcpu_add_default(vm, 0, &init, NULL);
@@ -393,7 +384,7 @@ int main(int ac, char **av)
                                print_reg(c, id);
                }
                putchar('\n');
-               return 0;
+               return;
        }
 
        /*
@@ -492,6 +483,44 @@ int main(int ac, char **av)
                    "%d registers failed get; %d registers failed set; %d 
registers failed reject",
                    c->name, missing_regs, failed_get, failed_set, 
failed_reject);
 
+       pr_info("%s: PASS\n", c->name);
+       blessed_n = 0;
+       free(blessed_reg);
+       free(reg_list);
+       kvm_vm_free(vm);
+}
+
+int main(int ac, char **av)
+{
+       struct vcpu_config *c, *sel = NULL;
+       int i;
+
+       for (i = 1; i < ac; ++i) {
+               if (strcmp(av[i], "--core-reg-fixup") == 0)
+                       fixup_core_regs = true;
+               else if (strcmp(av[i], "--list") == 0)
+                       print_list = true;
+               else if (strcmp(av[i], "--list-filtered") == 0)
+                       print_filtered = true;
+               else
+                       TEST_FAIL("Unknown option: %s\n", av[i]);
+       }
+
+       if (print_list || print_filtered) {
+               /*
+                * We only want to print the register list of a single config.
+                * TODO: Add command line support to pick which config.
+                */
+               sel = vcpu_configs[0];
+       }
+
+       for (i = 0; i < vcpu_configs_n; ++i) {
+               c = vcpu_configs[i];
+               if (sel && c != sel)
+                       continue;
+               run_test(c);
+       }
+
        return 0;
 }
 
@@ -889,3 +918,8 @@ static struct vcpu_config sve_config = {
        {0},
        },
 };
+
+static struct vcpu_config *vcpu_configs[] = {
+       reg_list_sve() ? &sve_config : &vregs_config,
+};
+static int vcpu_configs_n = ARRAY_SIZE(vcpu_configs);
-- 
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to