s390x: replace cpu_s390x_init() with cpu_generic_init()

cpu_s390x_init() is used only *-user targets indirectly
via cpu_init() macro and has a hack to assign ids to created
cpus (I'm not sure if 'id' really matters to *-user emulation).

So to on safe side, instead of having custom wrapper to do numbering
replace it with cpu_generic_init() and use S390CPUClass::next_cpu_id
which could serve the same purpose as static variable and move cpu->id
initialization to s390_cpu_initfn for CONFIG_USER_ONLY use-case.

PS:
ifdef is ugly but it allows us to hide s390x detail that isn't
set by *-user targets and reuse generic cpu creation utility
for btoh machine and user emulation.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Message-Id: <1504185578-80843-1-git-send-email-imammedo@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Igor Mammedov 2017-08-31 15:19:38 +02:00 committed by Eduardo Habkost
parent 3d592ffbab
commit 6ad76dfd13
3 changed files with 8 additions and 16 deletions

View File

@ -306,6 +306,13 @@ static void s390_cpu_initfn(Object *obj)
inited = true; inited = true;
s390x_translate_init(); s390x_translate_init();
} }
#if defined(CONFIG_USER_ONLY)
{
S390CPUClass *scc = S390_CPU_GET_CLASS(obj);
cpu->id = scc->next_cpu_id;
}
#endif
} }
static void s390_cpu_finalize(Object *obj) static void s390_cpu_finalize(Object *obj)

View File

@ -688,8 +688,7 @@ const char *s390_default_cpu_model_name(void);
/* helper.c */ /* helper.c */
S390CPU *cpu_s390x_init(const char *cpu_model); #define cpu_init(cpu_model) cpu_generic_init(TYPE_S390_CPU, cpu_model)
#define cpu_init(model) CPU(cpu_s390x_init(model))
S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp); S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp);
/* you can call this signal handler from your SIGBUS and SIGSEGV /* you can call this signal handler from your SIGBUS and SIGSEGV
signal handlers to inform the virtual CPU of exceptions. non zero signal handlers to inform the virtual CPU of exceptions. non zero

View File

@ -129,20 +129,6 @@ out:
return cpu; return cpu;
} }
S390CPU *cpu_s390x_init(const char *cpu_model)
{
Error *err = NULL;
S390CPU *cpu;
/* Use to track CPU ID for linux-user only */
static int64_t next_cpu_id;
cpu = s390x_new_cpu(cpu_model, next_cpu_id++, &err);
if (err) {
error_report_err(err);
}
return cpu;
}
#ifndef CONFIG_USER_ONLY #ifndef CONFIG_USER_ONLY
hwaddr s390_cpu_get_phys_page_debug(CPUState *cs, vaddr vaddr) hwaddr s390_cpu_get_phys_page_debug(CPUState *cs, vaddr vaddr)