Commit 8f22e0df authored by Andreas Färber's avatar Andreas Färber
Browse files

target-s390x: QOM'ify CPU init



Move code from cpu_s390x_init() into an initfn.

Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
Tested-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
parent 1ac1a749
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -45,6 +45,30 @@ static void s390_cpu_reset(CPUState *s)
    s390_add_running_cpu(env);
}

static void s390_cpu_initfn(Object *obj)
{
    S390CPU *cpu = S390_CPU(obj);
    CPUS390XState *env = &cpu->env;
    static int cpu_num = 0;
#if !defined(CONFIG_USER_ONLY)
    struct tm tm;
#endif

    cpu_exec_init(env);
#if !defined(CONFIG_USER_ONLY)
    qemu_get_timedate(&tm, 0);
    env->tod_offset = TOD_UNIX_EPOCH +
                      (time2tod(mktimegm(&tm)) * 1000000000ULL);
    env->tod_basetime = 0;
    env->tod_timer = qemu_new_timer_ns(vm_clock, s390x_tod_timer, env);
    env->cpu_timer = qemu_new_timer_ns(vm_clock, s390x_cpu_timer, env);
#endif
    env->cpu_num = cpu_num++;
    env->ext_index = -1;

    cpu_reset(CPU(cpu));
}

static void s390_cpu_class_init(ObjectClass *oc, void *data)
{
    S390CPUClass *scc = S390_CPU_CLASS(oc);
@@ -58,6 +82,7 @@ static const TypeInfo s390_cpu_type_info = {
    .name = TYPE_S390_CPU,
    .parent = TYPE_CPU,
    .instance_size = sizeof(S390CPU),
    .instance_init = s390_cpu_initfn,
    .abstract = false,
    .class_size = sizeof(S390CPUClass),
    .class_init = s390_cpu_class_init,
+3 −0
Original line number Diff line number Diff line
@@ -288,6 +288,9 @@ int cpu_s390x_handle_mmu_fault (CPUS390XState *env, target_ulong address, int rw


#ifndef CONFIG_USER_ONLY
void s390x_tod_timer(void *opaque);
void s390x_cpu_timer(void *opaque);

int s390_virtio_hypercall(CPUS390XState *env, uint64_t mem, uint64_t hypercall);

#ifdef CONFIG_KVM
+3 −18
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@
#endif

#ifndef CONFIG_USER_ONLY
static void s390x_tod_timer(void *opaque)
void s390x_tod_timer(void *opaque)
{
    CPUS390XState *env = opaque;

@@ -59,7 +59,7 @@ static void s390x_tod_timer(void *opaque)
    cpu_interrupt(env, CPU_INTERRUPT_HARD);
}

static void s390x_cpu_timer(void *opaque)
void s390x_cpu_timer(void *opaque)
{
    CPUS390XState *env = opaque;

@@ -72,32 +72,17 @@ CPUS390XState *cpu_s390x_init(const char *cpu_model)
{
    S390CPU *cpu;
    CPUS390XState *env;
#if !defined (CONFIG_USER_ONLY)
    struct tm tm;
#endif
    static int inited = 0;
    static int cpu_num = 0;

    cpu = S390_CPU(object_new(TYPE_S390_CPU));
    env = &cpu->env;
    cpu_exec_init(env);

    if (tcg_enabled() && !inited) {
        inited = 1;
        s390x_translate_init();
    }

#if !defined(CONFIG_USER_ONLY)
    qemu_get_timedate(&tm, 0);
    env->tod_offset = TOD_UNIX_EPOCH +
                      (time2tod(mktimegm(&tm)) * 1000000000ULL);
    env->tod_basetime = 0;
    env->tod_timer = qemu_new_timer_ns(vm_clock, s390x_tod_timer, env);
    env->cpu_timer = qemu_new_timer_ns(vm_clock, s390x_cpu_timer, env);
#endif
    env->cpu_model_str = cpu_model;
    env->cpu_num = cpu_num++;
    env->ext_index = -1;
    cpu_reset(CPU(cpu));
    qemu_init_vcpu(env);
    return env;
}