qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH RESEND 00/42] accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF
@ 2025-06-20 17:27 Philippe Mathieu-Daudé
  2025-06-20 17:27 ` [RFC PATCH RESEND 01/42] accel/split: Minimal stubs for split accelerator Philippe Mathieu-Daudé
                   ` (42 more replies)
  0 siblings, 43 replies; 83+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-06-20 17:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alexander Graf, Alex Bennée, Richard Henderson,
	Paolo Bonzini, Peter Maydell, Julian Armistead, Cameron Esfahani,
	Mark Burton, Thomas Huth, Edgar E. Iglesias, Pierrick Bouvier,
	Philippe Mathieu-Daudé

Hi,

This RFC is a proof-of-concept we can have QEMU run both software
emulator (TCG) and hardware accelerator (here HVF). Unfortunately
I'm exhausted so I'll let Alex explain what this is about,
otherwise I'll post the real cover letter next Monday after
getting some rest.

Full work available in the split-accel-rfc-v5 tag:
https://gitlab.com/philmd/qemu/-/commits/split-accel-rfc-v5

Regards,

Phil.

Julian Armistead (1):
  accel/split: Minimal stubs for split accelerator

Philippe Mathieu-Daudé (41):
  accel/split: Define SplitAccelState
  accel/split: Implement cpus_are_resettable()
  accel/split: Implement accel_init_machine()
  accel/split: Expose 'hw' and 'sw' properties
  accel/split: Empty setup_post()
  accel/split: Implement supports_guest_debug()
  accel/split: Implement gdbstub_supported_sstep_flags()
  accel/split: Add cpu_thread_routine() stub
  accel/split: Define and allocate AccelCPUState
  accel/split: Register MTTCG
  accel/split: Have thread routine ready to dispatch over HW/SW
  accel/split: Implement cpu_reset_hold()
  accel/split: Implement synchronize_post_init()
  accel/split: Implement synchronize_pre_resume()
  accel/split: Implement synchronize_state()
  accel/split: Implement synchronize_post_reset()
  accel/split: Implement synchronize_pre_loadvm()
  accel/split: Implement kick_vcpu_thread()
  accel/split: Implement cpu_common_realize()
  accel/split: Set use_hw in cpu_thread_routine() and switch over
  accel/split: Add few trace events in cpu_thread_routine handler
  target/arm: Implement SysemuCPUOps::can_accelerate() handler
  accel/split: Implement handle_interrupt()
  accel/split: Empty ops_init()
  accel/split: Empty set/get_virtual_clock()
  accel/split: Empty get_elapsed_ticks()
  accel/split: Empty cpu_thread_is_idle()
  accel/split: Kludge qemu_tcg_mttcg_enabled()
  accel/split: Implement remove_all_breakpoints()
  accel/split: Implement remove_breakpoint()
  accel/split: Implement insert_breakpoint()
  accel/split: Implement update_guest_debug()
  accel/split: Implement get_[vcpu]_stats()
  target/arm: Emulate EL2 under TCG
  target/arm: Have ERET switch to hw accel for EL0/EL1
  accel/hvf: Emulate HVC at EL2
  accel/tcg: Introduce TCGCPUOps::rebuild_tb_hflags handler
  target/arm: Implement TCGCPUOps::rebuild_tb_hflags()
  accel/split: Call TCGCPUOps::rebuild_tb_hflags()
  tests/functional: Add split_available() helper
  tests/functional: Test Aarch64 virt machine with split-accelerator

 meson.build                                 |   1 +
 accel/split/split-accel.h                   |  54 +++
 accel/split/trace.h                         |   2 +
 accel/tcg/internal-common.h                 |   1 +
 include/accel/tcg/cpu-ops.h                 |   2 +
 include/exec/cpu-common.h                   |   1 +
 include/system/accel-ops.h                  |   8 +
 target/arm/cpu.h                            |   2 +
 accel/split/split-accel-ops.c               | 381 ++++++++++++++++++++
 accel/split/split-all.c                     | 196 ++++++++++
 accel/tcg/cpu-exec.c                        |   9 +
 accel/tcg/tcg-accel-ops.c                   |   1 +
 accel/tcg/tcg-all.c                         |   1 +
 system/vl.c                                 |   4 +
 target/arm/cpu.c                            |   9 +
 target/arm/cpu64.c                          |   7 +-
 target/arm/hvf/hvf.c                        |   6 +
 target/arm/tcg/cpu-v7m.c                    |   1 +
 target/arm/tcg/helper-a64.c                 |   9 +
 target/arm/tcg/hflags.c                     |   5 +
 accel/Kconfig                               |   6 +
 accel/meson.build                           |   1 +
 accel/split/meson.build                     |   9 +
 accel/split/trace-events                    |   9 +
 python/qemu/utils/__init__.py               |   3 +-
 python/qemu/utils/accel.py                  |  10 +
 tests/functional/meson.build                |   1 +
 tests/functional/qemu_test/testcase.py      |   4 +-
 tests/functional/test_aarch64_virt_split.py |  69 ++++
 29 files changed, 808 insertions(+), 4 deletions(-)
 create mode 100644 accel/split/split-accel.h
 create mode 100644 accel/split/trace.h
 create mode 100644 accel/split/split-accel-ops.c
 create mode 100644 accel/split/split-all.c
 create mode 100644 accel/split/meson.build
 create mode 100644 accel/split/trace-events
 create mode 100644 tests/functional/test_aarch64_virt_split.py

-- 
2.49.0



^ permalink raw reply	[flat|nested] 83+ messages in thread

end of thread, other threads:[~2025-09-02 13:50 UTC | newest]

