KVM: selftests: Only do get/set tests on present blessed list
authorHaibo Xu <haibo1.xu@intel.com>
Tue, 25 Jul 2023 08:41:36 +0000 (16:41 +0800)
committerAnup Patel <anup@brainfault.org>
Wed, 9 Aug 2023 06:45:19 +0000 (12:15 +0530)
Only do the get/set tests on present and blessed registers
since we don't know the capabilities of any new ones.

Suggested-by: Andrew Jones <ajones@ventanamicro.com>
Signed-off-by: Haibo Xu <haibo1.xu@intel.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Signed-off-by: Anup Patel <anup@brainfault.org>
tools/testing/selftests/kvm/get-reg-list.c

index 43a919f2208ff150e23a3d81eed36af5594dfc77..2232620fb7974c08c21eda48073ac236c40af9fe 100644 (file)
@@ -50,6 +50,10 @@ extern int vcpu_configs_n;
        for_each_reg_filtered(i)                                                \
                if (!find_reg(blessed_reg, blessed_n, reg_list->reg[i]))
 
+#define for_each_present_blessed_reg(i)                                                \
+       for_each_reg(i)                                                         \
+               if (find_reg(blessed_reg, blessed_n, reg_list->reg[i]))
+
 static const char *config_name(struct vcpu_reg_list *c)
 {
        struct vcpu_reg_sublist *s;
@@ -183,6 +187,16 @@ static void run_test(struct vcpu_reg_list *c)
                return;
        }
 
+       for_each_sublist(c, s)
+               blessed_n += s->regs_n;
+       blessed_reg = calloc(blessed_n, sizeof(__u64));
+
+       n = 0;
+       for_each_sublist(c, s) {
+               for (i = 0; i < s->regs_n; ++i)
+                       blessed_reg[n++] = s->regs[i];
+       }
+
        /*
         * We only test that we can get the register and then write back the
         * same value. Some registers may allow other values to be written
@@ -192,8 +206,11 @@ static void run_test(struct vcpu_reg_list *c)
         * be written need to have the other values tested, then we should
         * create a new set of tests for those in a new independent test
         * executable.
+        *
+        * Only do the get/set tests on present, blessed list registers,
+        * since we don't know the capabilities of any new registers.
         */
-       for_each_reg(i) {
+       for_each_present_blessed_reg(i) {
                uint8_t addr[2048 / 8];
                struct kvm_one_reg reg = {
                        .id = reg_list->reg[i],
@@ -236,16 +253,6 @@ static void run_test(struct vcpu_reg_list *c)
                }
        }
 
-       for_each_sublist(c, s)
-               blessed_n += s->regs_n;
-       blessed_reg = calloc(blessed_n, sizeof(__u64));
-
-       n = 0;
-       for_each_sublist(c, s) {
-               for (i = 0; i < s->regs_n; ++i)
-                       blessed_reg[n++] = s->regs[i];
-       }
-
        for_each_new_reg(i)
                ++new_regs;