Suggest something like

  arget/loongarch: Fix error handling of KVM feature checks

That way, the nature of the patch (it's an error handling bug fix) is
obvious at a glance.

Bibo Mao <maob...@loongson.cn> writes:

> For some paravirt KVM features, if user forces to enable it however
> KVM does not support, qemu should fail to run. Here set error message
> and return directly in function kvm_arch_init_vcpu().
>

Please add

  Fixes: 6edd2a9bec90 (target/loongarch/kvm: Implement LoongArch PMU extension)
  Fixes: 936c3f4d7916 (target/loongarch: Use auto method with LSX feature)
  Fixes: 5e360dabedb1 (target/loongarch: Use auto method with LASX feature)
  Fixes: 620d9bd0022e (target/loongarch: Add paravirt ipi feature detection) 

> Signed-off-by: Bibo Mao <maob...@loongson.cn>
> ---
>  target/loongarch/kvm/kvm.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
> index 28735c80be..b7f370ba97 100644
> --- a/target/loongarch/kvm/kvm.c
> +++ b/target/loongarch/kvm/kvm.c
   int kvm_arch_init_vcpu(CPUState *cs)
   {
       uint64_t val;
       int ret;
       Error *local_err = NULL;

       ret = 0;

Please drop this assignment, it's useless.

       qemu_add_vm_change_state_handler(kvm_loongarch_vm_stage_change, cs);

       if (!kvm_get_one_reg(cs, KVM_REG_LOONGARCH_DEBUG_INST, &val)) {
           brk_insn = val;
       }

> @@ -1091,21 +1091,25 @@ int kvm_arch_init_vcpu(CPUState *cs)
>      ret = kvm_cpu_check_lsx(cs, &local_err);
>      if (ret < 0) {
>          error_report_err(local_err);
> +        return ret;
>      }
>  
>      ret = kvm_cpu_check_lasx(cs, &local_err);
>      if (ret < 0) {
>          error_report_err(local_err);
> +        return ret;
>      }
>  
>      ret = kvm_cpu_check_lbt(cs, &local_err);
>      if (ret < 0) {
>          error_report_err(local_err);
> +        return ret;
>      }
>  
>      ret = kvm_cpu_check_pmu(cs, &local_err);
>      if (ret < 0) {
>          error_report_err(local_err);
> +        return ret;
>      }
>  

Recommend to

>      ret = kvm_cpu_check_pv_features(cs, &local_err);
       if (ret < 0) {
           error_report_err(local_err);
  +        return ret;
       }

  -    return ret;
       return 0;
   }

Why?  Have a look at commit 6edd2a9bec90:

@@ -793,6 +828,12 @@ int kvm_arch_init_vcpu(CPUState *cs)
     if (ret < 0) {
         error_report_err(local_err);
     }
+
+    ret = kvm_cpu_check_pmu(cs, &local_err);
+    if (ret < 0) {
+        error_report_err(local_err);
+    }
+
     return ret;
 }

The new call broke the previous call's error handling.  Easy mistake to
make.  Less easy with my version.

With that
Reviewed-by: Markus Armbruster <arm...@redhat.com>

Thanks!


Reply via email to