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


Reply via email to