Simplify PMU logic by rewriting '!KVM' as 'TCG || HVF'
(ignoring QTest, because vCPUs are not available there).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/arm/cpu.c | 2 +-
target/arm/machine.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index b6a8ba83a46..0311ff315fe 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2352,7 +2352,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
if (arm_feature(env, ARM_FEATURE_PMU)) {
pmu_init(cpu);
- if (!kvm_enabled()) {
+ if (tcg_enabled() || hvf_enabled()) {
arm_register_pre_el_change_hook(cpu, &pmu_pre_el_change, 0);
arm_register_el_change_hook(cpu, &pmu_post_el_change, 0);
}
diff --git a/target/arm/machine.c b/target/arm/machine.c
index e442d485241..baa7ad25ca9 100644
--- a/target/arm/machine.c
+++ b/target/arm/machine.c
@@ -1,7 +1,7 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "qemu/error-report.h"
-#include "system/kvm.h"
+#include "system/hvf.h"
#include "system/tcg.h"
#include "kvm_arm.h"
#include "internals.h"
@@ -853,7 +853,7 @@ static int cpu_pre_save(void *opaque)
{
ARMCPU *cpu = opaque;
- if (!kvm_enabled()) {
+ if (tcg_enabled() || hvf_enabled()) {
pmu_op_start(&cpu->env);
}
@@ -888,7 +888,7 @@ static int cpu_post_save(void *opaque)
{
ARMCPU *cpu = opaque;
- if (!kvm_enabled()) {
+ if (tcg_enabled() || hvf_enabled()) {
pmu_op_finish(&cpu->env);
}
@@ -921,7 +921,7 @@ static int cpu_pre_load(void *opaque)
*/
env->irq_line_state = UINT32_MAX;
- if (!kvm_enabled()) {
+ if (tcg_enabled() || hvf_enabled()) {
pmu_op_start(env);
}
@@ -1013,7 +1013,7 @@ static int cpu_post_load(void *opaque, int version_id)
}
}
- if (!kvm_enabled()) {
+ if (tcg_enabled() || hvf_enabled()) {
pmu_op_finish(env);
}
--
2.49.0
On 6/30/25 6:09 AM, Philippe Mathieu-Daudé wrote:
> Simplify PMU logic by rewriting '!KVM' as 'TCG || HVF'
> (ignoring QTest, because vCPUs are not available there).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> target/arm/cpu.c | 2 +-
> target/arm/machine.c | 10 +++++-----
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index b6a8ba83a46..0311ff315fe 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -2352,7 +2352,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
> if (arm_feature(env, ARM_FEATURE_PMU)) {
> pmu_init(cpu);
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> arm_register_pre_el_change_hook(cpu, &pmu_pre_el_change, 0);
> arm_register_el_change_hook(cpu, &pmu_post_el_change, 0);
> }
> diff --git a/target/arm/machine.c b/target/arm/machine.c
> index e442d485241..baa7ad25ca9 100644
> --- a/target/arm/machine.c
> +++ b/target/arm/machine.c
> @@ -1,7 +1,7 @@
> #include "qemu/osdep.h"
> #include "cpu.h"
> #include "qemu/error-report.h"
> -#include "system/kvm.h"
> +#include "system/hvf.h"
> #include "system/tcg.h"
> #include "kvm_arm.h"
> #include "internals.h"
> @@ -853,7 +853,7 @@ static int cpu_pre_save(void *opaque)
> {
> ARMCPU *cpu = opaque;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_start(&cpu->env);
> }
>
> @@ -888,7 +888,7 @@ static int cpu_post_save(void *opaque)
> {
> ARMCPU *cpu = opaque;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_finish(&cpu->env);
> }
>
> @@ -921,7 +921,7 @@ static int cpu_pre_load(void *opaque)
> */
> env->irq_line_state = UINT32_MAX;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_start(env);
> }
>
> @@ -1013,7 +1013,7 @@ static int cpu_post_load(void *opaque, int version_id)
> }
> }
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_finish(env);
> }
>
If I understand correctly, this is supported for tcg and hvf, but not
kvm, right?
I'm just a bit confused by commit description mentioning "simplify
logic", which is more "make it explicit".
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Thanks,
Pierrick
On 6/30/25 6:09 AM, Philippe Mathieu-Daudé wrote:
> Simplify PMU logic by rewriting '!KVM' as 'TCG || HVF'
> (ignoring QTest, because vCPUs are not available there).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> target/arm/cpu.c | 2 +-
> target/arm/machine.c | 10 +++++-----
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index b6a8ba83a46..0311ff315fe 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -2352,7 +2352,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
> if (arm_feature(env, ARM_FEATURE_PMU)) {
> pmu_init(cpu);
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> arm_register_pre_el_change_hook(cpu, &pmu_pre_el_change, 0);
> arm_register_el_change_hook(cpu, &pmu_post_el_change, 0);
> }
> diff --git a/target/arm/machine.c b/target/arm/machine.c
> index e442d485241..baa7ad25ca9 100644
> --- a/target/arm/machine.c
> +++ b/target/arm/machine.c
> @@ -1,7 +1,7 @@
> #include "qemu/osdep.h"
> #include "cpu.h"
> #include "qemu/error-report.h"
> -#include "system/kvm.h"
> +#include "system/hvf.h"
> #include "system/tcg.h"
> #include "kvm_arm.h"
> #include "internals.h"
> @@ -853,7 +853,7 @@ static int cpu_pre_save(void *opaque)
> {
> ARMCPU *cpu = opaque;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_start(&cpu->env);
> }
>
> @@ -888,7 +888,7 @@ static int cpu_post_save(void *opaque)
> {
> ARMCPU *cpu = opaque;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_finish(&cpu->env);
> }
>
> @@ -921,7 +921,7 @@ static int cpu_pre_load(void *opaque)
> */
> env->irq_line_state = UINT32_MAX;
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_start(env);
> }
>
> @@ -1013,7 +1013,7 @@ static int cpu_post_load(void *opaque, int version_id)
> }
> }
>
> - if (!kvm_enabled()) {
> + if (tcg_enabled() || hvf_enabled()) {
> pmu_op_finish(env);
> }
>
If I understand correctly, this is supported for tcg and hvf, but not
kvm, right?
I'm just a bit confused by commit description mentioning "simplify
logic", which is more "make it explicit".
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Thanks,
Pierrick
© 2016 - 2025 Red Hat, Inc.