Commit c2b5aa7a authored by Andrew Jones's avatar Andrew Jones Committed by Anup Patel

KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config

print_reg() and its helpers only use the vcpu_config pointer for
config_name(). So just pass the config name in instead, which is used
as a prefix in asserts. print_reg() can now be compiled independently
of config_name().
Signed-off-by: default avatarAndrew Jones <ajones@ventanamicro.com>
Signed-off-by: default avatarHaibo Xu <haibo1.xu@intel.com>
Signed-off-by: default avatarAnup Patel <anup@brainfault.org>
parent 26538608
...@@ -176,7 +176,7 @@ static bool check_supported_feat_reg(struct kvm_vcpu *vcpu, __u64 reg) ...@@ -176,7 +176,7 @@ static bool check_supported_feat_reg(struct kvm_vcpu *vcpu, __u64 reg)
#define CORE_SPSR_XX_NR_WORDS 2 #define CORE_SPSR_XX_NR_WORDS 2
#define CORE_FPREGS_XX_NR_WORDS 4 #define CORE_FPREGS_XX_NR_WORDS 4
static const char *core_id_to_str(struct vcpu_config *c, __u64 id) static const char *core_id_to_str(const char *prefix, __u64 id)
{ {
__u64 core_off = id & ~REG_MASK, idx; __u64 core_off = id & ~REG_MASK, idx;
...@@ -187,7 +187,7 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id) ...@@ -187,7 +187,7 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id)
case KVM_REG_ARM_CORE_REG(regs.regs[0]) ... case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
KVM_REG_ARM_CORE_REG(regs.regs[30]): KVM_REG_ARM_CORE_REG(regs.regs[30]):
idx = (core_off - KVM_REG_ARM_CORE_REG(regs.regs[0])) / CORE_REGS_XX_NR_WORDS; idx = (core_off - KVM_REG_ARM_CORE_REG(regs.regs[0])) / CORE_REGS_XX_NR_WORDS;
TEST_ASSERT(idx < 31, "%s: Unexpected regs.regs index: %lld", config_name(c), idx); TEST_ASSERT(idx < 31, "%s: Unexpected regs.regs index: %lld", prefix, idx);
return strdup_printf("KVM_REG_ARM_CORE_REG(regs.regs[%lld])", idx); return strdup_printf("KVM_REG_ARM_CORE_REG(regs.regs[%lld])", idx);
case KVM_REG_ARM_CORE_REG(regs.sp): case KVM_REG_ARM_CORE_REG(regs.sp):
return "KVM_REG_ARM_CORE_REG(regs.sp)"; return "KVM_REG_ARM_CORE_REG(regs.sp)";
...@@ -202,12 +202,12 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id) ...@@ -202,12 +202,12 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id)
case KVM_REG_ARM_CORE_REG(spsr[0]) ... case KVM_REG_ARM_CORE_REG(spsr[0]) ...
KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]): KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]):
idx = (core_off - KVM_REG_ARM_CORE_REG(spsr[0])) / CORE_SPSR_XX_NR_WORDS; idx = (core_off - KVM_REG_ARM_CORE_REG(spsr[0])) / CORE_SPSR_XX_NR_WORDS;
TEST_ASSERT(idx < KVM_NR_SPSR, "%s: Unexpected spsr index: %lld", config_name(c), idx); TEST_ASSERT(idx < KVM_NR_SPSR, "%s: Unexpected spsr index: %lld", prefix, idx);
return strdup_printf("KVM_REG_ARM_CORE_REG(spsr[%lld])", idx); return strdup_printf("KVM_REG_ARM_CORE_REG(spsr[%lld])", idx);
case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ... case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]): KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
idx = (core_off - KVM_REG_ARM_CORE_REG(fp_regs.vregs[0])) / CORE_FPREGS_XX_NR_WORDS; idx = (core_off - KVM_REG_ARM_CORE_REG(fp_regs.vregs[0])) / CORE_FPREGS_XX_NR_WORDS;
TEST_ASSERT(idx < 32, "%s: Unexpected fp_regs.vregs index: %lld", config_name(c), idx); TEST_ASSERT(idx < 32, "%s: Unexpected fp_regs.vregs index: %lld", prefix, idx);
return strdup_printf("KVM_REG_ARM_CORE_REG(fp_regs.vregs[%lld])", idx); return strdup_printf("KVM_REG_ARM_CORE_REG(fp_regs.vregs[%lld])", idx);
case KVM_REG_ARM_CORE_REG(fp_regs.fpsr): case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
return "KVM_REG_ARM_CORE_REG(fp_regs.fpsr)"; return "KVM_REG_ARM_CORE_REG(fp_regs.fpsr)";
...@@ -215,11 +215,11 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id) ...@@ -215,11 +215,11 @@ static const char *core_id_to_str(struct vcpu_config *c, __u64 id)
return "KVM_REG_ARM_CORE_REG(fp_regs.fpcr)"; return "KVM_REG_ARM_CORE_REG(fp_regs.fpcr)";
} }
TEST_FAIL("%s: Unknown core reg id: 0x%llx", config_name(c), id); TEST_FAIL("%s: Unknown core reg id: 0x%llx", prefix, id);
return NULL; return NULL;
} }
static const char *sve_id_to_str(struct vcpu_config *c, __u64 id) static const char *sve_id_to_str(const char *prefix, __u64 id)
{ {
__u64 sve_off, n, i; __u64 sve_off, n, i;
...@@ -229,37 +229,37 @@ static const char *sve_id_to_str(struct vcpu_config *c, __u64 id) ...@@ -229,37 +229,37 @@ static const char *sve_id_to_str(struct vcpu_config *c, __u64 id)
sve_off = id & ~(REG_MASK | ((1ULL << 5) - 1)); sve_off = id & ~(REG_MASK | ((1ULL << 5) - 1));
i = id & (KVM_ARM64_SVE_MAX_SLICES - 1); i = id & (KVM_ARM64_SVE_MAX_SLICES - 1);
TEST_ASSERT(i == 0, "%s: Currently we don't expect slice > 0, reg id 0x%llx", config_name(c), id); TEST_ASSERT(i == 0, "%s: Currently we don't expect slice > 0, reg id 0x%llx", prefix, id);
switch (sve_off) { switch (sve_off) {
case KVM_REG_ARM64_SVE_ZREG_BASE ... case KVM_REG_ARM64_SVE_ZREG_BASE ...
KVM_REG_ARM64_SVE_ZREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_ZREGS - 1: KVM_REG_ARM64_SVE_ZREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_ZREGS - 1:
n = (id >> 5) & (KVM_ARM64_SVE_NUM_ZREGS - 1); n = (id >> 5) & (KVM_ARM64_SVE_NUM_ZREGS - 1);
TEST_ASSERT(id == KVM_REG_ARM64_SVE_ZREG(n, 0), TEST_ASSERT(id == KVM_REG_ARM64_SVE_ZREG(n, 0),
"%s: Unexpected bits set in SVE ZREG id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in SVE ZREG id: 0x%llx", prefix, id);
return strdup_printf("KVM_REG_ARM64_SVE_ZREG(%lld, 0)", n); return strdup_printf("KVM_REG_ARM64_SVE_ZREG(%lld, 0)", n);
case KVM_REG_ARM64_SVE_PREG_BASE ... case KVM_REG_ARM64_SVE_PREG_BASE ...
KVM_REG_ARM64_SVE_PREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_PREGS - 1: KVM_REG_ARM64_SVE_PREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_PREGS - 1:
n = (id >> 5) & (KVM_ARM64_SVE_NUM_PREGS - 1); n = (id >> 5) & (KVM_ARM64_SVE_NUM_PREGS - 1);
TEST_ASSERT(id == KVM_REG_ARM64_SVE_PREG(n, 0), TEST_ASSERT(id == KVM_REG_ARM64_SVE_PREG(n, 0),
"%s: Unexpected bits set in SVE PREG id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in SVE PREG id: 0x%llx", prefix, id);
return strdup_printf("KVM_REG_ARM64_SVE_PREG(%lld, 0)", n); return strdup_printf("KVM_REG_ARM64_SVE_PREG(%lld, 0)", n);
case KVM_REG_ARM64_SVE_FFR_BASE: case KVM_REG_ARM64_SVE_FFR_BASE:
TEST_ASSERT(id == KVM_REG_ARM64_SVE_FFR(0), TEST_ASSERT(id == KVM_REG_ARM64_SVE_FFR(0),
"%s: Unexpected bits set in SVE FFR id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in SVE FFR id: 0x%llx", prefix, id);
return "KVM_REG_ARM64_SVE_FFR(0)"; return "KVM_REG_ARM64_SVE_FFR(0)";
} }
return NULL; return NULL;
} }
static void print_reg(struct vcpu_config *c, __u64 id) static void print_reg(const char *prefix, __u64 id)
{ {
unsigned op0, op1, crn, crm, op2; unsigned op0, op1, crn, crm, op2;
const char *reg_size = NULL; const char *reg_size = NULL;
TEST_ASSERT((id & KVM_REG_ARCH_MASK) == KVM_REG_ARM64, TEST_ASSERT((id & KVM_REG_ARCH_MASK) == KVM_REG_ARM64,
"%s: KVM_REG_ARM64 missing in reg id: 0x%llx", config_name(c), id); "%s: KVM_REG_ARM64 missing in reg id: 0x%llx", prefix, id);
switch (id & KVM_REG_SIZE_MASK) { switch (id & KVM_REG_SIZE_MASK) {
case KVM_REG_SIZE_U8: case KVM_REG_SIZE_U8:
...@@ -291,16 +291,16 @@ static void print_reg(struct vcpu_config *c, __u64 id) ...@@ -291,16 +291,16 @@ static void print_reg(struct vcpu_config *c, __u64 id)
break; break;
default: default:
TEST_FAIL("%s: Unexpected reg size: 0x%llx in reg id: 0x%llx", TEST_FAIL("%s: Unexpected reg size: 0x%llx in reg id: 0x%llx",
config_name(c), (id & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT, id); prefix, (id & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT, id);
} }
switch (id & KVM_REG_ARM_COPROC_MASK) { switch (id & KVM_REG_ARM_COPROC_MASK) {
case KVM_REG_ARM_CORE: case KVM_REG_ARM_CORE:
printf("\tKVM_REG_ARM64 | %s | KVM_REG_ARM_CORE | %s,\n", reg_size, core_id_to_str(c, id)); printf("\tKVM_REG_ARM64 | %s | KVM_REG_ARM_CORE | %s,\n", reg_size, core_id_to_str(prefix, id));
break; break;
case KVM_REG_ARM_DEMUX: case KVM_REG_ARM_DEMUX:
TEST_ASSERT(!(id & ~(REG_MASK | KVM_REG_ARM_DEMUX_ID_MASK | KVM_REG_ARM_DEMUX_VAL_MASK)), TEST_ASSERT(!(id & ~(REG_MASK | KVM_REG_ARM_DEMUX_ID_MASK | KVM_REG_ARM_DEMUX_VAL_MASK)),
"%s: Unexpected bits set in DEMUX reg id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in DEMUX reg id: 0x%llx", prefix, id);
printf("\tKVM_REG_ARM64 | %s | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | %lld,\n", printf("\tKVM_REG_ARM64 | %s | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | %lld,\n",
reg_size, id & KVM_REG_ARM_DEMUX_VAL_MASK); reg_size, id & KVM_REG_ARM_DEMUX_VAL_MASK);
break; break;
...@@ -311,25 +311,25 @@ static void print_reg(struct vcpu_config *c, __u64 id) ...@@ -311,25 +311,25 @@ static void print_reg(struct vcpu_config *c, __u64 id)
crm = (id & KVM_REG_ARM64_SYSREG_CRM_MASK) >> KVM_REG_ARM64_SYSREG_CRM_SHIFT; crm = (id & KVM_REG_ARM64_SYSREG_CRM_MASK) >> KVM_REG_ARM64_SYSREG_CRM_SHIFT;
op2 = (id & KVM_REG_ARM64_SYSREG_OP2_MASK) >> KVM_REG_ARM64_SYSREG_OP2_SHIFT; op2 = (id & KVM_REG_ARM64_SYSREG_OP2_MASK) >> KVM_REG_ARM64_SYSREG_OP2_SHIFT;
TEST_ASSERT(id == ARM64_SYS_REG(op0, op1, crn, crm, op2), TEST_ASSERT(id == ARM64_SYS_REG(op0, op1, crn, crm, op2),
"%s: Unexpected bits set in SYSREG reg id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in SYSREG reg id: 0x%llx", prefix, id);
printf("\tARM64_SYS_REG(%d, %d, %d, %d, %d),\n", op0, op1, crn, crm, op2); printf("\tARM64_SYS_REG(%d, %d, %d, %d, %d),\n", op0, op1, crn, crm, op2);
break; break;
case KVM_REG_ARM_FW: case KVM_REG_ARM_FW:
TEST_ASSERT(id == KVM_REG_ARM_FW_REG(id & 0xffff), TEST_ASSERT(id == KVM_REG_ARM_FW_REG(id & 0xffff),
"%s: Unexpected bits set in FW reg id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in FW reg id: 0x%llx", prefix, id);
printf("\tKVM_REG_ARM_FW_REG(%lld),\n", id & 0xffff); printf("\tKVM_REG_ARM_FW_REG(%lld),\n", id & 0xffff);
break; break;
case KVM_REG_ARM_FW_FEAT_BMAP: case KVM_REG_ARM_FW_FEAT_BMAP:
TEST_ASSERT(id == KVM_REG_ARM_FW_FEAT_BMAP_REG(id & 0xffff), TEST_ASSERT(id == KVM_REG_ARM_FW_FEAT_BMAP_REG(id & 0xffff),
"%s: Unexpected bits set in the bitmap feature FW reg id: 0x%llx", config_name(c), id); "%s: Unexpected bits set in the bitmap feature FW reg id: 0x%llx", prefix, id);
printf("\tKVM_REG_ARM_FW_FEAT_BMAP_REG(%lld),\n", id & 0xffff); printf("\tKVM_REG_ARM_FW_FEAT_BMAP_REG(%lld),\n", id & 0xffff);
break; break;
case KVM_REG_ARM64_SVE: case KVM_REG_ARM64_SVE:
printf("\t%s,\n", sve_id_to_str(c, id)); printf("\t%s,\n", sve_id_to_str(prefix, id));
break; break;
default: default:
TEST_FAIL("%s: Unexpected coproc type: 0x%llx in reg id: 0x%llx", TEST_FAIL("%s: Unexpected coproc type: 0x%llx in reg id: 0x%llx",
config_name(c), (id & KVM_REG_ARM_COPROC_MASK) >> KVM_REG_ARM_COPROC_SHIFT, id); prefix, (id & KVM_REG_ARM_COPROC_MASK) >> KVM_REG_ARM_COPROC_SHIFT, id);
} }
} }
...@@ -458,7 +458,7 @@ static void run_test(struct vcpu_config *c) ...@@ -458,7 +458,7 @@ static void run_test(struct vcpu_config *c)
__u64 id = reg_list->reg[i]; __u64 id = reg_list->reg[i];
if ((print_list && !filter_reg(id)) || if ((print_list && !filter_reg(id)) ||
(print_filtered && filter_reg(id))) (print_filtered && filter_reg(id)))
print_reg(c, id); print_reg(config_name(c), id);
} }
putchar('\n'); putchar('\n');
return; return;
...@@ -486,7 +486,7 @@ static void run_test(struct vcpu_config *c) ...@@ -486,7 +486,7 @@ static void run_test(struct vcpu_config *c)
ret = __vcpu_get_reg(vcpu, reg_list->reg[i], &addr); ret = __vcpu_get_reg(vcpu, reg_list->reg[i], &addr);
if (ret) { if (ret) {
printf("%s: Failed to get ", config_name(c)); printf("%s: Failed to get ", config_name(c));
print_reg(c, reg.id); print_reg(config_name(c), reg.id);
putchar('\n'); putchar('\n');
++failed_get; ++failed_get;
} }
...@@ -498,7 +498,7 @@ static void run_test(struct vcpu_config *c) ...@@ -498,7 +498,7 @@ static void run_test(struct vcpu_config *c)
ret = __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, &reg); ret = __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, &reg);
if (ret != -1 || errno != EPERM) { if (ret != -1 || errno != EPERM) {
printf("%s: Failed to reject (ret=%d, errno=%d) ", config_name(c), ret, errno); printf("%s: Failed to reject (ret=%d, errno=%d) ", config_name(c), ret, errno);
print_reg(c, reg.id); print_reg(config_name(c), reg.id);
putchar('\n'); putchar('\n');
++failed_reject; ++failed_reject;
} }
...@@ -510,7 +510,7 @@ static void run_test(struct vcpu_config *c) ...@@ -510,7 +510,7 @@ static void run_test(struct vcpu_config *c)
ret = __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, &reg); ret = __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, &reg);
if (ret) { if (ret) {
printf("%s: Failed to set ", config_name(c)); printf("%s: Failed to set ", config_name(c));
print_reg(c, reg.id); print_reg(config_name(c), reg.id);
putchar('\n'); putchar('\n');
++failed_set; ++failed_set;
} }
...@@ -548,7 +548,7 @@ static void run_test(struct vcpu_config *c) ...@@ -548,7 +548,7 @@ static void run_test(struct vcpu_config *c)
"Consider adding them to the blessed reg " "Consider adding them to the blessed reg "
"list with the following lines:\n\n", config_name(c), new_regs); "list with the following lines:\n\n", config_name(c), new_regs);
for_each_new_reg(i) for_each_new_reg(i)
print_reg(c, reg_list->reg[i]); print_reg(config_name(c), reg_list->reg[i]);
putchar('\n'); putchar('\n');
} }
...@@ -556,7 +556,7 @@ static void run_test(struct vcpu_config *c) ...@@ -556,7 +556,7 @@ static void run_test(struct vcpu_config *c)
printf("\n%s: There are %d missing registers.\n" printf("\n%s: There are %d missing registers.\n"
"The following lines are missing registers:\n\n", config_name(c), missing_regs); "The following lines are missing registers:\n\n", config_name(c), missing_regs);
for_each_missing_reg(i) for_each_missing_reg(i)
print_reg(c, blessed_reg[i]); print_reg(config_name(c), blessed_reg[i]);
putchar('\n'); putchar('\n');
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment