Few changes needed before being able to add the
split acceleration:
- few method docstring added
- remove pointless stubs
- propagate soon required AccelState argument
- try to reduce current_accel() uses
- move declarations AccelClass <-> AccelOpsClass
- display model name in 'info cpus'
- add 'info accel' command to monitor
- rename CPUState @dirty -> @hwaccel_synchronized
- make accel_create_vcpu_thread() more generic
- introduce hwaccel_enabled()
- expose init/exec/destroy vcpu hooks in AccelOpsClass for re-use
- add SysemuCPUOps::can_accelerate() hook
Commit descriptions are scarse because it is a RFC
(and I'm quite tired before the week-end).
Also available in the split-accel-rfc-v5 tag:
https://gitlab.com/philmd/qemu/-/commits/split-accel-rfc-v5
Regards,
Phil.
Philippe Mathieu-Daudé (48):
system/runstate: Document qemu_add_vm_change_state_handler()
system/cpus: Defer memory layout changes until vCPUs are realized
system/cpus: Assert interrupt handling is done with BQL locked
accel/kvm: Remove kvm_init_cpu_signals() stub
accel/kvm: Reduce kvm_create_vcpu() declaration scope
accel: Propagate AccelState to AccelClass::init_machine()
accel/kvm: Prefer local AccelState over global MachineState::accel
accel/hvf: Re-use QOM allocated state
accel/tcg: Prefer local AccelState over global current_accel()
accel: Pass AccelState argument to gdbstub_supported_sstep_flags()
accel: Move supports_guest_debug() declaration to AccelClass
accel: Move cpus_are_resettable() declaration to AccelClass
accel: Move cpu_common_[un]realize() declarations to AccelOpsClass
hw/core/machine: Display CPU model name in 'info cpus' command
accel/system: Add 'info accel' on human monitor
accel/tcg: Factor tcg_dump_flush_info() out
accel/tcg: Implement get_[vcpu]_stats()
accel/hvf: Implement get_vcpu_stats()
cpus: Document CPUState::vcpu_dirty field
cpus: Rename 'vcpu_dirty' field as negated 'hwaccel_synchronized'
accel/hvf: Replace @dirty field by generic @hwaccel_synchronized
accel/nvmm: Replace @dirty field by generic @hwaccel_synchronized
accel/whpx: Replace @dirty field by generic @hwaccel_synchronized
accel/kvm: Remove kvm_cpu_synchronize_state() stub
accel/system: Document cpu_synchronize_state()
accel/system: Document cpu_synchronize_state_post_init/reset()
accel/dummy: Factor dummy_thread_precreate() out
accel/dummy: Factor tcg_vcpu_thread_precreate() out
accel: Factor accel_create_vcpu_thread() out
accel: Introduce AccelOpsClass::cpu_thread_routine handler
accel/dummy: Convert to AccelOpsClass::cpu_thread_routine
accel/tcg: Convert to AccelOpsClass::cpu_thread_routine
accel/hvf: Convert to AccelOpsClass::cpu_thread_routine
accel/kvm: Convert to AccelOpsClass::cpu_thread_routine
accel/nvmm: Convert to AccelOpsClass::cpu_thread_routine
accel/whpx: Convert to AccelOpsClass::cpu_thread_routine
accel/nvmm: Expose nvmm_enabled() to common code
accel/whpx: Expose whpx_enabled() to common code
accel/system: Introduce hwaccel_enabled() helper
accel: Factor accel_cpu_realize() out
accel/tcg: Factor tcg_vcpu_init() out for re-use
accel/tcg: Expose vcpu_[un]register() and cpu_exec() for MTTCG
accel/tcg: Expose vcpu_[un]register() and cpu_exec() for RR
accel/system: Declare init/exec/destroy vcpu hooks
accel/tcg: Register init/exec/destroy vcpu hooks
accel/hvf: Register init/exec/destroy vcpu hooks
accel: Expose generic_handle_interrupt()
system: Introduce SysemuCPUOps::can_accelerate()
qapi/machine.json | 3 ++
accel/accel-internal.h | 2 +
accel/tcg/internal-common.h | 2 +
accel/tcg/tcg-accel-ops-icount.h | 4 +-
accel/tcg/tcg-accel-ops-mttcg.h | 7 ++-
accel/tcg/tcg-accel-ops-rr.h | 3 ++
accel/tcg/tcg-accel-ops.h | 5 ++
include/hw/core/cpu.h | 13 +++++-
include/hw/core/sysemu-cpu-ops.h | 4 ++
include/qemu/accel.h | 11 +++--
include/system/accel-ops.h | 32 +++++++++++--
include/system/cpus.h | 5 +-
include/system/hvf.h | 2 +-
include/system/hvf_int.h | 1 -
include/system/hw_accel.h | 34 +++++++++++++-
include/system/kvm.h | 8 ----
include/system/nvmm.h | 23 +++++-----
include/system/runstate.h | 10 ++++
include/system/whpx.h | 27 +++++------
accel/accel-common.c | 60 ++++++++++++++++++++----
accel/accel-system.c | 40 +++++++++++++++-
accel/dummy-cpus.c | 10 +---
accel/hvf/hvf-accel-ops.c | 60 ++++++++++++------------
accel/kvm/kvm-accel-ops.c | 18 +-------
accel/kvm/kvm-all.c | 42 ++++++++++-------
accel/qtest/qtest.c | 5 +-
accel/stubs/kvm-stub.c | 9 ----
accel/stubs/nvmm-stub.c | 12 +++++
accel/stubs/whpx-stub.c | 12 +++++
accel/tcg/monitor.c | 27 +++++++----
accel/tcg/tcg-accel-ops-icount.c | 8 ++--
accel/tcg/tcg-accel-ops-mttcg.c | 53 +++++++++++++--------
accel/tcg/tcg-accel-ops-rr.c | 76 +++++++++++++++++++++----------
accel/tcg/tcg-accel-ops.c | 36 +++++++++++----
accel/tcg/tcg-all.c | 20 ++++++--
accel/xen/xen-all.c | 3 +-
bsd-user/main.c | 2 +-
gdbstub/system.c | 7 +--
hw/core/cpu-system.c | 13 ++++++
hw/core/machine-hmp-cmds.c | 3 +-
hw/core/machine-qmp-cmds.c | 1 +
linux-user/main.c | 2 +-
system/cpus.c | 18 ++------
system/physmem.c | 8 ++++
target/arm/hvf/hvf.c | 6 +--
target/i386/hvf/hvf.c | 6 +--
target/i386/hvf/x86hvf.c | 2 +-
target/i386/nvmm/nvmm-accel-ops.c | 12 +----
target/i386/nvmm/nvmm-all.c | 29 +++++-------
target/i386/whpx/whpx-accel-ops.c | 12 +----
target/i386/whpx/whpx-all.c | 30 +++++-------
target/mips/kvm.c | 4 +-
accel/stubs/meson.build | 2 +
hmp-commands-info.hx | 12 +++++
54 files changed, 560 insertions(+), 296 deletions(-)
create mode 100644 accel/stubs/nvmm-stub.c
create mode 100644 accel/stubs/whpx-stub.c
--
2.49.0