Commit 9e6f8d8a authored by @zhanghailiang's avatar @zhanghailiang Committed by Peter Maydell
Browse files

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: default avatarYing Fang <fangying1@huawei.com>
Reviewed-by: default avatarAndrew 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: default avatarPeter Maydell <peter.maydell@linaro.org>
parent d7a64d00
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1245,6 +1245,10 @@ void arm_cpu_post_init(Object *obj)
    if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) {
        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)
@@ -2029,7 +2033,6 @@ static void arm_max_initfn(Object *obj)

    if (kvm_enabled()) {
        kvm_arm_set_cpu_features_from_host(cpu);
        kvm_arm_add_vcpu_properties(obj);
    } else {
        cortex_a15_initfn(obj);

@@ -2183,7 +2186,6 @@ static void arm_host_initfn(Object *obj)
    if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
        aarch64_add_sve_properties(obj);
    }
    kvm_arm_add_vcpu_properties(obj);
    arm_cpu_post_init(obj);
}

+0 −1
Original line number Diff line number Diff line
@@ -592,7 +592,6 @@ static void aarch64_max_initfn(Object *obj)

    if (kvm_enabled()) {
        kvm_arm_set_cpu_features_from_host(cpu);
        kvm_arm_add_vcpu_properties(obj);
    } else {
        uint64_t t;
        uint32_t u;
+11 −10
Original line number Diff line number Diff line
@@ -194,11 +194,11 @@ static void kvm_no_adjvtime_set(Object *obj, bool value, Error **errp)
/* KVM VCPU properties should be prefixed with "kvm-". */
void kvm_arm_add_vcpu_properties(Object *obj)
{
    if (!kvm_enabled()) {
        return;
    }
    ARMCPU *cpu = ARM_CPU(obj);
    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,
                                 kvm_no_adjvtime_set);
        object_property_set_description(obj, "kvm-no-adjvtime",
@@ -206,6 +206,7 @@ void kvm_arm_add_vcpu_properties(Object *obj)
                                        "the virtual counter. VM stopped time "
                                        "will be counted.");
    }
}

bool kvm_arm_pmu_supported(CPUState *cpu)
{