qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC v1 00/10] i386 cleanup


From: Claudio Fontana
Subject: [RFC v1 00/10] i386 cleanup
Date: Mon, 9 Nov 2020 18:27:45 +0100

Hi all,

this is very much a RFC, I have started to look at the i386
target dir and how to start refactoring and splitting up
things better, moving more and more of the code to
accelerator-specific parts that are conditionally compiled.

In this RFC I start by moving all i386-specific accelerators into
target/i386/accel/, away from the main target directory,

then I go on and strip away all the cpu dump code out of helper.c
into a new file. There is a large amount of checkpatch warnings
and errors, but this is due to the copy paste of the old code,
we might need to clean up the state of the dump code in a later
change if necessary.

After that I take out tcg-specific stuff from cpu.h and from
helper.c and put it in helper-tcg.h and in a new tcg-cpu module,
(that will be renamed later in the series as its role changes).

After this I considered and implemented a few options,
but after some initial evaluation I concluded that a good idea
could possibly be to introduce a new MODULE_INIT phase,

MODULE_INIT_ACCEL_CPU

that I could use to put all existing cpus accel interface
initializations,
and that I could also use to put all accelerator specific
cpu module registrations, deferring the usual registration
at MODULE_INIT_QOM time.
This deferring allows to make all x86 cpu models children
of an accel-specific cpu type, in turn having as parent
the generic TYPE_X86_CPU.

There are for sure other options out there, so let me know if
this way seems promising, or if you have other ideas on how
to proceed here, especially in the last 3 patches..

Motivation and higher level steps:

https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg04628.html

Thank you for your comments,

Ciao,

Claudio

