target/arm/cpu: adjust virtual time for all KVM arm cpus

Virtual time adjustment was implemented for virt-5.0 machine type,
but the cpu property was enabled only for host-passthrough and max
cpu model.  Let's add it for any KVM arm cpu which has the generic
timer feature enabled.

Signed-off-by: Ying Fang <fangying1@huawei.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Message-id: 20200608121243.2076-1-fangying1@huawei.com
[PMM: minor commit message tweak, removed inaccurate
 suggested-by tag]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
fangying 2020-06-16 10:32:29 +01:00 committed by Peter Maydell
parent d7a64d0063
commit 9e6f8d8aab
3 changed files with 15 additions and 13 deletions

View File

@ -1245,6 +1245,10 @@ void arm_cpu_post_init(Object *obj)
if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) { if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) {
qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property); qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property);
} }
if (kvm_enabled()) {
kvm_arm_add_vcpu_properties(obj);
}
} }
static void arm_cpu_finalizefn(Object *obj) static void arm_cpu_finalizefn(Object *obj)
@ -2029,7 +2033,6 @@ static void arm_max_initfn(Object *obj)
if (kvm_enabled()) { if (kvm_enabled()) {
kvm_arm_set_cpu_features_from_host(cpu); kvm_arm_set_cpu_features_from_host(cpu);
kvm_arm_add_vcpu_properties(obj);
} else { } else {
cortex_a15_initfn(obj); cortex_a15_initfn(obj);
@ -2183,7 +2186,6 @@ static void arm_host_initfn(Object *obj)
if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) { if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
aarch64_add_sve_properties(obj); aarch64_add_sve_properties(obj);
} }
kvm_arm_add_vcpu_properties(obj);
arm_cpu_post_init(obj); arm_cpu_post_init(obj);
} }

View File

@ -592,7 +592,6 @@ static void aarch64_max_initfn(Object *obj)
if (kvm_enabled()) { if (kvm_enabled()) {
kvm_arm_set_cpu_features_from_host(cpu); kvm_arm_set_cpu_features_from_host(cpu);
kvm_arm_add_vcpu_properties(obj);
} else { } else {
uint64_t t; uint64_t t;
uint32_t u; uint32_t u;

View File

@ -194,17 +194,18 @@ static void kvm_no_adjvtime_set(Object *obj, bool value, Error **errp)
/* KVM VCPU properties should be prefixed with "kvm-". */ /* KVM VCPU properties should be prefixed with "kvm-". */
void kvm_arm_add_vcpu_properties(Object *obj) void kvm_arm_add_vcpu_properties(Object *obj)
{ {
if (!kvm_enabled()) { ARMCPU *cpu = ARM_CPU(obj);
return; CPUARMState *env = &cpu->env;
}
ARM_CPU(obj)->kvm_adjvtime = true; if (arm_feature(env, ARM_FEATURE_GENERIC_TIMER)) {
cpu->kvm_adjvtime = true;
object_property_add_bool(obj, "kvm-no-adjvtime", kvm_no_adjvtime_get, object_property_add_bool(obj, "kvm-no-adjvtime", kvm_no_adjvtime_get,
kvm_no_adjvtime_set); kvm_no_adjvtime_set);
object_property_set_description(obj, "kvm-no-adjvtime", object_property_set_description(obj, "kvm-no-adjvtime",
"Set on to disable the adjustment of " "Set on to disable the adjustment of "
"the virtual counter. VM stopped time " "the virtual counter. VM stopped time "
"will be counted."); "will be counted.");
}
} }
bool kvm_arm_pmu_supported(CPUState *cpu) bool kvm_arm_pmu_supported(CPUState *cpu)