* [PATCH 0/3] target/loongarch: Solve some issues reported from coccinelle @ 2025-03-13 9:13 Bibo Mao 2025-03-13 9:13 ` [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features Bibo Mao ` (2 more replies) 0 siblings, 3 replies; 15+ messages in thread From: Bibo Mao @ 2025-03-13 9:13 UTC (permalink / raw) To: Song Gao; +Cc: Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini This patch set solves errors reported by coccinelle tool with commands: spatch --sp-file scripts/coccinelle/*.cocci --dir target/loongarch/ spatch --sp-file scripts/coccinelle/*.cocci --dir hw/loongarch/ The main problem is that qemu should fail to run when feature is forced to enabled however KVM does not support it, rather than report error and continue to run. Bibo Mao (3): target/loongarch: Return directly when detect KVM disabled features hw/loongarch/virt: Remove unnecessary NULL pointer checking target/loongarch: Remove unnecessary temporary variable assignment hw/loongarch/virt.c | 12 +++--------- target/loongarch/kvm/kvm.c | 4 ++++ target/loongarch/tcg/tlb_helper.c | 5 ++--- 3 files changed, 9 insertions(+), 12 deletions(-) base-commit: 825b96dbcee23d134b691fc75618b59c5f53da32 -- 2.39.3 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features 2025-03-13 9:13 [PATCH 0/3] target/loongarch: Solve some issues reported from coccinelle Bibo Mao @ 2025-03-13 9:13 ` Bibo Mao 2025-03-13 10:26 ` Markus Armbruster 2025-03-13 9:13 ` [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking Bibo Mao 2025-03-13 9:13 ` [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment Bibo Mao 2 siblings, 1 reply; 15+ messages in thread From: Bibo Mao @ 2025-03-13 9:13 UTC (permalink / raw) To: Song Gao; +Cc: Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini 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(). Signed-off-by: Bibo Mao <maobibo@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 @@ -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; } ret = kvm_cpu_check_pv_features(cs, &local_err); -- 2.39.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features 2025-03-13 9:13 ` [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features Bibo Mao @ 2025-03-13 10:26 ` Markus Armbruster 2025-03-13 11:17 ` bibo mao 0 siblings, 1 reply; 15+ messages in thread From: Markus Armbruster @ 2025-03-13 10:26 UTC (permalink / raw) To: Bibo Mao Cc: Song Gao, Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini 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 <maobibo@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 <maobibo@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 <armbru@redhat.com> Thanks! ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features 2025-03-13 10:26 ` Markus Armbruster @ 2025-03-13 11:17 ` bibo mao 0 siblings, 0 replies; 15+ messages in thread From: bibo mao @ 2025-03-13 11:17 UTC (permalink / raw) To: Markus Armbruster; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini On 2025/3/13 下午6:26, Markus Armbruster wrote: > Suggest something like > > target/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. yeap, will modify title like this. > > Bibo Mao <maobibo@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) OK, will add these fixes tag. > >> Signed-off-by: Bibo Mao <maobibo@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. Sure, will do. > > 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: I agree. That is simple and easy to understand, will do like this. Regards Bibo Mao > > @@ -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 <armbru@redhat.com> > > Thanks! > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-13 9:13 [PATCH 0/3] target/loongarch: Solve some issues reported from coccinelle Bibo Mao 2025-03-13 9:13 ` [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features Bibo Mao @ 2025-03-13 9:13 ` Bibo Mao 2025-03-13 10:32 ` Markus Armbruster 2025-03-13 9:13 ` [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment Bibo Mao 2 siblings, 1 reply; 15+ messages in thread From: Bibo Mao @ 2025-03-13 9:13 UTC (permalink / raw) To: Song Gao; +Cc: Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini There is NULL pointer checking function error_propagate() already, it is not necessary to add checking for function parameter. Here remove NULL pointer checking with function parameter. Signed-off-by: Bibo Mao <maobibo@loongson.cn> --- hw/loongarch/virt.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index a5840ff968..ab951fc642 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -913,9 +913,7 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; numa_cpu_pre_plug(cpu_slot, dev, &err); out: - if (err) { - error_propagate(errp, err); - } + error_propagate(errp, err); } static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, @@ -935,9 +933,7 @@ static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, } hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); - if (err) { - error_propagate(errp, err); - } + error_propagate(errp, err); } static void virt_cpu_unplug(HotplugHandler *hotplug_dev, @@ -1001,9 +997,7 @@ static void virt_cpu_plug(HotplugHandler *hotplug_dev, if (lvms->acpi_ged) { hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); - if (err) { - error_propagate(errp, err); - } + error_propagate(errp, err); } return; -- 2.39.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-13 9:13 ` [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking Bibo Mao @ 2025-03-13 10:32 ` Markus Armbruster 2025-03-13 11:22 ` bibo mao 2025-03-14 2:27 ` bibo mao 0 siblings, 2 replies; 15+ messages in thread From: Markus Armbruster @ 2025-03-13 10:32 UTC (permalink / raw) To: Bibo Mao Cc: Song Gao, Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini Bibo Mao <maobibo@loongson.cn> writes: > There is NULL pointer checking function error_propagate() already, > it is not necessary to add checking for function parameter. Here remove > NULL pointer checking with function parameter. > > Signed-off-by: Bibo Mao <maobibo@loongson.cn> > --- > hw/loongarch/virt.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c > index a5840ff968..ab951fc642 100644 > --- a/hw/loongarch/virt.c > +++ b/hw/loongarch/virt.c > @@ -913,9 +913,7 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; > numa_cpu_pre_plug(cpu_slot, dev, &err); > out: > - if (err) { > - error_propagate(errp, err); > - } > + error_propagate(errp, err); > } > > static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, > @@ -935,9 +933,7 @@ static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, > } > > hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > - if (err) { > - error_propagate(errp, err); > - } > + error_propagate(errp, err); > } This looks correct. But I believe we can eliminate error propagation here. Untested patch appended. > > static void virt_cpu_unplug(HotplugHandler *hotplug_dev, > @@ -1001,9 +997,7 @@ static void virt_cpu_plug(HotplugHandler *hotplug_dev, > > if (lvms->acpi_ged) { > hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > - if (err) { > - error_propagate(errp, err); > - } > + error_propagate(errp, err); > } > > return; Here, I'd recommend if (lvms->acpi_ged) { hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); if (err) { error_propagate(errp, err); + return; } because it makes future screwups harder. diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index a5840ff968..4674bd9163 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, LoongArchCPU *cpu = LOONGARCH_CPU(dev); CPUState *cs = CPU(dev); CPUArchId *cpu_slot; - Error *err = NULL; LoongArchCPUTopo topo; int arch_id; if (lvms->acpi_ged) { if ((cpu->thread_id < 0) || (cpu->thread_id >= ms->smp.threads)) { - error_setg(&err, + error_setg(errp, "Invalid thread-id %u specified, must be in range 1:%u", cpu->thread_id, ms->smp.threads - 1); - goto out; + return; } if ((cpu->core_id < 0) || (cpu->core_id >= ms->smp.cores)) { - error_setg(&err, + error_setg(errp, "Invalid core-id %u specified, must be in range 1:%u", cpu->core_id, ms->smp.cores - 1); - goto out; + return; } if ((cpu->socket_id < 0) || (cpu->socket_id >= ms->smp.sockets)) { - error_setg(&err, + error_setg(errp, "Invalid socket-id %u specified, must be in range 1:%u", cpu->socket_id, ms->smp.sockets - 1); - goto out; + return; } topo.socket_id = cpu->socket_id; @@ -891,11 +890,11 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, arch_id = virt_get_arch_id_from_topo(ms, &topo); cpu_slot = virt_find_cpu_slot(ms, arch_id); if (CPU(cpu_slot->cpu)) { - error_setg(&err, + error_setg(errp, "cpu(id%d=%d:%d:%d) with arch-id %" PRIu64 " exists", cs->cpu_index, cpu->socket_id, cpu->core_id, cpu->thread_id, cpu_slot->arch_id); - goto out; + return; } } else { /* For cold-add cpu, find empty cpu slot */ @@ -911,33 +910,24 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, cpu->env.address_space_iocsr = &lvms->as_iocsr; cpu->phy_id = cpu_slot->arch_id; cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; - numa_cpu_pre_plug(cpu_slot, dev, &err); -out: - if (err) { - error_propagate(errp, err); - } + numa_cpu_pre_plug(cpu_slot, dev, errp); } static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { LoongArchVirtMachineState *lvms = LOONGARCH_VIRT_MACHINE(hotplug_dev); - Error *err = NULL; LoongArchCPU *cpu = LOONGARCH_CPU(dev); CPUState *cs = CPU(dev); if (cs->cpu_index == 0) { - error_setg(&err, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", + error_setg(errp, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", cs->cpu_index, cpu->socket_id, cpu->core_id, cpu->thread_id); - error_propagate(errp, err); return; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); - if (err) { - error_propagate(errp, err); - } + hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, errp); } static void virt_cpu_unplug(HotplugHandler *hotplug_dev, ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-13 10:32 ` Markus Armbruster @ 2025-03-13 11:22 ` bibo mao 2025-03-14 2:27 ` bibo mao 1 sibling, 0 replies; 15+ messages in thread From: bibo mao @ 2025-03-13 11:22 UTC (permalink / raw) To: Markus Armbruster; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini On 2025/3/13 下午6:32, Markus Armbruster wrote: > Bibo Mao <maobibo@loongson.cn> writes: > >> There is NULL pointer checking function error_propagate() already, >> it is not necessary to add checking for function parameter. Here remove >> NULL pointer checking with function parameter. >> >> Signed-off-by: Bibo Mao <maobibo@loongson.cn> >> --- >> hw/loongarch/virt.c | 12 +++--------- >> 1 file changed, 3 insertions(+), 9 deletions(-) >> >> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c >> index a5840ff968..ab951fc642 100644 >> --- a/hw/loongarch/virt.c >> +++ b/hw/loongarch/virt.c >> @@ -913,9 +913,7 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, >> cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; >> numa_cpu_pre_plug(cpu_slot, dev, &err); >> out: >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } >> >> static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, >> @@ -935,9 +933,7 @@ static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, >> } >> >> hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } > > This looks correct. But I believe we can eliminate error propagation > here. Untested patch appended. Sure, will eliminate error propagation and return earlier. Previously I always consider correctness and neglect these coding style details, that is actually another gap -:) Regards Bibo Mao > >> >> static void virt_cpu_unplug(HotplugHandler *hotplug_dev, >> @@ -1001,9 +997,7 @@ static void virt_cpu_plug(HotplugHandler *hotplug_dev, >> >> if (lvms->acpi_ged) { >> hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } >> >> return; > > Here, I'd recommend > > if (lvms->acpi_ged) { > hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > if (err) { > error_propagate(errp, err); > + return; > } > > because it makes future screwups harder. > > > diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c > index a5840ff968..4674bd9163 100644 > --- a/hw/loongarch/virt.c > +++ b/hw/loongarch/virt.c > @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > LoongArchCPU *cpu = LOONGARCH_CPU(dev); > CPUState *cs = CPU(dev); > CPUArchId *cpu_slot; > - Error *err = NULL; > LoongArchCPUTopo topo; > int arch_id; > > if (lvms->acpi_ged) { > if ((cpu->thread_id < 0) || (cpu->thread_id >= ms->smp.threads)) { > - error_setg(&err, > + error_setg(errp, > "Invalid thread-id %u specified, must be in range 1:%u", > cpu->thread_id, ms->smp.threads - 1); > - goto out; > + return; > } > > if ((cpu->core_id < 0) || (cpu->core_id >= ms->smp.cores)) { > - error_setg(&err, > + error_setg(errp, > "Invalid core-id %u specified, must be in range 1:%u", > cpu->core_id, ms->smp.cores - 1); > - goto out; > + return; > } > > if ((cpu->socket_id < 0) || (cpu->socket_id >= ms->smp.sockets)) { > - error_setg(&err, > + error_setg(errp, > "Invalid socket-id %u specified, must be in range 1:%u", > cpu->socket_id, ms->smp.sockets - 1); > - goto out; > + return; > } > > topo.socket_id = cpu->socket_id; > @@ -891,11 +890,11 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > arch_id = virt_get_arch_id_from_topo(ms, &topo); > cpu_slot = virt_find_cpu_slot(ms, arch_id); > if (CPU(cpu_slot->cpu)) { > - error_setg(&err, > + error_setg(errp, > "cpu(id%d=%d:%d:%d) with arch-id %" PRIu64 " exists", > cs->cpu_index, cpu->socket_id, cpu->core_id, > cpu->thread_id, cpu_slot->arch_id); > - goto out; > + return; > } > } else { > /* For cold-add cpu, find empty cpu slot */ > @@ -911,33 +910,24 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > cpu->env.address_space_iocsr = &lvms->as_iocsr; > cpu->phy_id = cpu_slot->arch_id; > cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; > - numa_cpu_pre_plug(cpu_slot, dev, &err); > -out: > - if (err) { > - error_propagate(errp, err); > - } > + numa_cpu_pre_plug(cpu_slot, dev, errp); > } > > static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, > DeviceState *dev, Error **errp) > { > LoongArchVirtMachineState *lvms = LOONGARCH_VIRT_MACHINE(hotplug_dev); > - Error *err = NULL; > LoongArchCPU *cpu = LOONGARCH_CPU(dev); > CPUState *cs = CPU(dev); > > if (cs->cpu_index == 0) { > - error_setg(&err, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", > + error_setg(errp, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", > cs->cpu_index, cpu->socket_id, > cpu->core_id, cpu->thread_id); > - error_propagate(errp, err); > return; > } > > - hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > - if (err) { > - error_propagate(errp, err); > - } > + hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, errp); > } > > static void virt_cpu_unplug(HotplugHandler *hotplug_dev, > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-13 10:32 ` Markus Armbruster 2025-03-13 11:22 ` bibo mao @ 2025-03-14 2:27 ` bibo mao 2025-03-14 5:38 ` Markus Armbruster 1 sibling, 1 reply; 15+ messages in thread From: bibo mao @ 2025-03-14 2:27 UTC (permalink / raw) To: Markus Armbruster; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini On 2025/3/13 下午6:32, Markus Armbruster wrote: > Bibo Mao <maobibo@loongson.cn> writes: > >> There is NULL pointer checking function error_propagate() already, >> it is not necessary to add checking for function parameter. Here remove >> NULL pointer checking with function parameter. >> >> Signed-off-by: Bibo Mao <maobibo@loongson.cn> >> --- >> hw/loongarch/virt.c | 12 +++--------- >> 1 file changed, 3 insertions(+), 9 deletions(-) >> >> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c >> index a5840ff968..ab951fc642 100644 >> --- a/hw/loongarch/virt.c >> +++ b/hw/loongarch/virt.c >> @@ -913,9 +913,7 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, >> cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; >> numa_cpu_pre_plug(cpu_slot, dev, &err); >> out: >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } >> >> static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, >> @@ -935,9 +933,7 @@ static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, >> } >> >> hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } > > This looks correct. But I believe we can eliminate error propagation > here. Untested patch appended. > >> >> static void virt_cpu_unplug(HotplugHandler *hotplug_dev, >> @@ -1001,9 +997,7 @@ static void virt_cpu_plug(HotplugHandler *hotplug_dev, >> >> if (lvms->acpi_ged) { >> hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); >> - if (err) { >> - error_propagate(errp, err); >> - } >> + error_propagate(errp, err); >> } >> >> return; > > Here, I'd recommend > > if (lvms->acpi_ged) { > hotplug_handler_plug(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > if (err) { > error_propagate(errp, err); > + return; > } > > because it makes future screwups harder. > > > diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c > index a5840ff968..4674bd9163 100644 > --- a/hw/loongarch/virt.c > +++ b/hw/loongarch/virt.c > @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > LoongArchCPU *cpu = LOONGARCH_CPU(dev); > CPUState *cs = CPU(dev); > CPUArchId *cpu_slot; > - Error *err = NULL; > LoongArchCPUTopo topo; > int arch_id; > > if (lvms->acpi_ged) { > if ((cpu->thread_id < 0) || (cpu->thread_id >= ms->smp.threads)) { > - error_setg(&err, > + error_setg(errp, > "Invalid thread-id %u specified, must be in range 1:%u", > cpu->thread_id, ms->smp.threads - 1); > - goto out; > + return; Hi Markus, From APIs, it seems that function error_propagate() do much more than error appending, such as comparing dest_err with error_abort etc. Though caller function is local variable rather than error_abort/fatal/warn, error_propagate() seems useful. How about do propagate error and return directly as following: @@ -868,7 +868,8 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, error_setg(&err, "Invalid thread-id %u specified, must be in range 1:%u", cpu->thread_id, ms->smp.threads - 1); - goto out; + error_propagate(errp, err); + return; } Regards Bibo Mao > } > > if ((cpu->core_id < 0) || (cpu->core_id >= ms->smp.cores)) { > - error_setg(&err, > + error_setg(errp, > "Invalid core-id %u specified, must be in range 1:%u", > cpu->core_id, ms->smp.cores - 1); > - goto out; > + return; > } > > if ((cpu->socket_id < 0) || (cpu->socket_id >= ms->smp.sockets)) { > - error_setg(&err, > + error_setg(errp, > "Invalid socket-id %u specified, must be in range 1:%u", > cpu->socket_id, ms->smp.sockets - 1); > - goto out; > + return; > } > > topo.socket_id = cpu->socket_id; > @@ -891,11 +890,11 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > arch_id = virt_get_arch_id_from_topo(ms, &topo); > cpu_slot = virt_find_cpu_slot(ms, arch_id); > if (CPU(cpu_slot->cpu)) { > - error_setg(&err, > + error_setg(errp, > "cpu(id%d=%d:%d:%d) with arch-id %" PRIu64 " exists", > cs->cpu_index, cpu->socket_id, cpu->core_id, > cpu->thread_id, cpu_slot->arch_id); > - goto out; > + return; > } > } else { > /* For cold-add cpu, find empty cpu slot */ > @@ -911,33 +910,24 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, > cpu->env.address_space_iocsr = &lvms->as_iocsr; > cpu->phy_id = cpu_slot->arch_id; > cs->cpu_index = cpu_slot - ms->possible_cpus->cpus; > - numa_cpu_pre_plug(cpu_slot, dev, &err); > -out: > - if (err) { > - error_propagate(errp, err); > - } > + numa_cpu_pre_plug(cpu_slot, dev, errp); > } > > static void virt_cpu_unplug_request(HotplugHandler *hotplug_dev, > DeviceState *dev, Error **errp) > { > LoongArchVirtMachineState *lvms = LOONGARCH_VIRT_MACHINE(hotplug_dev); > - Error *err = NULL; > LoongArchCPU *cpu = LOONGARCH_CPU(dev); > CPUState *cs = CPU(dev); > > if (cs->cpu_index == 0) { > - error_setg(&err, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", > + error_setg(errp, "hot-unplug of boot cpu(id%d=%d:%d:%d) not supported", > cs->cpu_index, cpu->socket_id, > cpu->core_id, cpu->thread_id); > - error_propagate(errp, err); > return; > } > > - hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, &err); > - if (err) { > - error_propagate(errp, err); > - } > + hotplug_handler_unplug_request(HOTPLUG_HANDLER(lvms->acpi_ged), dev, errp); > } > > static void virt_cpu_unplug(HotplugHandler *hotplug_dev, > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-14 2:27 ` bibo mao @ 2025-03-14 5:38 ` Markus Armbruster 2025-03-14 6:28 ` bibo mao 0 siblings, 1 reply; 15+ messages in thread From: Markus Armbruster @ 2025-03-14 5:38 UTC (permalink / raw) To: bibo mao; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini bibo mao <maobibo@loongson.cn> writes: On 2025/3/13 下午6:32, Markus Armbruster wrote: [...] >> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c >> index a5840ff968..4674bd9163 100644 >> --- a/hw/loongarch/virt.c >> +++ b/hw/loongarch/virt.c >> @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, >> LoongArchCPU *cpu = LOONGARCH_CPU(dev); >> CPUState *cs = CPU(dev); >> CPUArchId *cpu_slot; >> - Error *err = NULL; >> LoongArchCPUTopo topo; >> int arch_id; >> >> if (lvms->acpi_ged) { >> if ((cpu->thread_id < 0) || (cpu->thread_id >= ms->smp.threads)) { >> - error_setg(&err, >> + error_setg(errp, >> "Invalid thread-id %u specified, must be in range 1:%u", >> cpu->thread_id, ms->smp.threads - 1); >> - goto out; >> + return; > > Hi Markus, > > From APIs, it seems that function error_propagate() do much more than > error appending, such as comparing dest_err with error_abort etc. Though > caller function is local variable rather than error_abort/fatal/warn, > error_propagate() seems useful. How about do propagate error and return > directly as following: > > @@ -868,7 +868,8 @@ static void virt_cpu_pre_plug(HotplugHandler > *hotplug_dev, > error_setg(&err, > "Invalid thread-id %u specified, must be in > range 1:%u", > cpu->thread_id, ms->smp.threads - 1); > - goto out; > + error_propagate(errp, err); > + return; > } This is strictly worse. One, it's more verbose. Two, the stack backtrace on failure is less useful, which matters when @errp is &error_abort, and when you set a breakpoint on error_handle(), abort(), or exit(). Three, it doesn't actually add useful functionality. To help you see the latter, let's compare the two versions, i.e. direct: error_setg(errp, ...) and propagate: two steps, first error_setg(&err, ...), and then error_propagate(errp, err); Cases: @errp can be NULL, &error_abort, &error_fatal, &error_warn, or a non-null pointer to variable containing NULL. 1. @errp is NULL Direct does nothing. Propagate step 1 creates an error object, and stores it in @err. Step 2 frees the error object. Roundabout way to do nothing. 2. @errp is &error_abort Direct creates an error object, reports it to stderr, and abort()s. Note that the stack backtrace shows where the error is created. Propagate step 1 creates an error object, and stores it in @err. Step 2 reports it to stderr, and abort()s. No difference, except the stack backtrace shows where the error is propagated, which is less useful. 3. @errp is &error_fatal Direct creates an error object, reports it to stderr, frees it, and exit(1)s. Propagate step 1 creates an error object, and stores it in @err. Step 2 reports it to stderr, frees it, and exit(1)s. No difference. 4. @errp is &error_warn Direct creates an error object, reports it to stderr, and frees it. Propagate step 1 creates an error object, and stores it in @err. Step 2 reports it to stderr, and frees it. No difference. 5. @errp points to variable containing NULL Direct creates an error object, and stores it in the variable. Propagate step 1 creates an error object, and stores it in @err. Step 2 copies it to the variable. No difference. Questions? [...] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-14 5:38 ` Markus Armbruster @ 2025-03-14 6:28 ` bibo mao 2025-03-14 6:58 ` bibo mao 2025-03-14 8:56 ` Markus Armbruster 0 siblings, 2 replies; 15+ messages in thread From: bibo mao @ 2025-03-14 6:28 UTC (permalink / raw) To: Markus Armbruster; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini On 2025/3/14 下午1:38, Markus Armbruster wrote: > bibo mao <maobibo@loongson.cn> writes: > > On 2025/3/13 下午6:32, Markus Armbruster wrote: > > [...] > >>> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c >>> index a5840ff968..4674bd9163 100644 >>> --- a/hw/loongarch/virt.c >>> +++ b/hw/loongarch/virt.c >>> @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler *hotplug_dev, >>> LoongArchCPU *cpu = LOONGARCH_CPU(dev); >>> CPUState *cs = CPU(dev); >>> CPUArchId *cpu_slot; >>> - Error *err = NULL; >>> LoongArchCPUTopo topo; >>> int arch_id; >>> >>> if (lvms->acpi_ged) { >>> if ((cpu->thread_id < 0) || (cpu->thread_id >= ms->smp.threads)) { >>> - error_setg(&err, >>> + error_setg(errp, >>> "Invalid thread-id %u specified, must be in range 1:%u", >>> cpu->thread_id, ms->smp.threads - 1); >>> - goto out; >>> + return; >> >> Hi Markus, >> >> From APIs, it seems that function error_propagate() do much more than >> error appending, such as comparing dest_err with error_abort etc. Though >> caller function is local variable rather than error_abort/fatal/warn, >> error_propagate() seems useful. How about do propagate error and return >> directly as following: >> >> @@ -868,7 +868,8 @@ static void virt_cpu_pre_plug(HotplugHandler >> *hotplug_dev, >> error_setg(&err, >> "Invalid thread-id %u specified, must be in >> range 1:%u", >> cpu->thread_id, ms->smp.threads - 1); >> - goto out; >> + error_propagate(errp, err); >> + return; >> } > > This is strictly worse. One, it's more verbose. Two, the stack > backtrace on failure is less useful, which matters when @errp is > &error_abort, and when you set a breakpoint on error_handle(), abort(), > or exit(). Three, it doesn't actually add useful functionality. > > To help you see the latter, let's compare the two versions, i.e. > > direct: error_setg(errp, ...) > > and > > propagate: two steps, first error_setg(&err, ...), and then > error_propagate(errp, err); > > Cases: @errp can be NULL, &error_abort, &error_fatal, &error_warn, or a > non-null pointer to variable containing NULL. > > 1. @errp is NULL > > Direct does nothing. > > Propagate step 1 creates an error object, and stores it in @err. > Step 2 frees the error object. Roundabout way to do nothing. > > 2. @errp is &error_abort > > Direct creates an error object, reports it to stderr, and abort()s. > Note that the stack backtrace shows where the error is created. > > Propagate step 1 creates an error object, and stores it in @err. > Step 2 reports it to stderr, and abort()s. No difference, except the > stack backtrace shows where the error is propagated, which is less > useful. > > 3. @errp is &error_fatal > > Direct creates an error object, reports it to stderr, frees it, and > exit(1)s. > > Propagate step 1 creates an error object, and stores it in @err. > Step 2 reports it to stderr, frees it, and exit(1)s. No difference. > > 4. @errp is &error_warn > > Direct creates an error object, reports it to stderr, and frees it. > > Propagate step 1 creates an error object, and stores it in @err. > Step 2 reports it to stderr, and frees it. No difference. > > 5. @errp points to variable containing NULL > > Direct creates an error object, and stores it in the variable. > > Propagate step 1 creates an error object, and stores it in @err. > Step 2 copies it to the variable. No difference. > > Questions? The question how to use error_propagate() comparing with error_setg() since there is such API. :) Regards Bibo Mao > > [...] > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-14 6:28 ` bibo mao @ 2025-03-14 6:58 ` bibo mao 2025-03-14 8:56 ` Markus Armbruster 1 sibling, 0 replies; 15+ messages in thread From: bibo mao @ 2025-03-14 6:58 UTC (permalink / raw) To: Markus Armbruster; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini On 2025/3/14 下午2:28, bibo mao wrote: > > > On 2025/3/14 下午1:38, Markus Armbruster wrote: >> bibo mao <maobibo@loongson.cn> writes: >> >> On 2025/3/13 下午6:32, Markus Armbruster wrote: >> >> [...] >> >>>> diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c >>>> index a5840ff968..4674bd9163 100644 >>>> --- a/hw/loongarch/virt.c >>>> +++ b/hw/loongarch/virt.c >>>> @@ -859,30 +859,29 @@ static void virt_cpu_pre_plug(HotplugHandler >>>> *hotplug_dev, >>>> LoongArchCPU *cpu = LOONGARCH_CPU(dev); >>>> CPUState *cs = CPU(dev); >>>> CPUArchId *cpu_slot; >>>> - Error *err = NULL; >>>> LoongArchCPUTopo topo; >>>> int arch_id; >>>> if (lvms->acpi_ged) { >>>> if ((cpu->thread_id < 0) || (cpu->thread_id >= >>>> ms->smp.threads)) { >>>> - error_setg(&err, >>>> + error_setg(errp, >>>> "Invalid thread-id %u specified, must be in >>>> range 1:%u", >>>> cpu->thread_id, ms->smp.threads - 1); >>>> - goto out; >>>> + return; >>> >>> Hi Markus, >>> >>> From APIs, it seems that function error_propagate() do much more than >>> error appending, such as comparing dest_err with error_abort etc. Though >>> caller function is local variable rather than error_abort/fatal/warn, >>> error_propagate() seems useful. How about do propagate error and return >>> directly as following: >>> >>> @@ -868,7 +868,8 @@ static void virt_cpu_pre_plug(HotplugHandler >>> *hotplug_dev, >>> error_setg(&err, >>> "Invalid thread-id %u specified, must be in >>> range 1:%u", >>> cpu->thread_id, ms->smp.threads - 1); >>> - goto out; >>> + error_propagate(errp, err); >>> + return; >>> } >> >> This is strictly worse. One, it's more verbose. Two, the stack >> backtrace on failure is less useful, which matters when @errp is >> &error_abort, and when you set a breakpoint on error_handle(), abort(), >> or exit(). Three, it doesn't actually add useful functionality. >> >> To help you see the latter, let's compare the two versions, i.e. >> >> direct: error_setg(errp, ...) >> >> and >> >> propagate: two steps, first error_setg(&err, ...), and then >> error_propagate(errp, err); >> >> Cases: @errp can be NULL, &error_abort, &error_fatal, &error_warn, or a >> non-null pointer to variable containing NULL. >> >> 1. @errp is NULL >> >> Direct does nothing. >> >> Propagate step 1 creates an error object, and stores it in @err. >> Step 2 frees the error object. Roundabout way to do nothing. >> >> 2. @errp is &error_abort >> >> Direct creates an error object, reports it to stderr, and abort()s. >> Note that the stack backtrace shows where the error is created. >> >> Propagate step 1 creates an error object, and stores it in @err. >> Step 2 reports it to stderr, and abort()s. No difference, except the >> stack backtrace shows where the error is propagated, which is less >> useful. >> >> 3. @errp is &error_fatal >> >> Direct creates an error object, reports it to stderr, frees it, and >> exit(1)s. >> >> Propagate step 1 creates an error object, and stores it in @err. >> Step 2 reports it to stderr, frees it, and exit(1)s. No difference. >> >> 4. @errp is &error_warn >> >> Direct creates an error object, reports it to stderr, and frees it. >> >> Propagate step 1 creates an error object, and stores it in @err. >> Step 2 reports it to stderr, and frees it. No difference. >> >> 5. @errp points to variable containing NULL >> >> Direct creates an error object, and stores it in the variable. >> >> Propagate step 1 creates an error object, and stores it in @err. >> Step 2 copies it to the variable. No difference. >> >> Questions? > The question how to use error_propagate() comparing with error_setg() > since there is such API. :) I know nothing about error module, almost 80% code is copied from others. From header file include/qapi/error.h, It seems that error_setg() is used in error report leaf function, error_propagate() is used by caller node function. Is that right? Regards Bibo Mao > > Regards > Bibo Mao >> >> [...] >> > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking 2025-03-14 6:28 ` bibo mao 2025-03-14 6:58 ` bibo mao @ 2025-03-14 8:56 ` Markus Armbruster 1 sibling, 0 replies; 15+ messages in thread From: Markus Armbruster @ 2025-03-14 8:56 UTC (permalink / raw) To: bibo mao; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini bibo mao <maobibo@loongson.cn> writes: > The question how to use error_propagate() comparing with error_setg() since there is such API. :) error_propagate() should be mostly avoided in new code. It still exists because plenty of old code uses it. It can also be used to keep only first of several errors, but that's rarely a good idea. There's usage advice in include/qapi/error.h's big comment. Relevant parts for your convenience: * = Passing errors around = * * Errors get passed to the caller through the conventional @errp * parameter. * * Create a new error and pass it to the caller: * error_setg(errp, "situation normal, all fouled up"); * * Call a function, receive an error from it, and pass it to the caller * - when the function returns a value that indicates failure, say * false: * if (!foo(arg, errp)) { * handle the error... * } * - when it does not, say because it is a void function: * ERRP_GUARD(); * foo(arg, errp); * if (*errp) { * handle the error... * } * More on ERRP_GUARD() below. * * Code predating ERRP_GUARD() still exists, and looks like this: * Error *err = NULL; * foo(arg, &err); * if (err) { * handle the error... * error_propagate(errp, err); // deprecated * } * Avoid in new code. Do *not* "optimize" it to * foo(arg, errp); * if (*errp) { // WRONG! * handle the error... * } * because errp may be NULL without the ERRP_GUARD() guard. * * But when all you do with the error is pass it on, please use * foo(arg, errp); * for readability. [...] * Pass an existing error to the caller: * error_propagate(errp, err); * This is rarely needed. When @err is a local variable, use of * ERRP_GUARD() commonly results in more readable code. * * Pass an existing error to the caller with the message modified: * error_propagate_prepend(errp, err, * "Could not frobnicate '%s': ", name); * This is more concise than * error_propagate(errp, err); // don't do this * error_prepend(errp, "Could not frobnicate '%s': ", name); * and works even when @errp is &error_fatal. * * Receive and accumulate multiple errors (first one wins): * Error *err = NULL, *local_err = NULL; * foo(arg, &err); * bar(arg, &local_err); * error_propagate(&err, local_err); * if (err) { * handle the error... * } * * Do *not* "optimize" this to * Error *err = NULL; * foo(arg, &err); * bar(arg, &err); // WRONG! * if (err) { * handle the error... * } * because this may pass a non-null err to bar(). * * Likewise, do *not* * Error *err = NULL; * if (cond1) { * error_setg(&err, ...); * } * if (cond2) { * error_setg(&err, ...); // WRONG! * } * because this may pass a non-null err to error_setg(). Questions? ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment 2025-03-13 9:13 [PATCH 0/3] target/loongarch: Solve some issues reported from coccinelle Bibo Mao 2025-03-13 9:13 ` [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features Bibo Mao 2025-03-13 9:13 ` [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking Bibo Mao @ 2025-03-13 9:13 ` Bibo Mao 2025-03-13 10:33 ` Markus Armbruster 2025-03-13 10:41 ` Philippe Mathieu-Daudé 2 siblings, 2 replies; 15+ messages in thread From: Bibo Mao @ 2025-03-13 9:13 UTC (permalink / raw) To: Song Gao; +Cc: Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini Temporary variable ret is assigned at last line and return, it can be removed and return directly. Signed-off-by: Bibo Mao <maobibo@loongson.cn> --- target/loongarch/tcg/tlb_helper.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/target/loongarch/tcg/tlb_helper.c b/target/loongarch/tcg/tlb_helper.c index 646dbf59de..182881a237 100644 --- a/target/loongarch/tcg/tlb_helper.c +++ b/target/loongarch/tcg/tlb_helper.c @@ -543,7 +543,7 @@ target_ulong helper_lddir(CPULoongArchState *env, target_ulong base, target_ulong level, uint32_t mem_idx) { CPUState *cs = env_cpu(env); - target_ulong badvaddr, index, phys, ret; + target_ulong badvaddr, index, phys; uint64_t dir_base, dir_width; if (unlikely((level == 0) || (level > 4))) { @@ -571,8 +571,7 @@ target_ulong helper_lddir(CPULoongArchState *env, target_ulong base, get_dir_base_width(env, &dir_base, &dir_width, level); index = (badvaddr >> dir_base) & ((1 << dir_width) - 1); phys = base | index << 3; - ret = ldq_phys(cs->as, phys) & TARGET_PHYS_MASK; - return ret; + return ldq_phys(cs->as, phys) & TARGET_PHYS_MASK; } void helper_ldpte(CPULoongArchState *env, target_ulong base, target_ulong odd, -- 2.39.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment 2025-03-13 9:13 ` [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment Bibo Mao @ 2025-03-13 10:33 ` Markus Armbruster 2025-03-13 10:41 ` Philippe Mathieu-Daudé 1 sibling, 0 replies; 15+ messages in thread From: Markus Armbruster @ 2025-03-13 10:33 UTC (permalink / raw) To: Bibo Mao; +Cc: Song Gao, Jiaxun Yang, qemu-devel, Paolo Bonzini Bibo Mao <maobibo@loongson.cn> writes: > Temporary variable ret is assigned at last line and return, it can > be removed and return directly. > > Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Markus Armbruster <armbru@redhat.com> ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment 2025-03-13 9:13 ` [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment Bibo Mao 2025-03-13 10:33 ` Markus Armbruster @ 2025-03-13 10:41 ` Philippe Mathieu-Daudé 1 sibling, 0 replies; 15+ messages in thread From: Philippe Mathieu-Daudé @ 2025-03-13 10:41 UTC (permalink / raw) To: Bibo Mao, Song Gao Cc: Jiaxun Yang, qemu-devel, Markus Armbruster, Paolo Bonzini On 13/3/25 10:13, Bibo Mao wrote: > Temporary variable ret is assigned at last line and return, it can > be removed and return directly. > > Signed-off-by: Bibo Mao <maobibo@loongson.cn> > --- > target/loongarch/tcg/tlb_helper.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-03-14 8:57 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-03-13 9:13 [PATCH 0/3] target/loongarch: Solve some issues reported from coccinelle Bibo Mao 2025-03-13 9:13 ` [PATCH 1/3] target/loongarch: Return directly when detect KVM disabled features Bibo Mao 2025-03-13 10:26 ` Markus Armbruster 2025-03-13 11:17 ` bibo mao 2025-03-13 9:13 ` [PATCH 2/3] hw/loongarch/virt: Remove unnecessary NULL pointer checking Bibo Mao 2025-03-13 10:32 ` Markus Armbruster 2025-03-13 11:22 ` bibo mao 2025-03-14 2:27 ` bibo mao 2025-03-14 5:38 ` Markus Armbruster 2025-03-14 6:28 ` bibo mao 2025-03-14 6:58 ` bibo mao 2025-03-14 8:56 ` Markus Armbruster 2025-03-13 9:13 ` [PATCH 3/3] target/loongarch: Remove unnecessary temporary variable assignment Bibo Mao 2025-03-13 10:33 ` Markus Armbruster 2025-03-13 10:41 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).