Claudio Fontana (10):
  i386: move kvm accel files into accel/kvm/
  i386: move whpx accel files to accel/whpx/
  i386: move hax accel files to accel/hax/
  i386: move hvf accel files into accel/hvf/
  i386: move TCG accel files into accel/tcg/
  i386: move cpu dump out of helper.c into cpu-dump.c
  i386: move TCG cpu class initialization out of helper.c
  module: introduce MODULE_INIT_ACCEL_CPU
  i386: split cpu.c and defer x86 models registration
  module: add priority to module_init

 MAINTAINERS                                 |  12 +-
 accel/kvm/kvm-all.c                         |  11 +-
 accel/qtest/qtest.c                         |  10 +-
 accel/tcg/tcg-all.c                         |  11 +-
 accel/xen/xen-all.c                         |  12 +-
 bsd-user/main.c                             |   4 +
 hw/i386/fw_cfg.c                            |   2 +-
 hw/i386/intel_iommu.c                       |   2 +-
 hw/i386/kvm/apic.c                          |   2 +-
 hw/i386/kvm/clock.c                         |   2 +-
 hw/i386/microvm.c                           |   2 +-
 hw/i386/pc.c                                |   2 +-
 hw/i386/pc_piix.c                           |   1 +
 hw/i386/x86.c                               |   2 +-
 include/qemu/module.h                       |  17 +
 linux-user/main.c                           |  10 +-
 meson.build                                 |   1 +
 softmmu/vl.c                                |   6 +
 target/i386/{ => accel/hax}/hax-all.c       |  12 +-
 target/i386/{ => accel/hax}/hax-cpus.c      |   0
 target/i386/{ => accel/hax}/hax-cpus.h      |   0
 target/i386/{ => accel/hax}/hax-i386.h      |   6 +-
 target/i386/{ => accel/hax}/hax-interface.h |   0
 target/i386/{ => accel/hax}/hax-mem.c       |   0
 target/i386/{ => accel/hax}/hax-posix.c     |   0
 target/i386/{ => accel/hax}/hax-posix.h     |   0
 target/i386/{ => accel/hax}/hax-windows.c   |   0
 target/i386/{ => accel/hax}/hax-windows.h   |   0
 target/i386/accel/hax/meson.build           |   7 +
 target/i386/{ => accel}/hvf/README.md       |   0
 target/i386/accel/hvf/hvf-cpu-type.c        |  78 +++
 target/i386/{ => accel}/hvf/hvf-cpus.c      |   0
 target/i386/{ => accel}/hvf/hvf-cpus.h      |   0
 target/i386/{ => accel}/hvf/hvf-i386.h      |   0
 target/i386/{ => accel}/hvf/hvf.c           |  10 +-
 target/i386/{ => accel}/hvf/meson.build     |   1 +
 target/i386/{ => accel}/hvf/panic.h         |   0
 target/i386/{ => accel}/hvf/vmcs.h          |   0
 target/i386/{ => accel}/hvf/vmx.h           |   0
 target/i386/{ => accel}/hvf/x86.c           |   0
 target/i386/{ => accel}/hvf/x86.h           |   0
 target/i386/{ => accel}/hvf/x86_cpuid.c     |   0
 target/i386/{ => accel}/hvf/x86_decode.c    |   0
 target/i386/{ => accel}/hvf/x86_decode.h    |   0
 target/i386/{ => accel}/hvf/x86_descr.c     |   0
 target/i386/{ => accel}/hvf/x86_descr.h     |   0
 target/i386/{ => accel}/hvf/x86_emu.c       |   0
 target/i386/{ => accel}/hvf/x86_emu.h       |   0
 target/i386/{ => accel}/hvf/x86_flags.c     |   0
 target/i386/{ => accel}/hvf/x86_flags.h     |   0
 target/i386/{ => accel}/hvf/x86_mmu.c       |   0
 target/i386/{ => accel}/hvf/x86_mmu.h       |   0
 target/i386/{ => accel}/hvf/x86_task.c      |   0
 target/i386/{ => accel}/hvf/x86_task.h      |   0
 target/i386/{ => accel}/hvf/x86hvf.c        |   0
 target/i386/{ => accel}/hvf/x86hvf.h        |   0
 target/i386/{ => accel/kvm}/hyperv-proto.h  |   0
 target/i386/{ => accel/kvm}/hyperv-stub.c   |   0
 target/i386/{ => accel/kvm}/hyperv.c        |   0
 target/i386/{ => accel/kvm}/hyperv.h        |   0
 target/i386/accel/kvm/kvm-cpu-type.c        | 161 ++++++
 target/i386/accel/kvm/kvm-cpu-type.h        |  41 ++
 target/i386/{ => accel/kvm}/kvm-stub.c      |   0
 target/i386/{ => accel/kvm}/kvm.c           |   3 +-
 target/i386/{ => accel/kvm}/kvm_i386.h      |   0
 target/i386/accel/kvm/meson.build           |   8 +
 target/i386/accel/kvm/trace-events          |   7 +
 target/i386/accel/kvm/trace.h               |   1 +
 target/i386/{ => accel/tcg}/bpt_helper.c    |   1 +
 target/i386/{ => accel/tcg}/cc_helper.c     |   1 +
 target/i386/{ => accel/tcg}/excp_helper.c   |   1 +
 target/i386/{ => accel/tcg}/fpu_helper.c    |  33 +-
 target/i386/{ => accel/tcg}/int_helper.c    |   1 +
 target/i386/{ => accel/tcg}/mem_helper.c    |   1 +
 target/i386/accel/tcg/meson.build           |  14 +
 target/i386/{ => accel/tcg}/misc_helper.c   |   1 +
 target/i386/{ => accel/tcg}/mpx_helper.c    |   1 +
 target/i386/{ => accel/tcg}/seg_helper.c    |   1 +
 target/i386/{ => accel/tcg}/smm_helper.c    |   2 +
 target/i386/{ => accel/tcg}/svm_helper.c    |   1 +
 target/i386/accel/tcg/tcg-cpu-type.c        | 176 +++++++
 target/i386/accel/tcg/tcg-cpu-type.h        |  25 +
 target/i386/{ => accel/tcg}/tcg-stub.c      |   0
 target/i386/{ => accel/tcg}/translate.c     |   1 +
 target/i386/accel/whpx/meson.build          |   4 +
 target/i386/{ => accel/whpx}/whp-dispatch.h |   0
 target/i386/{ => accel/whpx}/whpx-all.c     |  11 +-
 target/i386/{ => accel/whpx}/whpx-cpus.c    |   0
 target/i386/{ => accel/whpx}/whpx-cpus.h    |   0
 target/i386/cpu-dump.c                      | 538 +++++++++++++++++++
 target/i386/cpu.c                           | 489 ++++--------------
 target/i386/cpu.h                           | 126 +----
 target/i386/helper-tcg.h                    | 112 ++++
 target/i386/helper.c                        | 539 +-------------------
 target/i386/host-cpu.c                      | 201 ++++++++
 target/i386/host-cpu.h                      |  21 +
 target/i386/machine.c                       |   4 +-
 target/i386/meson.build                     |  41 +-
 target/i386/trace-events                    |   6 -
 99 files changed, 1678 insertions(+), 1118 deletions(-)
 rename target/i386/{ => accel/hax}/hax-all.c (99%)
 rename target/i386/{ => accel/hax}/hax-cpus.c (100%)
 rename target/i386/{ => accel/hax}/hax-cpus.h (100%)
 rename target/i386/{ => accel/hax}/hax-i386.h (95%)
 rename target/i386/{ => accel/hax}/hax-interface.h (100%)
 rename target/i386/{ => accel/hax}/hax-mem.c (100%)
 rename target/i386/{ => accel/hax}/hax-posix.c (100%)
 rename target/i386/{ => accel/hax}/hax-posix.h (100%)
 rename target/i386/{ => accel/hax}/hax-windows.c (100%)
 rename target/i386/{ => accel/hax}/hax-windows.h (100%)
 create mode 100644 target/i386/accel/hax/meson.build
 rename target/i386/{ => accel}/hvf/README.md (100%)
 create mode 100644 target/i386/accel/hvf/hvf-cpu-type.c
 rename target/i386/{ => accel}/hvf/hvf-cpus.c (100%)
 rename target/i386/{ => accel}/hvf/hvf-cpus.h (100%)
 rename target/i386/{ => accel}/hvf/hvf-i386.h (100%)
 rename target/i386/{ => accel}/hvf/hvf.c (99%)
 rename target/i386/{ => accel}/hvf/meson.build (92%)
 rename target/i386/{ => accel}/hvf/panic.h (100%)
 rename target/i386/{ => accel}/hvf/vmcs.h (100%)
 rename target/i386/{ => accel}/hvf/vmx.h (100%)
 rename target/i386/{ => accel}/hvf/x86.c (100%)
 rename target/i386/{ => accel}/hvf/x86.h (100%)
 rename target/i386/{ => accel}/hvf/x86_cpuid.c (100%)
 rename target/i386/{ => accel}/hvf/x86_decode.c (100%)
 rename target/i386/{ => accel}/hvf/x86_decode.h (100%)
 rename target/i386/{ => accel}/hvf/x86_descr.c (100%)
 rename target/i386/{ => accel}/hvf/x86_descr.h (100%)
 rename target/i386/{ => accel}/hvf/x86_emu.c (100%)
 rename target/i386/{ => accel}/hvf/x86_emu.h (100%)
 rename target/i386/{ => accel}/hvf/x86_flags.c (100%)
 rename target/i386/{ => accel}/hvf/x86_flags.h (100%)
 rename target/i386/{ => accel}/hvf/x86_mmu.c (100%)
 rename target/i386/{ => accel}/hvf/x86_mmu.h (100%)
 rename target/i386/{ => accel}/hvf/x86_task.c (100%)
 rename target/i386/{ => accel}/hvf/x86_task.h (100%)
 rename target/i386/{ => accel}/hvf/x86hvf.c (100%)
 rename target/i386/{ => accel}/hvf/x86hvf.h (100%)
 rename target/i386/{ => accel/kvm}/hyperv-proto.h (100%)
 rename target/i386/{ => accel/kvm}/hyperv-stub.c (100%)
 rename target/i386/{ => accel/kvm}/hyperv.c (100%)
 rename target/i386/{ => accel/kvm}/hyperv.h (100%)
 create mode 100644 target/i386/accel/kvm/kvm-cpu-type.c
 create mode 100644 target/i386/accel/kvm/kvm-cpu-type.h
 rename target/i386/{ => accel/kvm}/kvm-stub.c (100%)
 rename target/i386/{ => accel/kvm}/kvm.c (99%)
 rename target/i386/{ => accel/kvm}/kvm_i386.h (100%)
 create mode 100644 target/i386/accel/kvm/meson.build
 create mode 100644 target/i386/accel/kvm/trace-events
 create mode 100644 target/i386/accel/kvm/trace.h
 rename target/i386/{ => accel/tcg}/bpt_helper.c (99%)
 rename target/i386/{ => accel/tcg}/cc_helper.c (99%)
 rename target/i386/{ => accel/tcg}/excp_helper.c (99%)
 rename target/i386/{ => accel/tcg}/fpu_helper.c (99%)
 rename target/i386/{ => accel/tcg}/int_helper.c (99%)
 rename target/i386/{ => accel/tcg}/mem_helper.c (99%)
 create mode 100644 target/i386/accel/tcg/meson.build
 rename target/i386/{ => accel/tcg}/misc_helper.c (99%)
 rename target/i386/{ => accel/tcg}/mpx_helper.c (99%)
 rename target/i386/{ => accel/tcg}/seg_helper.c (99%)
 rename target/i386/{ => accel/tcg}/smm_helper.c (99%)
 rename target/i386/{ => accel/tcg}/svm_helper.c (99%)
 create mode 100644 target/i386/accel/tcg/tcg-cpu-type.c
 create mode 100644 target/i386/accel/tcg/tcg-cpu-type.h
 rename target/i386/{ => accel/tcg}/tcg-stub.c (100%)
 rename target/i386/{ => accel/tcg}/translate.c (99%)
 create mode 100644 target/i386/accel/whpx/meson.build
 rename target/i386/{ => accel/whpx}/whp-dispatch.h (100%)
 rename target/i386/{ => accel/whpx}/whpx-all.c (99%)
 rename target/i386/{ => accel/whpx}/whpx-cpus.c (100%)
 rename target/i386/{ => accel/whpx}/whpx-cpus.h (100%)
 create mode 100644 target/i386/cpu-dump.c
 create mode 100644 target/i386/helper-tcg.h
 create mode 100644 target/i386/host-cpu.c
 create mode 100644 target/i386/host-cpu.h

-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]