qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org, Salil Mehta <salil.mehta@huawei.com>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>
Cc: "Alexander Graf" <agraf@csgraf.de>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Julian Armistead" <julian.armistead@linaro.org>,
	"Cameron Esfahani" <dirty@apple.com>,
	"Mark Burton" <mburton@qti.qualcomm.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>
Subject: Re: [RFC PATCH RESEND 00/42] accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF
Date: Tue, 2 Sep 2025 15:49:27 +0200	[thread overview]
Message-ID: <41c83d3f-e5dc-42c5-a743-1aafc4cce27a@linaro.org> (raw)
In-Reply-To: <20250620172751.94231-1-philmd@linaro.org>

Cc'ing Salil

On 20/6/25 19:27, Philippe Mathieu-Daudé wrote:
> 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
> 



      parent reply	other threads:[~2025-09-02 13:50 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Philippe Mathieu-Daudé [this message]

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=41c83d3f-e5dc-42c5-a743-1aafc4cce27a@linaro.org \
    --to=philmd@linaro.org \
    --cc=agraf@csgraf.de \
    --cc=alex.bennee@linaro.org \
    --cc=dirty@apple.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=jean-philippe@linaro.org \
    --cc=julian.armistead@linaro.org \
    --cc=mburton@qti.qualcomm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=salil.mehta@huawei.com \
    --cc=thuth@redhat.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).