Pass an error handle to kvm_arm_init_cpreg_list(). A Subsequent patch will do the same with kvm_arch_init_vcpu().
Signed-off-by: Eric Auger <[email protected]> --- target/arm/kvm.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 28f199c03f..d454346037 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -872,6 +872,7 @@ static bool kvm_arm_reg_syncs_via_cpreg_list(uint64_t regidx) /** * kvm_arm_init_cpreg_list: * @cpu: ARMCPU + * @errp: Error handle * * Initialize the ARMCPU cpreg list according to the kernel's * definition of what CPU registers it knows about (and throw away @@ -879,7 +880,7 @@ static bool kvm_arm_reg_syncs_via_cpreg_list(uint64_t regidx) * * Returns: 0 if success, else < 0 error code */ -static int kvm_arm_init_cpreg_list(ARMCPU *cpu) +static int kvm_arm_init_cpreg_list(ARMCPU *cpu, Error **errp) { struct kvm_reg_list rl; struct kvm_reg_list *rlp; @@ -889,12 +890,17 @@ static int kvm_arm_init_cpreg_list(ARMCPU *cpu) rl.n = 0; ret = kvm_vcpu_ioctl(cs, KVM_GET_REG_LIST, &rl); if (ret != -E2BIG) { + if (ret < 0) { + error_setg_errno(errp, -ret, + "failed to get KVM register list size"); + } return ret; } rlp = g_malloc(sizeof(struct kvm_reg_list) + rl.n * sizeof(uint64_t)); rlp->n = rl.n; ret = kvm_vcpu_ioctl(cs, KVM_GET_REG_LIST, rlp); if (ret) { + error_setg_errno(errp, -ret, "failed to get KVM register list"); goto out; } /* Sort the list we get back from the kernel, since cpreg_tuples @@ -911,7 +917,7 @@ static int kvm_arm_init_cpreg_list(ARMCPU *cpu) case KVM_REG_SIZE_U64: break; default: - fprintf(stderr, "Can't handle size of register in kernel list\n"); + error_setg(errp, "Can't handle size of register in kernel list"); ret = -EINVAL; goto out; } @@ -937,7 +943,7 @@ static int kvm_arm_init_cpreg_list(ARMCPU *cpu) /* Shouldn't happen unless kernel is inconsistent about * what registers exist. */ - fprintf(stderr, "Initial read of kernel register state failed\n"); + error_setg(errp, "Initial read of kernel register state failed"); ret = -EINVAL; goto out; } @@ -2015,6 +2021,7 @@ int kvm_arch_init_vcpu(CPUState *cs) uint64_t mpidr; ARMCPU *cpu = ARM_CPU(cs); CPUARMState *env = &cpu->env; + Error *local_err = NULL; uint64_t psciver; if (cpu->kvm_target == QEMU_KVM_ARM_TARGET_NONE) { @@ -2113,7 +2120,11 @@ int kvm_arch_init_vcpu(CPUState *cs) SET_IDREG(&cpu->isar, MPIDR, mpidr); cpu->mp_affinity = mpidr & ARM64_AFFINITY_MASK; - return kvm_arm_init_cpreg_list(cpu); + ret = kvm_arm_init_cpreg_list(cpu, &local_err); + if (ret < 0) { + error_report_err(local_err); + } + return ret; } int kvm_arch_destroy_vcpu(CPUState *cs) -- 2.53.0
