From: Claudio Fontana <cfontana@suse.de>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Wenchao Wang" <wenchao.wang@intel.com>,
"Roman Bolshakov" <r.bolshakov@yadro.com>,
"Sunil Muthuswamy" <sunilmut@microsoft.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Emilio G . Cota" <cota@braap.org>
Cc: Laurent Vivier <lvivier@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Paul Durrant <paul@xen.org>, Jason Wang <jasowang@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Peter Xu <peterx@redhat.com>,
Dario Faggioli <dfaggioli@suse.com>,
Cameron Esfahani <dirty@apple.com>,
haxm-team@intel.com, Claudio Fontana <cfontana@suse.de>,
Anthony Perard <anthony.perard@citrix.com>,
Bruce Rogers <brogers@suse.com>, Olaf Hering <ohering@suse.de>,
Colin Xu <colin.xu@intel.com>
Subject: [RFC v5 00/12] i386 cleanup
Date: Tue, 24 Nov 2020 17:21:58 +0100 [thread overview]
Message-ID: <20201124162210.8796-1-cfontana@suse.de> (raw)
Hi all, this is v5 of the i386 cleanup,
with the most interesting patches at the end.
I put in To: Emilio G. Cota, specifically because in patch 8
I (re)moved for user-mode the call to tcg_regions_init().
The call happens now inside the tcg AccelClass machine_init,
(so earlier). This seems to work fine, but thought to get the
author opinion on this.
v4 -> v5: centralized and simplified initializations
Rebased on "tcg-cpus: split into 3 tcg variants" series
(queued by Richard), to avoid some code churn:
https://lists.gnu.org/archive/html/qemu-devel/2020-10/msg04356.html
* Extended AccelClass to user-mode.
user-mode now does not call tcg_exec_init directly,
instead it uses the tcg accel class, and its init_machine method.
Since user-mode does not define or use a machine state,
the machine is just passed as NULL.
The immediate advantage is that now we can call current_accel()
from both user mode and softmmu, so we can work out the correct
class to use for accelerator initializations.
* QOMification of CpusAccelOps
simple QOMification of CpusAccelOps abstract class.
* Centralized all accel_cpu_init, so only one per cpu-arch,
plus one for all accels will remain.
So we can expect accel_cpu_init() to be limited to:
softmmu/cpus.c - initializes the chosen softmmu accel ops for the cpus module.
target/ARCH/cpu.c - initializes the chosen arch-specific cpu accelerator.
These changes are meant to address concerns/issues (Paolo):
1) the use of if (tcg_enabled()) and similar in the module_init call path
2) the excessive number of accel_cpu_init() to hunt down in the codebase.
* Fixed wrong use of host_cpu_class_init (Eduardo)
v3 -> v4: QOMification of X86CPUAccelClass
In this version I basically QOMified X86CPUAccel, taking the
suggestions from Eduardo as the starting point,
but stopping just short of making it an actual QOM interface,
using a plain abstract class, and then subclasses for the
actual objects.
Initialization is still using the existing qemu initialization
framework (module_call_init), which is I still think is better
than the alternatives proposed, in the current state.
Possibly some improvements could be developed in the future here.
In this case, effort should be put in keeping things extendible,
in order not to be blocked once accelerators also become modules.
Motivation and higher level steps:
https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg04628.html
Looking forward to your comments on this proposal,
Ciao,
Claudio
Claudio Fontana (12):
i386: move kvm accel files into kvm/
i386: move whpx accel files into whpx/
i386: move hax accel files into hax/
i386: hvf: remove stale MAINTAINERS entry for old hvf stubs
i386: move TCG accel files into tcg/
i386: move cpu dump out of helper.c into cpu-dump.c
i386: move TCG cpu class initialization out of helper.c
accel: extend AccelState and AccelClass to user-mode
module: introduce MODULE_INIT_ACCEL_CPU
i386: split cpu accelerators from cpu.c
i386: centralize initialization of cpu accel interfaces
accel: centralize initialization of CpusAccelOps
MAINTAINERS | 14 +-
accel/accel-common.c | 54 +++
accel/{accel.c => accel-softmmu.c} | 27 +-
accel/accel-user.c | 28 ++
accel/kvm/kvm-all.c | 2 -
accel/kvm/kvm-cpus.c | 26 +-
accel/kvm/kvm-cpus.h | 2 -
accel/meson.build | 4 +-
accel/qtest/qtest.c | 25 +-
accel/tcg/meson.build | 3 +-
accel/tcg/tcg-all.c | 11 +-
accel/tcg/tcg-cpus-icount.c | 11 +-
accel/tcg/tcg-cpus-icount.h | 2 +
accel/tcg/tcg-cpus-mttcg.c | 12 +-
accel/tcg/tcg-cpus-mttcg.h | 19 +
accel/tcg/tcg-cpus-rr.c | 7 -
accel/tcg/tcg-cpus.c | 43 ++
accel/tcg/tcg-cpus.h | 4 -
accel/xen/xen-all.c | 25 +-
bsd-user/main.c | 9 +-
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/hw/boards.h | 2 +-
include/{sysemu => qemu}/accel.h | 15 +-
include/qemu/module.h | 2 +
include/sysemu/cpus.h | 39 +-
include/sysemu/hvf.h | 2 +-
include/sysemu/kvm.h | 2 +-
include/sysemu/kvm_int.h | 2 +-
linux-user/main.c | 9 +-
meson.build | 1 +
roms/qboot | 2 +-
softmmu/cpus.c | 51 ++-
softmmu/memory.c | 2 +-
softmmu/qtest.c | 2 +-
softmmu/vl.c | 8 +-
target/i386/cpu-dump.c | 538 +++++++++++++++++++++++++
target/i386/cpu-qom.h | 26 ++
target/i386/cpu.c | 446 ++++-----------------
target/i386/cpu.h | 120 +-----
target/i386/{ => hax}/hax-all.c | 5 +-
target/i386/{ => hax}/hax-cpus.c | 29 +-
target/i386/{ => hax}/hax-cpus.h | 2 -
target/i386/{ => hax}/hax-i386.h | 6 +-
target/i386/{ => hax}/hax-interface.h | 0
target/i386/{ => hax}/hax-mem.c | 0
target/i386/{ => hax}/hax-posix.c | 0
target/i386/{ => hax}/hax-posix.h | 0
target/i386/{ => hax}/hax-windows.c | 0
target/i386/{ => hax}/hax-windows.h | 0
target/i386/hax/meson.build | 7 +
target/i386/helper-tcg.h | 112 ++++++
target/i386/helper.c | 539 +-------------------------
target/i386/host-cpu.c | 198 ++++++++++
target/i386/host-cpu.h | 19 +
target/i386/hvf/cpu.c | 67 ++++
target/i386/hvf/hvf-cpus.c | 27 +-
target/i386/hvf/hvf-cpus.h | 2 -
target/i386/hvf/hvf-i386.h | 2 +-
target/i386/hvf/hvf.c | 3 +-
target/i386/hvf/meson.build | 1 +
target/i386/hvf/x86_task.c | 2 +-
target/i386/kvm/cpu.c | 149 +++++++
target/i386/{ => kvm}/hyperv-proto.h | 0
target/i386/{ => kvm}/hyperv-stub.c | 0
target/i386/{ => kvm}/hyperv.c | 0
target/i386/{ => kvm}/hyperv.h | 0
target/i386/kvm/kvm-cpu.h | 41 ++
target/i386/{ => kvm}/kvm-stub.c | 0
target/i386/{ => kvm}/kvm.c | 3 +-
target/i386/{ => kvm}/kvm_i386.h | 0
target/i386/kvm/meson.build | 8 +
target/i386/kvm/trace-events | 7 +
target/i386/kvm/trace.h | 1 +
target/i386/machine.c | 4 +-
target/i386/meson.build | 39 +-
target/i386/{ => tcg}/bpt_helper.c | 1 +
target/i386/{ => tcg}/cc_helper.c | 1 +
target/i386/tcg/cpu.c | 172 ++++++++
target/i386/{ => tcg}/excp_helper.c | 1 +
target/i386/{ => tcg}/fpu_helper.c | 33 +-
target/i386/{ => tcg}/int_helper.c | 1 +
target/i386/{ => tcg}/mem_helper.c | 1 +
target/i386/tcg/meson.build | 14 +
target/i386/{ => tcg}/misc_helper.c | 1 +
target/i386/{ => tcg}/mpx_helper.c | 1 +
target/i386/{ => tcg}/seg_helper.c | 1 +
target/i386/{ => tcg}/smm_helper.c | 2 +
target/i386/{ => tcg}/svm_helper.c | 1 +
target/i386/{ => tcg}/tcg-stub.c | 0
target/i386/{ => tcg}/translate.c | 1 +
target/i386/trace-events | 6 -
target/i386/whpx/meson.build | 4 +
target/i386/{ => whpx}/whp-dispatch.h | 0
target/i386/{ => whpx}/whpx-all.c | 4 +-
target/i386/{ => whpx}/whpx-cpus.c | 29 +-
target/i386/{ => whpx}/whpx-cpus.h | 2 -
103 files changed, 1914 insertions(+), 1247 deletions(-)
create mode 100644 accel/accel-common.c
rename accel/{accel.c => accel-softmmu.c} (75%)
create mode 100644 accel/accel-user.c
create mode 100644 accel/tcg/tcg-cpus-mttcg.h
rename include/{sysemu => qemu}/accel.h (95%)
create mode 100644 target/i386/cpu-dump.c
rename target/i386/{ => hax}/hax-all.c (99%)
rename target/i386/{ => hax}/hax-cpus.c (70%)
rename target/i386/{ => hax}/hax-cpus.h (95%)
rename target/i386/{ => hax}/hax-i386.h (95%)
rename target/i386/{ => hax}/hax-interface.h (100%)
rename target/i386/{ => hax}/hax-mem.c (100%)
rename target/i386/{ => hax}/hax-posix.c (100%)
rename target/i386/{ => hax}/hax-posix.h (100%)
rename target/i386/{ => hax}/hax-windows.c (100%)
rename target/i386/{ => hax}/hax-windows.h (100%)
create mode 100644 target/i386/hax/meson.build
create mode 100644 target/i386/helper-tcg.h
create mode 100644 target/i386/host-cpu.c
create mode 100644 target/i386/host-cpu.h
create mode 100644 target/i386/hvf/cpu.c
create mode 100644 target/i386/kvm/cpu.c
rename target/i386/{ => kvm}/hyperv-proto.h (100%)
rename target/i386/{ => kvm}/hyperv-stub.c (100%)
rename target/i386/{ => kvm}/hyperv.c (100%)
rename target/i386/{ => kvm}/hyperv.h (100%)
create mode 100644 target/i386/kvm/kvm-cpu.h
rename target/i386/{ => kvm}/kvm-stub.c (100%)
rename target/i386/{ => kvm}/kvm.c (99%)
rename target/i386/{ => kvm}/kvm_i386.h (100%)
create mode 100644 target/i386/kvm/meson.build
create mode 100644 target/i386/kvm/trace-events
create mode 100644 target/i386/kvm/trace.h
rename target/i386/{ => tcg}/bpt_helper.c (99%)
rename target/i386/{ => tcg}/cc_helper.c (99%)
create mode 100644 target/i386/tcg/cpu.c
rename target/i386/{ => tcg}/excp_helper.c (99%)
rename target/i386/{ => tcg}/fpu_helper.c (99%)
rename target/i386/{ => tcg}/int_helper.c (99%)
rename target/i386/{ => tcg}/mem_helper.c (99%)
create mode 100644 target/i386/tcg/meson.build
rename target/i386/{ => tcg}/misc_helper.c (99%)
rename target/i386/{ => tcg}/mpx_helper.c (99%)
rename target/i386/{ => tcg}/seg_helper.c (99%)
rename target/i386/{ => tcg}/smm_helper.c (99%)
rename target/i386/{ => tcg}/svm_helper.c (99%)
rename target/i386/{ => tcg}/tcg-stub.c (100%)
rename target/i386/{ => tcg}/translate.c (99%)
create mode 100644 target/i386/whpx/meson.build
rename target/i386/{ => whpx}/whp-dispatch.h (100%)
rename target/i386/{ => whpx}/whpx-all.c (99%)
rename target/i386/{ => whpx}/whpx-cpus.c (73%)
rename target/i386/{ => whpx}/whpx-cpus.h (96%)
--
2.26.2
next reply other threads:[~2020-11-24 16:24 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-24 16:21 Claudio Fontana [this message]
2020-11-24 16:21 ` [RFC v5 01/12] i386: move kvm accel files into kvm/ Claudio Fontana
2020-11-24 16:22 ` [RFC v5 02/12] i386: move whpx accel files into whpx/ Claudio Fontana
2020-11-24 16:22 ` [RFC v5 03/12] i386: move hax accel files into hax/ Claudio Fontana
2020-11-24 16:22 ` [RFC v5 04/12] i386: hvf: remove stale MAINTAINERS entry for old hvf stubs Claudio Fontana
2020-11-24 16:22 ` [RFC v5 05/12] i386: move TCG accel files into tcg/ Claudio Fontana
2020-11-24 16:22 ` [RFC v5 06/12] i386: move cpu dump out of helper.c into cpu-dump.c Claudio Fontana
2020-11-24 16:22 ` [RFC v5 07/12] i386: move TCG cpu class initialization out of helper.c Claudio Fontana
2020-11-24 16:22 ` [RFC v5 08/12] accel: extend AccelState and AccelClass to user-mode Claudio Fontana
2020-11-24 17:56 ` Eduardo Habkost
2020-11-24 18:16 ` Claudio Fontana
2020-11-24 16:22 ` [RFC v5 09/12] module: introduce MODULE_INIT_ACCEL_CPU Claudio Fontana
2020-11-24 17:08 ` Eduardo Habkost
2020-11-24 18:29 ` Claudio Fontana
2020-11-24 19:08 ` Eduardo Habkost
2020-11-24 20:01 ` Paolo Bonzini
2020-11-25 9:21 ` Claudio Fontana
2020-11-25 9:30 ` Paolo Bonzini
2020-11-25 10:42 ` Claudio Fontana
2020-11-26 12:45 ` Claudio Fontana
2020-11-26 11:25 ` Philippe Mathieu-Daudé
2020-11-26 12:03 ` Claudio Fontana
2020-11-24 16:22 ` [RFC v5 10/12] i386: split cpu accelerators from cpu.c Claudio Fontana
2020-11-24 16:22 ` [RFC v5 11/12] i386: centralize initialization of cpu accel interfaces Claudio Fontana
2020-11-24 16:59 ` Eduardo Habkost
2020-11-24 18:38 ` Claudio Fontana
2020-11-24 20:13 ` Paolo Bonzini
2020-11-24 21:31 ` Eduardo Habkost
2020-11-25 9:26 ` Claudio Fontana
2020-11-26 10:57 ` Claudio Fontana
2020-11-26 13:44 ` Eduardo Habkost
2020-11-26 14:33 ` Claudio Fontana
2020-11-26 14:49 ` Eduardo Habkost
2020-11-26 14:55 ` Claudio Fontana
2020-11-26 15:14 ` Eduardo Habkost
2020-11-26 15:34 ` Claudio Fontana
2020-11-26 15:48 ` Eduardo Habkost
2020-11-26 15:49 ` Claudio Fontana
2020-11-26 15:14 ` Paolo Bonzini
2020-11-25 9:24 ` Claudio Fontana
2020-11-26 14:42 ` Claudio Fontana
2020-11-24 16:22 ` [RFC v5 12/12] accel: centralize initialization of CpusAccelOps Claudio Fontana
2020-11-24 17:48 ` Eduardo Habkost
2020-11-24 18:52 ` Claudio Fontana
2020-11-24 19:27 ` Eduardo Habkost
2020-11-24 19:39 ` Claudio Fontana
2020-11-24 20:34 ` Eduardo Habkost
2020-11-25 9:32 ` Claudio Fontana
2020-11-25 11:48 ` Claudio Fontana
2020-11-25 14:51 ` Eduardo Habkost
2020-11-24 20:14 ` [RFC v5 00/12] i386 cleanup Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201124162210.8796-1-cfontana@suse.de \
--to=cfontana@suse.de \
--cc=anthony.perard@citrix.com \
--cc=brogers@suse.com \
--cc=colin.xu@intel.com \
--cc=cota@braap.org \
--cc=dfaggioli@suse.com \
--cc=dirty@apple.com \
--cc=ehabkost@redhat.com \
--cc=haxm-team@intel.com \
--cc=jasowang@redhat.com \
--cc=lvivier@redhat.com \
--cc=mtosatti@redhat.com \
--cc=ohering@suse.de \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=r.bolshakov@yadro.com \
--cc=richard.henderson@linaro.org \
--cc=sstabellini@kernel.org \
--cc=sunilmut@microsoft.com \
--cc=thuth@redhat.com \
--cc=wenchao.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).