Hi Eric, On Thu, Oct 29, 2026 at 10:20:17AM +0100, Eric Auger wrote: > This allows to report a precise error message if any error occurs. > > Signed-off-by: Eric Auger <[email protected]> > --- > target/arm/kvm_arm.h | 3 ++- > target/arm/kvm.c | 15 ++++++++++++--- > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h > index e7c40fb003..9c7e7f654a 100644 > --- a/target/arm/kvm_arm.h > +++ b/target/arm/kvm_arm.h > @@ -105,6 +105,7 @@ struct kvm_vcpu_init; > * @init: filled in with the necessary values for creating a host > * vcpu. If NULL is provided, will not init the vCPU (though the cpufd > * will still be set up). > + * @errp: Error handle > * > * Create a scratch vcpu in its own VM of the type preferred by the host > * kernel (as would be used for '-cpu host'), for purposes of probing it > @@ -114,7 +115,7 @@ struct kvm_vcpu_init; > * false on failure (and fdarray and init are not valid). > */ > bool kvm_arm_create_scratch_host_vcpu(int *fdarray, > - struct kvm_vcpu_init *init); > + struct kvm_vcpu_init *init, Error > **errp); > > /** > * kvm_arm_destroy_scratch_host_vcpu: > diff --git a/target/arm/kvm.c b/target/arm/kvm.c > index 724bc08edf..28f199c03f 100644 > --- a/target/arm/kvm.c > +++ b/target/arm/kvm.c > @@ -104,13 +104,14 @@ static int kvm_arm_vcpu_finalize(ARMCPU *cpu, int > feature) > } > > bool kvm_arm_create_scratch_host_vcpu(int *fdarray, > - struct kvm_vcpu_init *init) > + struct kvm_vcpu_init *init, Error > **errp) > { > int ret = 0, kvmfd = -1, vmfd = -1, cpufd = -1; > int max_vm_pa_size; > > kvmfd = qemu_open_old("/dev/kvm", O_RDWR); > if (kvmfd < 0) { > + error_setg(errp, "Failed opening /dev/kvm"); > goto err; > } > max_vm_pa_size = ioctl(kvmfd, KVM_CHECK_EXTENSION, > KVM_CAP_ARM_VM_IPA_SIZE); > @@ -121,6 +122,7 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, > vmfd = ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size); > } while (vmfd == -1 && errno == EINTR); > if (vmfd < 0) { > + error_setg(errp, "Failed creating the scratch VM"); > goto err; > } > > @@ -140,6 +142,7 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, > > cpufd = ioctl(vmfd, KVM_CREATE_VCPU, 0); > if (cpufd < 0) { > + error_setg(errp, "Failed creating the scratch VCPU"); > goto err; > } > > @@ -153,12 +156,14 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, > > ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, &preferred); > if (ret < 0) { > + error_setg(errp, "Failed getting the preferred target"); > goto err; > } > init->target = preferred.target; > } > ret = ioctl(cpufd, KVM_ARM_VCPU_INIT, init); > if (ret < 0) { > + error_setg(errp, "Failed the init of the scratch vcpu"); > goto err; > } > > @@ -324,6 +329,7 @@ static void > kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) > bool el2_supported; > bool pmu_supported = false; > uint64_t features = 0; > + Error *local_err = NULL; > int err; > > ahcf->target = QEMU_KVM_ARM_TARGET_NONE; > @@ -371,7 +377,8 @@ static void > kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) > features |= 1ULL << ARM_FEATURE_PMU; > } > > - if (!kvm_arm_create_scratch_host_vcpu(fdarray, &init)) { > + if (!kvm_arm_create_scratch_host_vcpu(fdarray, &init, &local_err)) { > + error_report_err(local_err); > return; > } > > @@ -2653,8 +2660,10 @@ void arm_cpu_kvm_set_irq(void *arm_cpu, int irq, int > level) > void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3) > { > int fdarray[3]; > + Error *local_err = NULL; > > - if (!kvm_arm_create_scratch_host_vcpu(fdarray, NULL)) { > + if (!kvm_arm_create_scratch_host_vcpu(fdarray, NULL, &local_err)) { > + error_report_err(local_err); > return; > } > > -- > 2.53.0 > >
Reviewed-by: Gustavo Romero <[email protected]> Cheers, Gustavo
