[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation |
Date: |
Mon, 01 Jun 2015 10:44:45 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 |
On 31/05/2015 08:11, Peter Crosthwaite wrote:
> include/exec/*.h and some of the common code needs some refactoring to setup
> this single vs multi compile split. Mostly code movements.
Thanks for attempting this!
The best thing in this series is that a lot of changes can be done
piecewise and are perfectly acceptable even before the main multiarch
emulation goes in. In fact, I hardly see for example any header file
change that is not acceptable (if done for all targets) as an
independent change.
There are two changes I'd make:
1) start with header file cleanups and de-ENV_GET_CPU-ification, then
core code changes, then build system changes.
2) organize patches so that the same changes are done at once to all
architectures. This is of course not always applicable, but it can be
done for things such as changing the cpu.h include to target-FOO/cpu.h,
moving things out of cpu.h to new headers, and even #defining
CPU-specific types.
Paolo
> The interface between the multi compile and single compiled files needs to be
> virtualised using QOM cpu functions. But this is now a very low footprint
> change as most of the virtualised hooks are now in mutli-compiled code (they
> only exist as text once). There are more new hooks than before, but the per
> target change pattern is reduced.
>
> There is a lot more core code changes and less target-foo changes this time.
> Full coversion is looking more feasible for one QEMU that can do everything.
>
> For the implementation of the series, the trickiest part is (still) cpu.h
> inclusion management. There are now more than one cpu.h's and different
> parts of the tree need a different include scheme. target-multi defines
> it's own cpu.h which is bare minimum defs as needed by core code only.
> target-foo/cpu.h are mostly the same but refactored to avoid collisions
> with other cpu.h's. Inclusion scheme goes something like
> this (for the multi-arch build):
>
> *: Core code includes only target-multi/cpu.h
> *: target-foo/ implementation code includes target-foo/cpu.h locally
> *: System level code (e.g. mach models) can use multiple target-foo/cpu.h's
>
> The hardest unasnwered Q is (still) what to do about bootloading. Currently
> each arch has it's own architecture specific bootloading which may assume a
> single architecture. I have applied some hacks to at least get this
> RFC testable using a -kernel -firmware split but going forward being
> able to associate an elf/image with a cpu explictitly needs to be
> solved.
>
> No support for KVM, im not sure if a mix of TCG and KVM is supported even for
> a single arch? (which would be prerequisite to MA KVM).
>
> Depends (not heavily) on some already on list patches:
>
> memory_mapping: Use qemu_common.h include
> configure: Unify arm and aarch64 disas configury
> Makefile.target: set master BUILD_DIR
> cpus: Change exec_init arg to cpu, not env
> cpus: Change tcg_cpu_exec arg to cpu, not env
> gdbserver: _fork: Change fn to accept cpu instead of env
> translate-all: Change tb_flush env argument to cpu
> microblaze: s3adsp: Instantiate CPU using QOM
> disas: cris: QOMify target specific disas setup
> disas: cris: Fix 0 buffer length case
> disas: microblaze: QOMify target specific disas setup
> disas: arm: QOMify target specific disas setup
> disas: arm-a64: Make printfer and stream variable
> disas: QOMify target specific setup
> disas: Add print_insn to disassemble info
> disas: Remove uses of CPU env
> monitor: Split mon_get_cpu fn to remove ENV_GET_CPU
> device-tree: Make a common-obj
>
> These deps do not really inhibit at least a high level review of this series.
>
> Regards,
> Peter
>
> Changed since v1:
> Near total rewrite.
>
> Peter Crosthwaite (34):
> cpu-defs: Move CPU_TEMP_BUF_NLONGS to tcg
> cpu-exec: Purge all uses of CPU_GET_ENV
> Makefile.target: Introduce arch-obj
> cpu-exec: Migrate some generic fns to cpus.c
> translate: Listify tcg_exec_init
> cpu-common: Define tb_page_addr_t for everyone
> exec-all: Move cpu_can_do_io to qom/cpu.h
> translate-all: Move tcg_handle_interrupt to -common
> include/exec: Move standard exceptions to cpu-all.h
> include/exec: Split target_long def to new header
> include/exec: Move cputlb exec.c defs out
> include/exec: Move tb hash functions out
> cpu-defs: Move out TB_JMP defines
> cpu-defs: Allow multiple inclusions
> HACK: monitor: Comment out TCG profile ops
> HACK: Disable list_cpus
> HACK: globalise TCG page size variables
> HACK: monitor: uninclude cpu_ldst
> HACK: disas: Defeature print_target_address
> HACK: exec: comment out use of cpu_get_tb_cpu_from_state
> core: virtualise CPU interfaces completely
> microblaze: enable multi-arch
> arm: cpu: static inline cpu_arm_init
> target-arm: Split cp helper API to new C file
> arm: enable multi-arch
> core: Introduce multi-arch build
> hw: arm: Explicitly include cpu.h for consumers
> arm: Remove ELF_MACHINE from cpu.h
> hw: mb: Explicitly include cpu.h for consumers
> mb: Remove ELF_MACHINE from cpu.h
> arm: boot: Don't assume all CPUs are ARM
> arm: xilinx_zynq: Add a Microblaze
> HACK: mb: boot: Assume using -firmware for mb software
> HACK: mb: boot: Disable dtb load in multi-arch
>
> Makefile.objs | 1 +
> Makefile.target | 34 +++-
> arch_init.c | 4 +-
> configure | 39 ++++-
> cpu-exec.c | 101 ++++--------
> cpus.c | 54 ++++++-
> cputlb.c | 40 +++--
> default-configs/multi-softmmu.mak | 2 +
> disas.c | 12 +-
> exec.c | 40 +++--
> gdbstub.c | 2 +-
> hw/arm/armv7m.c | 2 +-
> hw/arm/boot.c | 8 +-
> hw/arm/strongarm.h | 2 +
> hw/arm/xilinx_zynq.c | 15 ++
> hw/microblaze/boot.c | 12 +-
> hw/microblaze/boot.h | 2 +
> include/exec/cpu-all.h | 6 +
> include/exec/cpu-common.h | 4 +
> include/exec/cpu-defs.h | 50 ++----
> include/exec/cputlb.h | 16 --
> include/exec/exec-all.h | 73 ++-------
> include/exec/target-long.h | 52 ++++++
> include/exec/tb-hash.h | 51 ++++++
> include/hw/arm/arm.h | 3 +
> include/hw/arm/digic.h | 2 +
> include/hw/arm/exynos4210.h | 2 +
> include/hw/arm/omap.h | 2 +
> include/hw/arm/pxa.h | 2 +
> include/qemu-common.h | 5 +
> include/qom/cpu.h | 84 ++++++++++
> include/sysemu/arch_init.h | 1 +
> linux-user/elfload.c | 3 +
> monitor.c | 5 +-
> qom/cpu.c | 1 +
> stubs/Makefile.objs | 1 +
> stubs/cpu-qom.c | 76 +++++++++
> target-arm/Makefile.objs | 24 +--
> target-arm/cpu-qom.h | 2 +
> target-arm/cpu.c | 1 +
> target-arm/cpu.h | 70 +++++++-
> target-arm/helper.c | 331
> --------------------------------------
> target-arm/hw/Makefile.objs | 1 +
> target-arm/hw/cp.c | 330 +++++++++++++++++++++++++++++++++++++
> target-microblaze/Makefile.objs | 6 +-
> target-microblaze/cpu-qom.h | 2 +
> target-microblaze/cpu.c | 1 +
> target-microblaze/cpu.h | 44 ++++-
> target-multi/cpu.h | 16 ++
> target-multi/helper.h | 1 +
> tcg/tcg.h | 7 +-
> tcg/tci/tcg-target.h | 3 +-
> tci.c | 2 +-
> translate-all.c | 45 +-----
> translate-all.h | 2 -
> translate-common.c | 89 ++++++++++
> 56 files changed, 1131 insertions(+), 655 deletions(-)
> create mode 100644 default-configs/multi-softmmu.mak
> create mode 100644 include/exec/target-long.h
> create mode 100644 include/exec/tb-hash.h
> create mode 100644 stubs/cpu-qom.c
> create mode 100644 target-arm/hw/Makefile.objs
> create mode 100644 target-arm/hw/cp.c
> create mode 100644 target-multi/cpu.h
> create mode 100644 target-multi/helper.h
> create mode 100644 translate-common.c
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation,
Paolo Bonzini <=