Re: [Qemu-devel] [PATCH v6 20/50] qom: Introduce CPUClass.tcg_initialize

2017-10-18 Thread Philippe Mathieu-Daudé
On 10/16/2017 02:25 PM, Richard Henderson wrote:
> Move target cpu tcg initialization to common code,
> called from cpu_exec_realizefn.
> 
> Cc: Andreas Färber 
> Signed-off-by: Richard Henderson 

much cleaner, esp. the CRIS part.
Reviewed-by: Philippe Mathieu-Daudé 

> ---
>  include/qom/cpu.h   |  8 ++--
>  target/sparc/cpu.h  |  2 +-
>  exec.c  |  7 ++-
>  target/alpha/cpu.c  |  5 +
>  target/alpha/translate.c|  6 --
>  target/arm/cpu.c|  6 +-
>  target/cris/cpu.c   | 16 ++--
>  target/hppa/cpu.c   |  3 +--
>  target/hppa/translate.c |  6 --
>  target/i386/cpu.c   |  5 +
>  target/i386/translate.c |  6 --
>  target/lm32/cpu.c   |  7 +--
>  target/m68k/cpu.c   |  7 +--
>  target/microblaze/cpu.c |  7 +--
>  target/mips/cpu.c   |  5 +
>  target/mips/translate.c |  7 ---
>  target/moxie/cpu.c  |  7 +--
>  target/moxie/translate.c|  6 --
>  target/nios2/cpu.c  |  7 +--
>  target/openrisc/cpu.c   |  7 +--
>  target/ppc/translate.c  |  6 --
>  target/ppc/translate_init.c |  5 +
>  target/s390x/cpu.c  |  7 +--
>  target/sh4/cpu.c|  5 +
>  target/sh4/translate.c  |  7 ---
>  target/sparc/cpu.c  |  5 +
>  target/sparc/translate.c|  9 +
>  target/tilegx/cpu.c |  7 +--
>  target/tricore/cpu.c|  5 +
>  target/tricore/translate.c  |  5 +
>  target/unicore32/cpu.c  |  7 +--
>  target/xtensa/cpu.c |  7 +--
>  32 files changed, 40 insertions(+), 165 deletions(-)



Re: [Qemu-devel] [PATCH v6 20/50] qom: Introduce CPUClass.tcg_initialize

2017-10-18 Thread Andreas Färber
Am 18.10.2017 um 01:53 schrieb Emilio G. Cota:
> On Mon, Oct 16, 2017 at 10:25:39 -0700, Richard Henderson wrote:
>> Move target cpu tcg initialization to common code,
>> called from cpu_exec_realizefn.
>>
>> Cc: Andreas Färber 
>> Signed-off-by: Richard Henderson 
> 
> Much cleaner!
> 
> Reviewed-by: Emilio G. Cota 

Looks like a good approach,

Acked-by: Andreas Färber 

Thanks,
Andreas

-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)



Re: [Qemu-devel] [PATCH v6 20/50] qom: Introduce CPUClass.tcg_initialize

2017-10-17 Thread Emilio G. Cota
On Mon, Oct 16, 2017 at 10:25:39 -0700, Richard Henderson wrote:
> Move target cpu tcg initialization to common code,
> called from cpu_exec_realizefn.
> 
> Cc: Andreas Färber 
> Signed-off-by: Richard Henderson 

Much cleaner!

Reviewed-by: Emilio G. Cota 

E.



[Qemu-devel] [PATCH v6 20/50] qom: Introduce CPUClass.tcg_initialize

2017-10-16 Thread Richard Henderson
Move target cpu tcg initialization to common code,
called from cpu_exec_realizefn.

Cc: Andreas Färber 
Signed-off-by: Richard Henderson 
---
 include/qom/cpu.h   |  8 ++--
 target/sparc/cpu.h  |  2 +-
 exec.c  |  7 ++-
 target/alpha/cpu.c  |  5 +
 target/alpha/translate.c|  6 --
 target/arm/cpu.c|  6 +-
 target/cris/cpu.c   | 16 ++--
 target/hppa/cpu.c   |  3 +--
 target/hppa/translate.c |  6 --
 target/i386/cpu.c   |  5 +
 target/i386/translate.c |  6 --
 target/lm32/cpu.c   |  7 +--
 target/m68k/cpu.c   |  7 +--
 target/microblaze/cpu.c |  7 +--
 target/mips/cpu.c   |  5 +
 target/mips/translate.c |  7 ---
 target/moxie/cpu.c  |  7 +--
 target/moxie/translate.c|  6 --
 target/nios2/cpu.c  |  7 +--
 target/openrisc/cpu.c   |  7 +--
 target/ppc/translate.c  |  6 --
 target/ppc/translate_init.c |  5 +
 target/s390x/cpu.c  |  7 +--
 target/sh4/cpu.c|  5 +
 target/sh4/translate.c  |  7 ---
 target/sparc/cpu.c  |  5 +
 target/sparc/translate.c|  9 +
 target/tilegx/cpu.c |  7 +--
 target/tricore/cpu.c|  5 +
 target/tricore/translate.c  |  5 +
 target/unicore32/cpu.c  |  7 +--
 target/xtensa/cpu.c |  7 +--
 32 files changed, 40 insertions(+), 165 deletions(-)

diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index 0efebdbcf4..df0ba86202 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -195,10 +195,8 @@ typedef struct CPUClass {
 void *opaque);
 
 const struct VMStateDescription *vmsd;
-int gdb_num_core_regs;
 const char *gdb_core_xml_file;
 gchar * (*gdb_arch_name)(CPUState *cpu);
-bool gdb_stop_before_watchpoint;
 
 void (*cpu_exec_enter)(CPUState *cpu);
 void (*cpu_exec_exit)(CPUState *cpu);
@@ -206,6 +204,12 @@ typedef struct CPUClass {
 
 void (*disas_set_info)(CPUState *cpu, disassemble_info *info);
 vaddr (*adjust_watchpoint_address)(CPUState *cpu, vaddr addr, int len);
+void (*tcg_initialize)(void);
+
+/* Keep non-pointer data at the end to minimize holes.  */
+int gdb_num_core_regs;
+bool gdb_stop_before_watchpoint;
+bool tcg_initialized;
 } CPUClass;
 
 #ifdef HOST_WORDS_BIGENDIAN
diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h
index 1598f65927..bf2b8931cc 100644
--- a/target/sparc/cpu.h
+++ b/target/sparc/cpu.h
@@ -594,7 +594,7 @@ int sparc_cpu_memory_rw_debug(CPUState *cpu, vaddr addr,
 
 
 /* translate.c */
-void gen_intermediate_code_init(CPUSPARCState *env);
+void sparc_tcg_init(void);
 
 /* cpu-exec.c */
 
diff --git a/exec.c b/exec.c
index 6378714a2b..30a1a9fb79 100644
--- a/exec.c
+++ b/exec.c
@@ -763,10 +763,15 @@ void cpu_exec_initfn(CPUState *cpu)
 
 void cpu_exec_realizefn(CPUState *cpu, Error **errp)
 {
-CPUClass *cc ATTRIBUTE_UNUSED = CPU_GET_CLASS(cpu);
+CPUClass *cc = CPU_GET_CLASS(cpu);
 
 cpu_list_add(cpu);
 
+if (tcg_enabled() && !cc->tcg_initialized) {
+cc->tcg_initialized = true;
+cc->tcg_initialize();
+}
+
 #ifndef CONFIG_USER_ONLY
 if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
 vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c
index b52ebd7356..bc9520535b 100644
--- a/target/alpha/cpu.c
+++ b/target/alpha/cpu.c
@@ -260,10 +260,6 @@ static void alpha_cpu_initfn(Object *obj)
 cs->env_ptr = env;
 tlb_flush(cs);
 
-if (tcg_enabled()) {
-alpha_translate_init();
-}
-
 env->lock_addr = -1;
 #if defined(CONFIG_USER_ONLY)
 env->flags = ENV_FLAG_PS_USER | ENV_FLAG_FEN;
@@ -301,6 +297,7 @@ static void alpha_cpu_class_init(ObjectClass *oc, void 
*data)
 dc->vmsd = &vmstate_alpha_cpu;
 #endif
 cc->disas_set_info = alpha_cpu_disas_set_info;
+cc->tcg_initialize = alpha_translate_init;
 
 cc->gdb_num_core_regs = 67;
 }
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
index f32c95b9a1..3c8d1dc333 100644
--- a/target/alpha/translate.c
+++ b/target/alpha/translate.c
@@ -124,14 +124,8 @@ void alpha_translate_init(void)
 };
 #endif
 
-static bool done_init = 0;
 int i;
 
-if (done_init) {
-return;
-}
-done_init = 1;
-
 cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 tcg_ctx.tcg_env = cpu_env;
 
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 88578f360e..056284985d 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -534,7 +534,6 @@ static void arm_cpu_initfn(Object *obj)
 {
 CPUState *cs = CPU(obj);
 ARMCPU *cpu = ARM_CPU(obj);
-static bool inited;
 
 cs->env_ptr = &cpu->env;
 cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal,
@@ -578,10 +577,6 @@ static void arm_cpu_initfn(Object *obj)
 
 if (