Thread overview: 83+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-20 17:27 [RFC PATCH RESEND 00/42] accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 01/42] accel/split: Minimal stubs for split accelerator Philippe Mathieu-Daudé
2025-06-22  2:18   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 02/42] accel/split: Define SplitAccelState Philippe Mathieu-Daudé
2025-06-22  2:19   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 03/42] accel/split: Implement cpus_are_resettable() Philippe Mathieu-Daudé
2025-06-22  2:20   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 04/42] accel/split: Implement accel_init_machine() Philippe Mathieu-Daudé
2025-06-22  2:22   ` Richard Henderson
2025-06-22  2:23   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 05/42] accel/split: Expose 'hw' and 'sw' properties Philippe Mathieu-Daudé
2025-06-22  2:26   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 06/42] accel/split: Empty setup_post() Philippe Mathieu-Daudé
2025-06-22  2:26   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 07/42] accel/split: Implement supports_guest_debug() Philippe Mathieu-Daudé
2025-06-22  2:28   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 08/42] accel/split: Implement gdbstub_supported_sstep_flags() Philippe Mathieu-Daudé
2025-06-22  2:30   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 09/42] accel/split: Add cpu_thread_routine() stub Philippe Mathieu-Daudé
2025-06-22  2:32   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 10/42] accel/split: Define and allocate AccelCPUState Philippe Mathieu-Daudé
2025-06-22  2:35   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 11/42] accel/split: Register MTTCG Philippe Mathieu-Daudé
2025-06-22  2:38   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 12/42] accel/split: Have thread routine ready to dispatch over HW/SW Philippe Mathieu-Daudé
2025-06-22  2:45   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 13/42] accel/split: Implement cpu_reset_hold() Philippe Mathieu-Daudé
2025-06-22  2:46   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 14/42] accel/split: Implement synchronize_post_init() Philippe Mathieu-Daudé
2025-06-22  2:47   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 15/42] accel/split: Implement synchronize_pre_resume() Philippe Mathieu-Daudé
2025-06-22  2:47   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 16/42] accel/split: Implement synchronize_state() Philippe Mathieu-Daudé
2025-06-22  2:52   ` Richard Henderson
2025-06-22  2:54     ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 17/42] accel/split: Implement synchronize_post_reset() Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 18/42] accel/split: Implement synchronize_pre_loadvm() Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 19/42] accel/split: Implement kick_vcpu_thread() Philippe Mathieu-Daudé
2025-06-22  2:56   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 20/42] accel/split: Implement cpu_common_realize() Philippe Mathieu-Daudé
2025-06-22  2:56   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 21/42] accel/split: Set use_hw in cpu_thread_routine() and switch over Philippe Mathieu-Daudé
2025-06-22  3:02   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 22/42] accel/split: Add few trace events in cpu_thread_routine handler Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 23/42] target/arm: Implement SysemuCPUOps::can_accelerate() handler Philippe Mathieu-Daudé
2025-06-22  3:03   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 24/42] accel/split: Implement handle_interrupt() Philippe Mathieu-Daudé
2025-06-22  3:04   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 25/42] accel/split: Empty ops_init() Philippe Mathieu-Daudé
2025-06-22  3:09   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 26/42] accel/split: Empty set/get_virtual_clock() Philippe Mathieu-Daudé
2025-06-22  3:11   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 27/42] accel/split: Empty get_elapsed_ticks() Philippe Mathieu-Daudé
2025-06-22  3:12   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 28/42] accel/split: Empty cpu_thread_is_idle() Philippe Mathieu-Daudé
2025-06-22  3:14   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 29/42] accel/split: Kludge qemu_tcg_mttcg_enabled() Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 30/42] accel/split: Implement remove_all_breakpoints() Philippe Mathieu-Daudé
2025-06-22  3:17   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 31/42] accel/split: Implement remove_breakpoint() Philippe Mathieu-Daudé
2025-06-22  3:17   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 32/42] accel/split: Implement insert_breakpoint() Philippe Mathieu-Daudé
2025-06-22  3:17   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 33/42] accel/split: Implement update_guest_debug() Philippe Mathieu-Daudé
2025-06-22  3:18   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 34/42] accel/split: Implement get_[vcpu]_stats() Philippe Mathieu-Daudé
2025-06-22  3:19   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 35/42] target/arm: Emulate EL2 under TCG Philippe Mathieu-Daudé
2025-06-22  3:20   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 36/42] target/arm: Have ERET switch to hw accel for EL0/EL1 Philippe Mathieu-Daudé
2025-06-22  3:27   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 37/42] accel/hvf: Emulate HVC at EL2 Philippe Mathieu-Daudé
2025-06-22  3:28   ` Richard Henderson
2025-07-18  5:47     ` Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 38/42] accel/tcg: Introduce TCGCPUOps::rebuild_tb_hflags handler Philippe Mathieu-Daudé
2025-06-22  3:33   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 39/42] target/arm: Implement TCGCPUOps::rebuild_tb_hflags() Philippe Mathieu-Daudé
2025-06-20 17:27 ` [RFC PATCH RESEND 40/42] accel/split: Call TCGCPUOps::rebuild_tb_hflags() Philippe Mathieu-Daudé
2025-06-22  3:34   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 41/42] tests/functional: Add split_available() helper Philippe Mathieu-Daudé
2025-06-22  3:36   ` Richard Henderson
2025-06-20 17:27 ` [RFC PATCH RESEND 42/42] tests/functional: Test Aarch64 virt machine with split-accelerator Philippe Mathieu-Daudé
2025-09-02 13:49 ` [RFC PATCH RESEND 00/42] accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF Philippe Mathieu-Daudé

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).