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:
parent
d7a64d0063
commit
9e6f8d8aab
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user