Subsequent patch will add an error handle to kvm_arch_init_vcpu(). So all errors must come with an error handle.
kvm_arm_init_cpreg_list does not propogate any, add this capability. Signed-off-by: Eric Auger <[email protected]> --- target/arm/kvm.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index ac4f307276..f2b79c0a34 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -962,6 +962,7 @@ static bool kvm_arm_reg_syncs_via_cpreg_list(uint64_t regidx) /** * kvm_arm_init_cpreg_list: * @cpu: ARMCPU + * @errp: pointer to Error* for error reporting * * Initialize the ARMCPU cpreg list according to the kernel's * definition of what CPU registers it knows about (and throw away @@ -969,22 +970,27 @@ 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; + struct kvm_reg_list *rlp = NULL; int i, ret, arraylen; CPUState *cs = CPU(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 @@ -1001,7 +1007,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; } @@ -1027,7 +1033,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; } @@ -2196,7 +2202,7 @@ 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); + return kvm_arm_init_cpreg_list(cpu, errp); } int kvm_arch_destroy_vcpu(CPUState *cs) -- 2.53.0
