* [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object @ 2015-02-26 20:37 Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 1/4] target-unicore32: Make uc32_cpu_init() return UniCore32CPU Eduardo Habkost ` (4 more replies) 0 siblings, 5 replies; 10+ messages in thread From: Eduardo Habkost @ 2015-02-26 20:37 UTC (permalink / raw) To: Andreas Färber; +Cc: Blue Swirl, Riku Voipio, qemu-devel This series changes cpu_init() to return a CPU QOM object, and changes existing arch-specific code to use the corresponding arch-specific function instead of cpu_init(). With this, the only remaining users of cpu_init() are linux-user and bsd-user. Eduardo Habkost (4): target-unicore32: Make uc32_cpu_init() return UniCore32CPU m68k: Use cpu_m68k_init() unicore32: Use uc32_cpu_init() cpu: Make cpu_init() return QOM object bsd-user/main.c | 6 +++--- hw/m68k/dummy_m68k.c | 6 ++++-- hw/unicore32/puv3.c | 6 ++++-- linux-user/main.c | 6 +++--- target-alpha/cpu.h | 9 +-------- target-arm/cpu.h | 9 +-------- target-cris/cpu.h | 9 +-------- target-i386/cpu.h | 9 +-------- target-lm32/cpu.h | 9 +-------- target-m68k/cpu.h | 9 +-------- target-microblaze/cpu.h | 9 +-------- target-mips/cpu.h | 9 +-------- target-moxie/cpu.h | 9 +-------- target-openrisc/cpu.h | 9 +-------- target-ppc/cpu.h | 9 +-------- target-s390x/cpu.h | 2 +- target-sh4/cpu.h | 9 +-------- target-sparc/cpu.h | 9 +-------- target-tricore/cpu.h | 10 +--------- target-unicore32/cpu.h | 6 ++++-- target-unicore32/helper.c | 10 ++-------- target-xtensa/cpu.h | 9 +-------- 22 files changed, 36 insertions(+), 142 deletions(-) -- 2.1.0 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/4] target-unicore32: Make uc32_cpu_init() return UniCore32CPU 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost @ 2015-02-26 20:37 ` Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 2/4] m68k: Use cpu_m68k_init() Eduardo Habkost ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: Eduardo Habkost @ 2015-02-26 20:37 UTC (permalink / raw) To: Andreas Färber; +Cc: Blue Swirl, Riku Voipio, qemu-devel This way, the cpu_init() function in target-unicore32 will follow the same pattern used on all other architectures. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- target-unicore32/cpu.h | 14 ++++++++++++-- target-unicore32/helper.c | 10 ++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/target-unicore32/cpu.h b/target-unicore32/cpu.h index 50972f9..11d76dc 100644 --- a/target-unicore32/cpu.h +++ b/target-unicore32/cpu.h @@ -122,11 +122,9 @@ void cpu_asr_write(CPUUniCore32State *env1, target_ulong val, target_ulong mask) #define UC32_HWCAP_CMOV 4 /* 1 << 2 */ #define UC32_HWCAP_UCF64 8 /* 1 << 3 */ -#define cpu_init uc32_cpu_init #define cpu_exec uc32_cpu_exec #define cpu_signal_handler uc32_cpu_signal_handler -CPUUniCore32State *uc32_cpu_init(const char *cpu_model); int uc32_cpu_exec(CPUUniCore32State *s); int uc32_cpu_signal_handler(int host_signum, void *pinfo, void *puc); @@ -143,6 +141,18 @@ static inline int cpu_mmu_index(CPUUniCore32State *env) #include "cpu-qom.h" #include "exec/exec-all.h" +UniCore32CPU *uc32_cpu_init(const char *cpu_model); + +static inline CPUUniCore32State *cpu_init(const char *cpu_model) +{ + UniCore32CPU *cpu = uc32_cpu_init(cpu_model); + if (cpu == NULL) { + return NULL; + } + return &cpu->env; + +} + static inline void cpu_get_tb_cpu_state(CPUUniCore32State *env, target_ulong *pc, target_ulong *cs_base, int *flags) { diff --git a/target-unicore32/helper.c b/target-unicore32/helper.c index b4654fa..ae63277 100644 --- a/target-unicore32/helper.c +++ b/target-unicore32/helper.c @@ -25,15 +25,9 @@ #define DPRINTF(fmt, ...) do {} while (0) #endif -CPUUniCore32State *uc32_cpu_init(const char *cpu_model) +UniCore32CPU *uc32_cpu_init(const char *cpu_model) { - UniCore32CPU *cpu; - - cpu = UNICORE32_CPU(cpu_generic_init(TYPE_UNICORE32_CPU, cpu_model)); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; + return UNICORE32_CPU(cpu_generic_init(TYPE_UNICORE32_CPU, cpu_model)); } uint32_t HELPER(clo)(uint32_t x) -- 2.1.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 2/4] m68k: Use cpu_m68k_init() 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 1/4] target-unicore32: Make uc32_cpu_init() return UniCore32CPU Eduardo Habkost @ 2015-02-26 20:37 ` Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 3/4] unicore32: Use uc32_cpu_init() Eduardo Habkost ` (2 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: Eduardo Habkost @ 2015-02-26 20:37 UTC (permalink / raw) To: Andreas Färber; +Cc: Blue Swirl, Riku Voipio, qemu-devel Instead of using the legacy cpu_init() function, use cpu_m68k_init() directly to create a M68kCPU object. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- hw/m68k/dummy_m68k.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/m68k/dummy_m68k.c b/hw/m68k/dummy_m68k.c index facd561..278f4c0 100644 --- a/hw/m68k/dummy_m68k.c +++ b/hw/m68k/dummy_m68k.c @@ -21,6 +21,7 @@ static void dummy_m68k_init(MachineState *machine) ram_addr_t ram_size = machine->ram_size; const char *cpu_model = machine->cpu_model; const char *kernel_filename = machine->kernel_filename; + M68kCPU *cpu; CPUM68KState *env; MemoryRegion *address_space_mem = get_system_memory(); MemoryRegion *ram = g_new(MemoryRegion, 1); @@ -30,11 +31,12 @@ static void dummy_m68k_init(MachineState *machine) if (!cpu_model) cpu_model = "cfv4e"; - env = cpu_init(cpu_model); - if (!env) { + cpu = cpu_m68k_init(cpu_model); + if (!cpu) { fprintf(stderr, "Unable to find m68k CPU definition\n"); exit(1); } + env = &cpu->env; /* Initialize CPU registers. */ env->vbr = 0; -- 2.1.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 3/4] unicore32: Use uc32_cpu_init() 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 1/4] target-unicore32: Make uc32_cpu_init() return UniCore32CPU Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 2/4] m68k: Use cpu_m68k_init() Eduardo Habkost @ 2015-02-26 20:37 ` Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object Eduardo Habkost 2015-02-27 14:40 ` [Qemu-devel] [PATCH 0/4] " Andreas Färber 4 siblings, 0 replies; 10+ messages in thread From: Eduardo Habkost @ 2015-02-26 20:37 UTC (permalink / raw) To: Andreas Färber; +Cc: Blue Swirl, Riku Voipio, Guan Xuetao, qemu-devel Instead of using the legacy cpu_init() function, use uc32_cpu_init() to create a UniCore32CPU object. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Cc: Guan Xuetao <gxt@mprc.pku.edu.cn> --- hw/unicore32/puv3.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/unicore32/puv3.c b/hw/unicore32/puv3.c index c41499e..cc9a21a 100644 --- a/hw/unicore32/puv3.c +++ b/hw/unicore32/puv3.c @@ -109,6 +109,7 @@ static void puv3_init(MachineState *machine) const char *kernel_filename = machine->kernel_filename; const char *initrd_filename = machine->initrd_filename; CPUUniCore32State *env; + UniCore32CPU *cpu; if (initrd_filename) { hw_error("Please use kernel built-in initramdisk.\n"); @@ -118,10 +119,11 @@ static void puv3_init(MachineState *machine) cpu_model = "UniCore-II"; } - env = cpu_init(cpu_model); - if (!env) { + cpu = uc32_cpu_init(cpu_model); + if (!cpu) { hw_error("Unable to find CPU definition\n"); } + env = &cpu->env; puv3_soc_init(env); puv3_board_init(env, ram_size); -- 2.1.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost ` (2 preceding siblings ...) 2015-02-26 20:37 ` [Qemu-devel] [PATCH 3/4] unicore32: Use uc32_cpu_init() Eduardo Habkost @ 2015-02-26 20:37 ` Eduardo Habkost 2015-03-10 16:16 ` Andreas Färber 2015-02-27 14:40 ` [Qemu-devel] [PATCH 0/4] " Andreas Färber 4 siblings, 1 reply; 10+ messages in thread From: Eduardo Habkost @ 2015-02-26 20:37 UTC (permalink / raw) To: Andreas Färber Cc: Peter Maydell, Jia Liu, Bastian Koppelmann, Anthony Green, Riku Voipio, qemu-devel, Alexander Graf, Blue Swirl, Max Filippov, Michael Walle, qemu-ppc, Paolo Bonzini, Edgar E. Iglesias, Guan Xuetao, Leon Alrae, Aurelien Jarno, Richard Henderson Instead of making cpu_init() return CPUArchState, return a CPU object. Changes were made using the Coccinelle semantic patch below. @@ typedef CPUState; identifier e; expression args; type CPUArchState; @@ - e = + cpu = cpu_init(args); - if (!e) { + if (!cpu) { ... } - cpu = ENV_GET_CPU(env); + e = cpu->env_ptr; @@ identifier new_env, new_cpu, env, cpu; type CPUArchState; expression args; @@ -{ - CPUState *cpu = ENV_GET_CPU(env); - CPUArchState *new_env = cpu_init(args); - CPUState *new_cpu = ENV_GET_CPU(new_env); +{ + CPUState *cpu = ENV_GET_CPU(env); + CPUState *new_cpu = cpu_init(args); + CPUArchState *new_env = new_cpu->env_ptr; ... } @@ identifier c, cpu_init_func, cpu_model; type StateType, CPUType; @@ -static inline StateType* cpu_init(const char *cpu_model) -{ - CPUType *c = cpu_init_func(cpu_model); ( - if (c == NULL) { - return NULL; - } - return &c->env; | - if (c) { - return &c->env; - } - return NULL; ) -} +#define cpu_init(cpu_model) CPU(cpu_init_func(cpu_model)) @@ identifier cpu_init_func; identifier model; @@ -#define cpu_init(model) (&cpu_init_func(model)->env) +#define cpu_init(model) CPU(cpu_init_func(model)) Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Cc: Blue Swirl <blauwirbel@gmail.com> Cc: Guan Xuetao <gxt@mprc.pku.edu.cn> Cc: Riku Voipio <riku.voipio@iki.fi> Cc: Richard Henderson <rth@twiddle.net> Cc: Peter Maydell <peter.maydell@linaro.org> Cc: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Michael Walle <michael@walle.cc> Cc: Aurelien Jarno <aurelien@aurel32.net> Cc: Leon Alrae <leon.alrae@imgtec.com> Cc: Anthony Green <green@moxielogic.com> Cc: Jia Liu <proljc@gmail.com> Cc: Alexander Graf <agraf@suse.de> Cc: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: qemu-ppc@nongnu.org --- bsd-user/main.c | 6 +++--- linux-user/main.c | 6 +++--- target-alpha/cpu.h | 9 +-------- target-arm/cpu.h | 9 +-------- target-cris/cpu.h | 9 +-------- target-i386/cpu.h | 9 +-------- target-lm32/cpu.h | 9 +-------- target-m68k/cpu.h | 9 +-------- target-microblaze/cpu.h | 9 +-------- target-mips/cpu.h | 9 +-------- target-moxie/cpu.h | 9 +-------- target-openrisc/cpu.h | 9 +-------- target-ppc/cpu.h | 9 +-------- target-s390x/cpu.h | 2 +- target-sh4/cpu.h | 9 +-------- target-sparc/cpu.h | 9 +-------- target-tricore/cpu.h | 10 +--------- target-unicore32/cpu.h | 10 +--------- target-xtensa/cpu.h | 9 +-------- 19 files changed, 23 insertions(+), 137 deletions(-) diff --git a/bsd-user/main.c b/bsd-user/main.c index 0e8c26c..1bb2754 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -908,12 +908,12 @@ int main(int argc, char **argv) cpu_exec_init_all(); /* NOTE: we need to init the CPU at this stage to get qemu_host_page_size */ - env = cpu_init(cpu_model); - if (!env) { + cpu = cpu_init(cpu_model); + if (!cpu) { fprintf(stderr, "Unable to find CPU definition\n"); exit(1); } - cpu = ENV_GET_CPU(env); + env = cpu->env_ptr; #if defined(TARGET_SPARC) || defined(TARGET_PPC) cpu_reset(cpu); #endif diff --git a/linux-user/main.c b/linux-user/main.c index d92702a..dd33665 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3939,12 +3939,12 @@ int main(int argc, char **argv, char **envp) cpu_exec_init_all(); /* NOTE: we need to init the CPU at this stage to get qemu_host_page_size */ - env = cpu_init(cpu_model); - if (!env) { + cpu = cpu_init(cpu_model); + if (!cpu) { fprintf(stderr, "Unable to find CPU definition\n"); exit(1); } - cpu = ENV_GET_CPU(env); + env = cpu->env_ptr; cpu_reset(cpu); thread_cpu = cpu; diff --git a/target-alpha/cpu.h b/target-alpha/cpu.h index e276dbf..9538f19 100644 --- a/target-alpha/cpu.h +++ b/target-alpha/cpu.h @@ -429,14 +429,7 @@ void alpha_translate_init(void); AlphaCPU *cpu_alpha_init(const char *cpu_model); -static inline CPUAlphaState *cpu_init(const char *cpu_model) -{ - AlphaCPU *cpu = cpu_alpha_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_alpha_init(cpu_model)) void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf); int cpu_alpha_exec(CPUAlphaState *s); diff --git a/target-arm/cpu.h b/target-arm/cpu.h index 11845a6..083211c 100644 --- a/target-arm/cpu.h +++ b/target-arm/cpu.h @@ -1569,14 +1569,7 @@ static inline bool arm_excp_unmasked(CPUState *cs, unsigned int excp_idx) return unmasked || pstate_unmasked; } -static inline CPUARMState *cpu_init(const char *cpu_model) -{ - ARMCPU *cpu = cpu_arm_init(cpu_model); - if (cpu) { - return &cpu->env; - } - return NULL; -} +#define cpu_init(cpu_model) CPU(cpu_arm_init(cpu_model)) #define cpu_exec cpu_arm_exec #define cpu_gen_code cpu_arm_gen_code diff --git a/target-cris/cpu.h b/target-cris/cpu.h index eea14b6..677b38c 100644 --- a/target-cris/cpu.h +++ b/target-cris/cpu.h @@ -221,14 +221,7 @@ enum { #define TARGET_PHYS_ADDR_SPACE_BITS 32 #define TARGET_VIRT_ADDR_SPACE_BITS 32 -static inline CPUCRISState *cpu_init(const char *cpu_model) -{ - CRISCPU *cpu = cpu_cris_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_cris_init(cpu_model)) #define cpu_exec cpu_cris_exec #define cpu_gen_code cpu_cris_gen_code diff --git a/target-i386/cpu.h b/target-i386/cpu.h index 478450c..4255803 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -1171,14 +1171,7 @@ uint64_t cpu_get_tsc(CPUX86State *env); # define PHYS_ADDR_MASK 0xfffffffffLL # endif -static inline CPUX86State *cpu_init(const char *cpu_model) -{ - X86CPU *cpu = cpu_x86_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_x86_init(cpu_model)) #define cpu_exec cpu_x86_exec #define cpu_gen_code cpu_x86_gen_code diff --git a/target-lm32/cpu.h b/target-lm32/cpu.h index e558c59..11ae68d 100644 --- a/target-lm32/cpu.h +++ b/target-lm32/cpu.h @@ -217,14 +217,7 @@ void lm32_watchpoint_insert(CPULM32State *env, int index, target_ulong address, void lm32_watchpoint_remove(CPULM32State *env, int index); bool lm32_cpu_do_semihosting(CPUState *cs); -static inline CPULM32State *cpu_init(const char *cpu_model) -{ - LM32CPU *cpu = cpu_lm32_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_lm32_init(cpu_model)) #define cpu_list lm32_cpu_list #define cpu_exec cpu_lm32_exec diff --git a/target-m68k/cpu.h b/target-m68k/cpu.h index 3a1b9ab..5f165da 100644 --- a/target-m68k/cpu.h +++ b/target-m68k/cpu.h @@ -212,14 +212,7 @@ void register_m68k_insns (CPUM68KState *env); #define TARGET_PHYS_ADDR_SPACE_BITS 32 #define TARGET_VIRT_ADDR_SPACE_BITS 32 -static inline CPUM68KState *cpu_init(const char *cpu_model) -{ - M68kCPU *cpu = cpu_m68k_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_m68k_init(cpu_model)) #define cpu_exec cpu_m68k_exec #define cpu_gen_code cpu_m68k_gen_code diff --git a/target-microblaze/cpu.h b/target-microblaze/cpu.h index 5794f89..7d06227 100644 --- a/target-microblaze/cpu.h +++ b/target-microblaze/cpu.h @@ -297,14 +297,7 @@ enum { #define TARGET_PHYS_ADDR_SPACE_BITS 32 #define TARGET_VIRT_ADDR_SPACE_BITS 32 -static inline CPUMBState *cpu_init(const char *cpu_model) -{ - MicroBlazeCPU *cpu = cpu_mb_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_mb_init(cpu_model)) #define cpu_exec cpu_mb_exec #define cpu_gen_code cpu_mb_gen_code diff --git a/target-mips/cpu.h b/target-mips/cpu.h index 5ea61bc..f44c814 100644 --- a/target-mips/cpu.h +++ b/target-mips/cpu.h @@ -739,14 +739,7 @@ void mips_tcg_init(void); MIPSCPU *cpu_mips_init(const char *cpu_model); int cpu_mips_signal_handler(int host_signum, void *pinfo, void *puc); -static inline CPUMIPSState *cpu_init(const char *cpu_model) -{ - MIPSCPU *cpu = cpu_mips_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_mips_init(cpu_model)) /* TODO QOM'ify CPU reset and remove */ void cpu_state_reset(CPUMIPSState *s); diff --git a/target-moxie/cpu.h b/target-moxie/cpu.h index d809393..c2733a2 100644 --- a/target-moxie/cpu.h +++ b/target-moxie/cpu.h @@ -121,14 +121,7 @@ void moxie_translate_init(void); int cpu_moxie_signal_handler(int host_signum, void *pinfo, void *puc); -static inline CPUMoxieState *cpu_init(const char *cpu_model) -{ - MoxieCPU *cpu = cpu_moxie_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_moxie_init(cpu_model)) #define cpu_exec cpu_moxie_exec #define cpu_gen_code cpu_moxie_gen_code diff --git a/target-openrisc/cpu.h b/target-openrisc/cpu.h index 69b96c6..b25324b 100644 --- a/target-openrisc/cpu.h +++ b/target-openrisc/cpu.h @@ -389,14 +389,7 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, int *prot, target_ulong address, int rw); #endif -static inline CPUOpenRISCState *cpu_init(const char *cpu_model) -{ - OpenRISCCPU *cpu = cpu_openrisc_init(cpu_model); - if (cpu) { - return &cpu->env; - } - return NULL; -} +#define cpu_init(cpu_model) CPU(cpu_openrisc_init(cpu_model)) #include "exec/cpu-all.h" diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index aae33a9..0e005d8 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -1237,14 +1237,7 @@ static inline uint64_t ppc_dump_gpr(CPUPPCState *env, int gprn) int ppc_dcr_read (ppc_dcr_t *dcr_env, int dcrn, uint32_t *valp); int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, uint32_t val); -static inline CPUPPCState *cpu_init(const char *cpu_model) -{ - PowerPCCPU *cpu = cpu_ppc_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_ppc_init(cpu_model)) #define cpu_exec cpu_ppc_exec #define cpu_gen_code cpu_ppc_gen_code diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index 2e2554c..24f4baf 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -461,7 +461,7 @@ int css_do_rchp(uint8_t cssid, uint8_t chpid); bool css_present(uint8_t cssid); #endif -#define cpu_init(model) (&cpu_s390x_init(model)->env) +#define cpu_init(model) CPU(cpu_s390x_init(model)) #define cpu_exec cpu_s390x_exec #define cpu_gen_code cpu_s390x_gen_code #define cpu_signal_handler cpu_s390x_signal_handler diff --git a/target-sh4/cpu.h b/target-sh4/cpu.h index b2fb199..c8dea6c 100644 --- a/target-sh4/cpu.h +++ b/target-sh4/cpu.h @@ -221,14 +221,7 @@ int cpu_sh4_is_cached(CPUSH4State * env, target_ulong addr); void cpu_load_tlb(CPUSH4State * env); -static inline CPUSH4State *cpu_init(const char *cpu_model) -{ - SuperHCPU *cpu = cpu_sh4_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_sh4_init(cpu_model)) #define cpu_exec cpu_sh4_exec #define cpu_gen_code cpu_sh4_gen_code diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h index 0a50e5d..f5c9006 100644 --- a/target-sparc/cpu.h +++ b/target-sparc/cpu.h @@ -594,14 +594,7 @@ hwaddr cpu_get_phys_page_nofault(CPUSPARCState *env, target_ulong addr, int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc); #ifndef NO_CPU_IO_DEFS -static inline CPUSPARCState *cpu_init(const char *cpu_model) -{ - SPARCCPU *cpu = cpu_sparc_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_sparc_init(cpu_model)) #endif #define cpu_exec cpu_sparc_exec diff --git a/target-tricore/cpu.h b/target-tricore/cpu.h index e5409e4..b473426 100644 --- a/target-tricore/cpu.h +++ b/target-tricore/cpu.h @@ -378,15 +378,7 @@ static inline void cpu_get_tb_cpu_state(CPUTriCoreState *env, target_ulong *pc, TriCoreCPU *cpu_tricore_init(const char *cpu_model); -static inline CPUTriCoreState *cpu_init(const char *cpu_model) -{ - TriCoreCPU *cpu = cpu_tricore_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; - -} +#define cpu_init(cpu_model) CPU(cpu_tricore_init(cpu_model)) /* helpers.c */ diff --git a/target-unicore32/cpu.h b/target-unicore32/cpu.h index 11d76dc..14dc862 100644 --- a/target-unicore32/cpu.h +++ b/target-unicore32/cpu.h @@ -143,15 +143,7 @@ static inline int cpu_mmu_index(CPUUniCore32State *env) UniCore32CPU *uc32_cpu_init(const char *cpu_model); -static inline CPUUniCore32State *cpu_init(const char *cpu_model) -{ - UniCore32CPU *cpu = uc32_cpu_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; - -} +#define cpu_init(cpu_model) CPU(uc32_cpu_init(cpu_model)) static inline void cpu_get_tb_cpu_state(CPUUniCore32State *env, target_ulong *pc, target_ulong *cs_base, int *flags) diff --git a/target-xtensa/cpu.h b/target-xtensa/cpu.h index 60ee563..dfd0d1c 100644 --- a/target-xtensa/cpu.h +++ b/target-xtensa/cpu.h @@ -379,14 +379,7 @@ typedef struct CPUXtensaState { XtensaCPU *cpu_xtensa_init(const char *cpu_model); -static inline CPUXtensaState *cpu_init(const char *cpu_model) -{ - XtensaCPU *cpu = cpu_xtensa_init(cpu_model); - if (cpu == NULL) { - return NULL; - } - return &cpu->env; -} +#define cpu_init(cpu_model) CPU(cpu_xtensa_init(cpu_model)) void xtensa_translate_init(void); void xtensa_breakpoint_handler(CPUState *cs); -- 2.1.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object 2015-02-26 20:37 ` [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object Eduardo Habkost @ 2015-03-10 16:16 ` Andreas Färber 2015-03-10 16:23 ` Andreas Färber 0 siblings, 1 reply; 10+ messages in thread From: Andreas Färber @ 2015-03-10 16:16 UTC (permalink / raw) To: Eduardo Habkost Cc: Peter Maydell, Jia Liu, Bastian Koppelmann, Anthony Green, Riku Voipio, qemu-devel, Alexander Graf, Blue Swirl, Max Filippov, Michael Walle, qemu-ppc, Paolo Bonzini, Edgar E. Iglesias, Guan Xuetao, Leon Alrae, Aurelien Jarno, Richard Henderson Am 26.02.2015 um 21:37 schrieb Eduardo Habkost: > Instead of making cpu_init() return CPUArchState, return a CPU object. > [snip] In file included from /home/andreas/QEMU/qemu-cpu/include/exec/cpu-all.h:26:0, from /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:296, from /home/andreas/QEMU/qemu-cpu/linux-user/qemu.h:7, from /home/andreas/QEMU/qemu-cpu/linux-user/main.c:29: /home/andreas/QEMU/qemu-cpu/linux-user/main.c: In function ‘cpu_copy’: /home/andreas/QEMU/qemu-cpu/include/qom/cpu.h:60:18: error: initialization from incompatible pointer type [-Werror] #define CPU(obj) ((CPUState *)(obj)) ^ /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:432:29: note: in expansion of macro ‘CPU’ #define cpu_init(cpu_model) CPU(cpu_alpha_init(cpu_model)) ^ /home/andreas/QEMU/qemu-cpu/linux-user/main.c:3455:29: note: in expansion of macro ‘cpu_init’ CPUArchState *new_env = cpu_init(cpu_model); ^ cc1: all warnings being treated as errors /home/andreas/QEMU/qemu-cpu/rules.mak:57: recipe for target 'linux-user/main.o' failed make[1]: *** [linux-user/main.o] Error 1 Is there a prereq that I'm missing? Regards, Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton; HRB 21284 (AG Nürnberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object 2015-03-10 16:16 ` Andreas Färber @ 2015-03-10 16:23 ` Andreas Färber 2015-03-10 16:35 ` Eduardo Habkost 0 siblings, 1 reply; 10+ messages in thread From: Andreas Färber @ 2015-03-10 16:23 UTC (permalink / raw) To: Eduardo Habkost Cc: Peter Maydell, Jia Liu, Bastian Koppelmann, Anthony Green, Riku Voipio, qemu-devel, Alexander Graf, Blue Swirl, Max Filippov, Michael Walle, qemu-ppc, Edgar E. Iglesias, Paolo Bonzini, Guan Xuetao, Leon Alrae, Aurelien Jarno, Richard Henderson Am 10.03.2015 um 17:16 schrieb Andreas Färber: > Am 26.02.2015 um 21:37 schrieb Eduardo Habkost: >> Instead of making cpu_init() return CPUArchState, return a CPU object. >> > [snip] > > In file included from > /home/andreas/QEMU/qemu-cpu/include/exec/cpu-all.h:26:0, > from /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:296, > from /home/andreas/QEMU/qemu-cpu/linux-user/qemu.h:7, > from /home/andreas/QEMU/qemu-cpu/linux-user/main.c:29: > /home/andreas/QEMU/qemu-cpu/linux-user/main.c: In function ‘cpu_copy’: > /home/andreas/QEMU/qemu-cpu/include/qom/cpu.h:60:18: error: > initialization from incompatible pointer type [-Werror] > #define CPU(obj) ((CPUState *)(obj)) > ^ > /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:432:29: note: in > expansion of macro ‘CPU’ > #define cpu_init(cpu_model) CPU(cpu_alpha_init(cpu_model)) > ^ > /home/andreas/QEMU/qemu-cpu/linux-user/main.c:3455:29: note: in > expansion of macro ‘cpu_init’ > CPUArchState *new_env = cpu_init(cpu_model); > ^ > cc1: all warnings being treated as errors > /home/andreas/QEMU/qemu-cpu/rules.mak:57: recipe for target > 'linux-user/main.o' failed > make[1]: *** [linux-user/main.o] Error 1 The following fixes it for me: diff --git a/linux-user/main.c b/linux-user/main.c index dd33665..6bd23af 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3452,8 +3452,8 @@ void init_task_state(TaskState *ts) CPUArchState *cpu_copy(CPUArchState *env) { CPUState *cpu = ENV_GET_CPU(env); - CPUArchState *new_env = cpu_init(cpu_model); - CPUState *new_cpu = ENV_GET_CPU(new_env); + CPUState *new_cpu = cpu_init(cpu_model); + CPUArchState *new_env = cpu->env_ptr; CPUBreakpoint *bp; CPUWatchpoint *wp; Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton; HRB 21284 (AG Nürnberg) ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object 2015-03-10 16:23 ` Andreas Färber @ 2015-03-10 16:35 ` Eduardo Habkost 0 siblings, 0 replies; 10+ messages in thread From: Eduardo Habkost @ 2015-03-10 16:35 UTC (permalink / raw) To: Andreas Färber Cc: Peter Maydell, Jia Liu, Bastian Koppelmann, Anthony Green, Riku Voipio, qemu-devel, Alexander Graf, Blue Swirl, Max Filippov, Michael Walle, qemu-ppc, Edgar E. Iglesias, Paolo Bonzini, Guan Xuetao, Leon Alrae, Aurelien Jarno, Richard Henderson On Tue, Mar 10, 2015 at 05:23:18PM +0100, Andreas Färber wrote: > Am 10.03.2015 um 17:16 schrieb Andreas Färber: > > Am 26.02.2015 um 21:37 schrieb Eduardo Habkost: > >> Instead of making cpu_init() return CPUArchState, return a CPU object. > >> > > [snip] > > > > In file included from > > /home/andreas/QEMU/qemu-cpu/include/exec/cpu-all.h:26:0, > > from /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:296, > > from /home/andreas/QEMU/qemu-cpu/linux-user/qemu.h:7, > > from /home/andreas/QEMU/qemu-cpu/linux-user/main.c:29: > > /home/andreas/QEMU/qemu-cpu/linux-user/main.c: In function ‘cpu_copy’: > > /home/andreas/QEMU/qemu-cpu/include/qom/cpu.h:60:18: error: > > initialization from incompatible pointer type [-Werror] > > #define CPU(obj) ((CPUState *)(obj)) > > ^ > > /home/andreas/QEMU/qemu-cpu/target-alpha/cpu.h:432:29: note: in > > expansion of macro ‘CPU’ > > #define cpu_init(cpu_model) CPU(cpu_alpha_init(cpu_model)) > > ^ > > /home/andreas/QEMU/qemu-cpu/linux-user/main.c:3455:29: note: in > > expansion of macro ‘cpu_init’ > > CPUArchState *new_env = cpu_init(cpu_model); > > ^ > > cc1: all warnings being treated as errors > > /home/andreas/QEMU/qemu-cpu/rules.mak:57: recipe for target > > 'linux-user/main.o' failed > > make[1]: *** [linux-user/main.o] Error 1 > > The following fixes it for me: > > diff --git a/linux-user/main.c b/linux-user/main.c > index dd33665..6bd23af 100644 > --- a/linux-user/main.c > +++ b/linux-user/main.c > @@ -3452,8 +3452,8 @@ void init_task_state(TaskState *ts) > CPUArchState *cpu_copy(CPUArchState *env) > { > CPUState *cpu = ENV_GET_CPU(env); > - CPUArchState *new_env = cpu_init(cpu_model); > - CPUState *new_cpu = ENV_GET_CPU(new_env); > + CPUState *new_cpu = cpu_init(cpu_model); > + CPUArchState *new_env = cpu->env_ptr; > CPUBreakpoint *bp; > CPUWatchpoint *wp; Oops. That change was supposed to be done by the Coccinelle patch. I am sure that some previous version of the Coccinelle patch was doing it right, but for some reason the latest version (the one I submitted) was broken (and I can't understand why). I guess I shouldn't have insisted in making a pure coccinelle-based patch and should have changed cpu_copy() manually instead (like you just did). -- Eduardo ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost ` (3 preceding siblings ...) 2015-02-26 20:37 ` [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object Eduardo Habkost @ 2015-02-27 14:40 ` Andreas Färber 2015-03-10 17:02 ` Andreas Färber 4 siblings, 1 reply; 10+ messages in thread From: Andreas Färber @ 2015-02-27 14:40 UTC (permalink / raw) To: Eduardo Habkost; +Cc: Blue Swirl, Riku Voipio, qemu-devel Hi Eduardo, Am 26.02.2015 um 21:37 schrieb Eduardo Habkost: > This series changes cpu_init() to return a CPU QOM object, and changes existing > arch-specific code to use the corresponding arch-specific function instead of > cpu_init(). > > With this, the only remaining users of cpu_init() are linux-user and bsd-user. > > Eduardo Habkost (4): > target-unicore32: Make uc32_cpu_init() return UniCore32CPU > m68k: Use cpu_m68k_init() > unicore32: Use uc32_cpu_init() This part looks good to me. At the time, I propagated *CPU only for those machines that needed it for function calls or field accesses. > cpu: Make cpu_init() return QOM object As for this patch, the Coccinelle based approach looks cool! However I would like to give this a bit more thought as to whether 1) this causes churn with regards to the next steps I outlined, and 2) whether more simplifications can be done while at it. Could be done as follow-ups. Let's also keep in mind that target-tilegx patches are on the list. Regards, Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton; HRB 21284 (AG Nürnberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object 2015-02-27 14:40 ` [Qemu-devel] [PATCH 0/4] " Andreas Färber @ 2015-03-10 17:02 ` Andreas Färber 0 siblings, 0 replies; 10+ messages in thread From: Andreas Färber @ 2015-03-10 17:02 UTC (permalink / raw) To: Eduardo Habkost; +Cc: Blue Swirl, Riku Voipio, qemu-devel Am 27.02.2015 um 15:40 schrieb Andreas Färber: > Hi Eduardo, > > Am 26.02.2015 um 21:37 schrieb Eduardo Habkost: >> This series changes cpu_init() to return a CPU QOM object, and changes existing >> arch-specific code to use the corresponding arch-specific function instead of >> cpu_init(). >> >> With this, the only remaining users of cpu_init() are linux-user and bsd-user. >> >> Eduardo Habkost (4): >> target-unicore32: Make uc32_cpu_init() return UniCore32CPU >> m68k: Use cpu_m68k_init() >> unicore32: Use uc32_cpu_init() > > This part looks good to me. At the time, I propagated *CPU only for > those machines that needed it for function calls or field accesses. > >> cpu: Make cpu_init() return QOM object > > As for this patch, the Coccinelle based approach looks cool! However I > would like to give this a bit more thought as to whether 1) this causes > churn with regards to the next steps I outlined, and 2) whether more > simplifications can be done while at it. Could be done as follow-ups. Not hearing any objection from machine maintainers, I've gone ahead and applied the fourth patch as well: https://github.com/afaerber/qemu-cpu/commits/qom-cpu One of the concerns I had was whether we might use cpu_generic_init() in the macro directly, where applicable. But that seems to depend on whether machines will continue to use FooCPU *cpu_foo_init(), which depends on how we proceed with CPU (hot-plug) remodeling, etc. Thanks, Andreas > > Let's also keep in mind that target-tilegx patches are on the list. > > Regards, > Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton; HRB 21284 (AG Nürnberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-03-10 17:02 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-02-26 20:37 [Qemu-devel] [PATCH 0/4] cpu: Make cpu_init() return QOM object Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 1/4] target-unicore32: Make uc32_cpu_init() return UniCore32CPU Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 2/4] m68k: Use cpu_m68k_init() Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 3/4] unicore32: Use uc32_cpu_init() Eduardo Habkost 2015-02-26 20:37 ` [Qemu-devel] [PATCH 4/4] cpu: Make cpu_init() return QOM object Eduardo Habkost 2015-03-10 16:16 ` Andreas Färber 2015-03-10 16:23 ` Andreas Färber 2015-03-10 16:35 ` Eduardo Habkost 2015-02-27 14:40 ` [Qemu-devel] [PATCH 0/4] " Andreas Färber 2015-03-10 17:02 ` Andreas Färber
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).