* [PULL 00/31] Accelerators patches for 2025-07-04
@ 2025-07-04 10:14 Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 01/31] system/cpus: Assert interrupt handling is done with BQL locked Philippe Mathieu-Daudé
` (31 more replies)
0 siblings, 32 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
The following changes since commit c77283dd5d79149f4e7e9edd00f65416c648ee59:
Merge tag 'pull-request-2025-07-02' of https://gitlab.com/thuth/qemu into staging (2025-07-03 06:01:41 -0400)
are available in the Git repository at:
https://github.com/philmd/qemu.git tags/accel-20250704
for you to fetch changes up to d7fffb0c8a498cd0a184832e4e2c24251dbff7c0:
hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers() (2025-07-04 12:08:44 +0200)
----------------------------------------------------------------
Accelerators patches
- Generic API consolidation, cleanups (dead code removal, documentation added)
- Remove monitor TCG 'info opcount' and @x-query-opcount
- Have HVF / NVMM / WHPX use generic CPUState::vcpu_dirty field
- Expose nvmm_enabled() and whpx_enabled() to common code
- Have hmp_info_registers() dump vector registers
----------------------------------------------------------------
Daniel Henrique Barboza (1):
hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers()
Philippe Mathieu-Daudé (30):
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/tcg: Remove 'info opcount' and @x-query-opcount
accel/tcg: Remove profiler leftover
accel/tcg: Factor tcg_dump_flush_info() out
accel/tcg: Factor tcg_dump_stats() out for re-use
accel/hvf: Restrict internal declarations
accel/hvf: Move per-cpu method declarations to hvf-accel-ops.c
accel/hvf: Move generic method declarations to hvf-all.c
cpus: Document CPUState::vcpu_dirty field
accel/hvf: Replace @dirty field by generic CPUState::vcpu_dirty field
accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
accel/whpx: Replace @dirty field by generic CPUState::vcpu_dirty field
accel/kvm: Remove kvm_cpu_synchronize_state() stub
accel/system: Document cpu_synchronize_state()
accel/system: Document cpu_synchronize_state_post_init/reset()
accel/nvmm: Expose nvmm_enabled() to common code
accel/whpx: Expose whpx_enabled() to common code
accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h'
accel: Expose and register generic_handle_interrupt()
accel: Keep reference to AccelOpsClass in AccelClass
accel: Propagate AccelState to AccelClass::init_machine()
accel/tcg: Prefer local AccelState over global current_accel()
accel/kvm: Prefer local AccelState over global MachineState::accel
accel/kvm: Directly pass KVMState argument to do_kvm_create_vm()
accel: Directly pass AccelState argument to AccelClass::has_memory()
accel: Remove unused MachineState argument of AccelClass::setup_post()
accel: Pass AccelState argument to gdbstub_supported_sstep_flags()
MAINTAINERS: Add me as reviewer of overall accelerators section
MAINTAINERS | 4 +
qapi/machine.json | 18 --
accel/dummy-cpus.h | 14 ++
accel/tcg/internal-common.h | 2 +
include/hw/core/cpu.h | 3 +-
include/qemu/accel.h | 11 +-
include/system/accel-ops.h | 22 ++-
include/system/cpus.h | 5 -
include/system/hvf.h | 38 ----
include/system/hvf_int.h | 35 +++-
include/system/hw_accel.h | 21 +-
include/system/kvm.h | 8 -
include/system/nvmm.h | 23 +--
include/system/whpx.h | 27 +--
accel/accel-common.c | 2 +-
accel/accel-system.c | 7 +-
accel/dummy-cpus.c | 1 +
accel/hvf/hvf-accel-ops.c | 314 ++++--------------------------
accel/hvf/hvf-all.c | 277 ++++++++++++++++++++++++--
accel/kvm/kvm-accel-ops.c | 1 +
accel/kvm/kvm-all.c | 27 +--
accel/qtest/qtest.c | 4 +-
accel/stubs/kvm-stub.c | 9 -
accel/stubs/nvmm-stub.c | 12 ++
accel/stubs/whpx-stub.c | 12 ++
accel/tcg/monitor.c | 57 ++----
accel/tcg/tcg-accel-ops.c | 6 +-
accel/tcg/tcg-all.c | 6 +-
accel/xen/xen-all.c | 6 +-
bsd-user/main.c | 2 +-
linux-user/main.c | 2 +-
monitor/hmp-cmds-target.c | 4 +-
system/cpus.c | 12 +-
system/memory.c | 2 +-
target/arm/hvf/hvf.c | 4 +-
target/i386/hvf/hvf.c | 4 +-
target/i386/hvf/x86hvf.c | 2 +-
target/i386/nvmm/nvmm-accel-ops.c | 1 +
target/i386/nvmm/nvmm-all.c | 31 ++-
target/i386/whpx/whpx-accel-ops.c | 1 +
target/i386/whpx/whpx-all.c | 32 ++-
tests/qtest/qmp-cmd-test.c | 1 -
accel/stubs/meson.build | 2 +
hmp-commands-info.hx | 14 --
44 files changed, 551 insertions(+), 535 deletions(-)
create mode 100644 accel/dummy-cpus.h
create mode 100644 accel/stubs/nvmm-stub.c
create mode 100644 accel/stubs/whpx-stub.c
--
2.49.0
^ permalink raw reply [flat|nested] 52+ messages in thread
* [PULL 01/31] system/cpus: Assert interrupt handling is done with BQL locked
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 02/31] accel/kvm: Remove kvm_init_cpu_signals() stub Philippe Mathieu-Daudé
` (30 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-5-philmd@linaro.org>
---
accel/tcg/tcg-accel-ops.c | 2 --
system/cpus.c | 2 ++
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
index b24d6a75625..6116644d1c0 100644
--- a/accel/tcg/tcg-accel-ops.c
+++ b/accel/tcg/tcg-accel-ops.c
@@ -93,8 +93,6 @@ static void tcg_cpu_reset_hold(CPUState *cpu)
/* mask must never be zero, except for A20 change call */
void tcg_handle_interrupt(CPUState *cpu, int mask)
{
- g_assert(bql_locked());
-
cpu->interrupt_request |= mask;
/*
diff --git a/system/cpus.c b/system/cpus.c
index d16b0dff989..a43e0e4e796 100644
--- a/system/cpus.c
+++ b/system/cpus.c
@@ -265,6 +265,8 @@ static void generic_handle_interrupt(CPUState *cpu, int mask)
void cpu_interrupt(CPUState *cpu, int mask)
{
+ g_assert(bql_locked());
+
if (cpus_accel->handle_interrupt) {
cpus_accel->handle_interrupt(cpu, mask);
} else {
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 02/31] accel/kvm: Remove kvm_init_cpu_signals() stub
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 01/31] system/cpus: Assert interrupt handling is done with BQL locked Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 03/31] accel/kvm: Reduce kvm_create_vcpu() declaration scope Philippe Mathieu-Daudé
` (29 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Since commit 57038a92bb0 ("cpus: extract out kvm-specific code
to accel/kvm") the kvm_init_cpu_signals() stub is not necessary.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Message-Id: <20250703173248.44995-6-philmd@linaro.org>
---
accel/stubs/kvm-stub.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index ecfd7636f5f..b9b4427c919 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -105,11 +105,6 @@ unsigned int kvm_get_free_memslots(void)
return 0;
}
-void kvm_init_cpu_signals(CPUState *cpu)
-{
- abort();
-}
-
bool kvm_arm_supports_user_irq(void)
{
return false;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 03/31] accel/kvm: Reduce kvm_create_vcpu() declaration scope
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 01/31] system/cpus: Assert interrupt handling is done with BQL locked Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 02/31] accel/kvm: Remove kvm_init_cpu_signals() stub Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 04/31] accel/tcg: Remove 'info opcount' and @x-query-opcount Philippe Mathieu-Daudé
` (28 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
kvm_create_vcpu() is only used within the same file unit.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-7-philmd@linaro.org>
---
include/system/kvm.h | 8 --------
accel/kvm/kvm-all.c | 8 +++++++-
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/include/system/kvm.h b/include/system/kvm.h
index 7cc60d26f24..e943df2c09d 100644
--- a/include/system/kvm.h
+++ b/include/system/kvm.h
@@ -316,14 +316,6 @@ int kvm_create_device(KVMState *s, uint64_t type, bool test);
*/
bool kvm_device_supported(int vmfd, uint64_t type);
-/**
- * kvm_create_vcpu - Gets a parked KVM vCPU or creates a KVM vCPU
- * @cpu: QOM CPUState object for which KVM vCPU has to be fetched/created.
- *
- * @returns: 0 when success, errno (<0) when failed.
- */
-int kvm_create_vcpu(CPUState *cpu);
-
/**
* kvm_park_vcpu - Park QEMU KVM vCPU context
* @cpu: QOM CPUState object for which QEMU KVM vCPU context has to be parked.
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index d095d1b98f8..17235f26464 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -453,7 +453,13 @@ static void kvm_reset_parked_vcpus(KVMState *s)
}
}
-int kvm_create_vcpu(CPUState *cpu)
+/**
+ * kvm_create_vcpu - Gets a parked KVM vCPU or creates a KVM vCPU
+ * @cpu: QOM CPUState object for which KVM vCPU has to be fetched/created.
+ *
+ * @returns: 0 when success, errno (<0) when failed.
+ */
+static int kvm_create_vcpu(CPUState *cpu)
{
unsigned long vcpu_id = kvm_arch_vcpu_id(cpu);
KVMState *s = kvm_state;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 04/31] accel/tcg: Remove 'info opcount' and @x-query-opcount
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2025-07-04 10:14 ` [PULL 03/31] accel/kvm: Reduce kvm_create_vcpu() declaration scope Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 05/31] accel/tcg: Remove profiler leftover Philippe Mathieu-Daudé
` (27 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Since commit 1b65b4f54c7 ("accel/tcg: remove CONFIG_PROFILER",
released with QEMU v8.1.0) we get pointless output:
(qemu) info opcount
[TCG profiler not compiled]
Remove that unstable and unuseful command.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Dr. David Alan Gilbert <dave@treblig.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-8-philmd@linaro.org>
---
qapi/machine.json | 18 ------------------
accel/tcg/monitor.c | 21 ---------------------
tests/qtest/qmp-cmd-test.c | 1 -
hmp-commands-info.hx | 14 --------------
4 files changed, 54 deletions(-)
diff --git a/qapi/machine.json b/qapi/machine.json
index 0650b8de71a..f712e7da6d6 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1761,24 +1761,6 @@
'returns': 'HumanReadableText',
'features': [ 'unstable' ] }
-##
-# @x-query-opcount:
-#
-# Query TCG opcode counters
-#
-# Features:
-#
-# @unstable: This command is meant for debugging.
-#
-# Returns: TCG opcode counters
-#
-# Since: 6.2
-##
-{ 'command': 'x-query-opcount',
- 'returns': 'HumanReadableText',
- 'if': 'CONFIG_TCG',
- 'features': [ 'unstable' ] }
-
##
# @x-query-ramblock:
#
diff --git a/accel/tcg/monitor.c b/accel/tcg/monitor.c
index 1c182b6bfb5..7c686226b21 100644
--- a/accel/tcg/monitor.c
+++ b/accel/tcg/monitor.c
@@ -215,30 +215,9 @@ HumanReadableText *qmp_x_query_jit(Error **errp)
return human_readable_text_from_str(buf);
}
-static void tcg_dump_op_count(GString *buf)
-{
- g_string_append_printf(buf, "[TCG profiler not compiled]\n");
-}
-
-HumanReadableText *qmp_x_query_opcount(Error **errp)
-{
- g_autoptr(GString) buf = g_string_new("");
-
- if (!tcg_enabled()) {
- error_setg(errp,
- "Opcode count information is only available with accel=tcg");
- return NULL;
- }
-
- tcg_dump_op_count(buf);
-
- return human_readable_text_from_str(buf);
-}
-
static void hmp_tcg_register(void)
{
monitor_register_hmp_info_hrt("jit", qmp_x_query_jit);
- monitor_register_hmp_info_hrt("opcount", qmp_x_query_opcount);
}
type_init(hmp_tcg_register);
diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c
index 040d042810b..cf718761861 100644
--- a/tests/qtest/qmp-cmd-test.c
+++ b/tests/qtest/qmp-cmd-test.c
@@ -51,7 +51,6 @@ static int query_error_class(const char *cmd)
{ "x-query-usb", ERROR_CLASS_GENERIC_ERROR },
/* Only valid with accel=tcg */
{ "x-query-jit", ERROR_CLASS_GENERIC_ERROR },
- { "x-query-opcount", ERROR_CLASS_GENERIC_ERROR },
{ "xen-event-list", ERROR_CLASS_GENERIC_ERROR },
{ NULL, -1 }
};
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index 639a450ee51..d7979222752 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -256,20 +256,6 @@ SRST
Show dynamic compiler info.
ERST
-#if defined(CONFIG_TCG)
- {
- .name = "opcount",
- .args_type = "",
- .params = "",
- .help = "show dynamic compiler opcode counters",
- },
-#endif
-
-SRST
- ``info opcount``
- Show dynamic compiler opcode counters
-ERST
-
{
.name = "sync-profile",
.args_type = "mean:-m,no_coalesce:-n,max:i?",
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 05/31] accel/tcg: Remove profiler leftover
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2025-07-04 10:14 ` [PULL 04/31] accel/tcg: Remove 'info opcount' and @x-query-opcount Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 06/31] accel/tcg: Factor tcg_dump_flush_info() out Philippe Mathieu-Daudé
` (26 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
TCG profiler was removed in commit 1b65b4f54c7.
Fixes: 1b65b4f54c7 ("accel/tcg: remove CONFIG_PROFILER")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-9-philmd@linaro.org>
---
accel/tcg/monitor.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/accel/tcg/monitor.c b/accel/tcg/monitor.c
index 7c686226b21..344ec500473 100644
--- a/accel/tcg/monitor.c
+++ b/accel/tcg/monitor.c
@@ -141,11 +141,6 @@ static void tlb_flush_counts(size_t *pfull, size_t *ppart, size_t *pelide)
*pelide = elide;
}
-static void tcg_dump_info(GString *buf)
-{
- g_string_append_printf(buf, "[TCG profiler not compiled]\n");
-}
-
static void dump_exec_info(GString *buf)
{
struct tb_tree_stats tst = {};
@@ -196,7 +191,6 @@ static void dump_exec_info(GString *buf)
g_string_append_printf(buf, "TLB full flushes %zu\n", flush_full);
g_string_append_printf(buf, "TLB partial flushes %zu\n", flush_part);
g_string_append_printf(buf, "TLB elided flushes %zu\n", flush_elide);
- tcg_dump_info(buf);
}
HumanReadableText *qmp_x_query_jit(Error **errp)
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 06/31] accel/tcg: Factor tcg_dump_flush_info() out
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2025-07-04 10:14 ` [PULL 05/31] accel/tcg: Remove profiler leftover Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 07/31] accel/tcg: Factor tcg_dump_stats() out for re-use Philippe Mathieu-Daudé
` (25 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-10-philmd@linaro.org>
---
accel/tcg/monitor.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/accel/tcg/monitor.c b/accel/tcg/monitor.c
index 344ec500473..6d9cc11d94c 100644
--- a/accel/tcg/monitor.c
+++ b/accel/tcg/monitor.c
@@ -141,11 +141,26 @@ static void tlb_flush_counts(size_t *pfull, size_t *ppart, size_t *pelide)
*pelide = elide;
}
+static void tcg_dump_flush_info(GString *buf)
+{
+ size_t flush_full, flush_part, flush_elide;
+
+ g_string_append_printf(buf, "TB flush count %u\n",
+ qatomic_read(&tb_ctx.tb_flush_count));
+ g_string_append_printf(buf, "TB invalidate count %u\n",
+ qatomic_read(&tb_ctx.tb_phys_invalidate_count));
+
+ tlb_flush_counts(&flush_full, &flush_part, &flush_elide);
+ g_string_append_printf(buf, "TLB full flushes %zu\n", flush_full);
+ g_string_append_printf(buf, "TLB partial flushes %zu\n", flush_part);
+ g_string_append_printf(buf, "TLB elided flushes %zu\n", flush_elide);
+}
+
static void dump_exec_info(GString *buf)
{
struct tb_tree_stats tst = {};
struct qht_stats hst;
- size_t nb_tbs, flush_full, flush_part, flush_elide;
+ size_t nb_tbs;
tcg_tb_foreach(tb_tree_stats_iter, &tst);
nb_tbs = tst.nb_tbs;
@@ -182,15 +197,7 @@ static void dump_exec_info(GString *buf)
qht_statistics_destroy(&hst);
g_string_append_printf(buf, "\nStatistics:\n");
- g_string_append_printf(buf, "TB flush count %u\n",
- qatomic_read(&tb_ctx.tb_flush_count));
- g_string_append_printf(buf, "TB invalidate count %u\n",
- qatomic_read(&tb_ctx.tb_phys_invalidate_count));
-
- tlb_flush_counts(&flush_full, &flush_part, &flush_elide);
- g_string_append_printf(buf, "TLB full flushes %zu\n", flush_full);
- g_string_append_printf(buf, "TLB partial flushes %zu\n", flush_part);
- g_string_append_printf(buf, "TLB elided flushes %zu\n", flush_elide);
+ tcg_dump_flush_info(buf);
}
HumanReadableText *qmp_x_query_jit(Error **errp)
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 07/31] accel/tcg: Factor tcg_dump_stats() out for re-use
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2025-07-04 10:14 ` [PULL 06/31] accel/tcg: Factor tcg_dump_flush_info() out Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 08/31] accel/hvf: Restrict internal declarations Philippe Mathieu-Daudé
` (24 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-11-philmd@linaro.org>
---
accel/tcg/internal-common.h | 2 ++
accel/tcg/monitor.c | 11 ++++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/accel/tcg/internal-common.h b/accel/tcg/internal-common.h
index 1dbc45dd955..77a3a0684a5 100644
--- a/accel/tcg/internal-common.h
+++ b/accel/tcg/internal-common.h
@@ -139,4 +139,6 @@ G_NORETURN void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr);
void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr);
+void tcg_dump_stats(GString *buf);
+
#endif
diff --git a/accel/tcg/monitor.c b/accel/tcg/monitor.c
index 6d9cc11d94c..e7ed7281a4b 100644
--- a/accel/tcg/monitor.c
+++ b/accel/tcg/monitor.c
@@ -200,6 +200,13 @@ static void dump_exec_info(GString *buf)
tcg_dump_flush_info(buf);
}
+void tcg_dump_stats(GString *buf)
+{
+ dump_accel_info(buf);
+ dump_exec_info(buf);
+ dump_drift_info(buf);
+}
+
HumanReadableText *qmp_x_query_jit(Error **errp)
{
g_autoptr(GString) buf = g_string_new("");
@@ -209,9 +216,7 @@ HumanReadableText *qmp_x_query_jit(Error **errp)
return NULL;
}
- dump_accel_info(buf);
- dump_exec_info(buf);
- dump_drift_info(buf);
+ tcg_dump_stats(buf);
return human_readable_text_from_str(buf);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 08/31] accel/hvf: Restrict internal declarations
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2025-07-04 10:14 ` [PULL 07/31] accel/tcg: Factor tcg_dump_stats() out for re-use Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 09/31] accel/hvf: Move per-cpu method declarations to hvf-accel-ops.c Philippe Mathieu-Daudé
` (23 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Common code only needs to know whether HVF is enabled and
the QOM type. Move the rest to "hvf_int.h", removing the
need for COMPILING_PER_TARGET #ifdef'ry.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-15-philmd@linaro.org>
---
include/system/hvf.h | 38 --------------------------------------
include/system/hvf_int.h | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 38 deletions(-)
diff --git a/include/system/hvf.h b/include/system/hvf.h
index a9a502f0c8f..d3dcf088b3f 100644
--- a/include/system/hvf.h
+++ b/include/system/hvf.h
@@ -14,10 +14,6 @@
#define HVF_H
#include "qemu/accel.h"
-#include "qemu/queue.h"
-#include "exec/vaddr.h"
-#include "qom/object.h"
-#include "exec/vaddr.h"
#ifdef COMPILING_PER_TARGET
# ifdef CONFIG_HVF
@@ -40,38 +36,4 @@ typedef struct HVFState HVFState;
DECLARE_INSTANCE_CHECKER(HVFState, HVF_STATE,
TYPE_HVF_ACCEL)
-#ifdef COMPILING_PER_TARGET
-struct hvf_sw_breakpoint {
- vaddr pc;
- vaddr saved_insn;
- int use_count;
- QTAILQ_ENTRY(hvf_sw_breakpoint) entry;
-};
-
-struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu,
- vaddr pc);
-int hvf_sw_breakpoints_active(CPUState *cpu);
-
-int hvf_arch_insert_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
-int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
-int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type);
-int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type);
-void hvf_arch_remove_all_hw_breakpoints(void);
-
-/*
- * hvf_update_guest_debug:
- * @cs: CPUState for the CPU to update
- *
- * Update guest to enable or disable debugging. Per-arch specifics will be
- * handled by calling down to hvf_arch_update_guest_debug.
- */
-int hvf_update_guest_debug(CPUState *cpu);
-void hvf_arch_update_guest_debug(CPUState *cpu);
-
-/*
- * Return whether the guest supports debugging.
- */
-bool hvf_arch_supports_guest_debug(void);
-#endif /* COMPILING_PER_TARGET */
-
#endif
diff --git a/include/system/hvf_int.h b/include/system/hvf_int.h
index d774e58df91..4f6db40c34e 100644
--- a/include/system/hvf_int.h
+++ b/include/system/hvf_int.h
@@ -12,6 +12,8 @@
#define HVF_INT_H
#include "qemu/queue.h"
+#include "exec/vaddr.h"
+#include "qom/object.h"
#ifdef __aarch64__
#include <Hypervisor/Hypervisor.h>
@@ -77,4 +79,36 @@ int hvf_put_registers(CPUState *);
int hvf_get_registers(CPUState *);
void hvf_kick_vcpu_thread(CPUState *cpu);
+struct hvf_sw_breakpoint {
+ vaddr pc;
+ vaddr saved_insn;
+ int use_count;
+ QTAILQ_ENTRY(hvf_sw_breakpoint) entry;
+};
+
+struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu,
+ vaddr pc);
+int hvf_sw_breakpoints_active(CPUState *cpu);
+
+int hvf_arch_insert_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
+int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
+int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type);
+int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type);
+void hvf_arch_remove_all_hw_breakpoints(void);
+
+/*
+ * hvf_update_guest_debug:
+ * @cs: CPUState for the CPU to update
+ *
+ * Update guest to enable or disable debugging. Per-arch specifics will be
+ * handled by calling down to hvf_arch_update_guest_debug.
+ */
+int hvf_update_guest_debug(CPUState *cpu);
+void hvf_arch_update_guest_debug(CPUState *cpu);
+
+/*
+ * Return whether the guest supports debugging.
+ */
+bool hvf_arch_supports_guest_debug(void);
+
#endif
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 09/31] accel/hvf: Move per-cpu method declarations to hvf-accel-ops.c
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2025-07-04 10:14 ` [PULL 08/31] accel/hvf: Restrict internal declarations Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 10/31] accel/hvf: Move generic method declarations to hvf-all.c Philippe Mathieu-Daudé
` (22 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
hvf-all.c aims to contain the generic accel methods (TYPE_ACCEL),
while hvf-accel-ops.c the per-vcpu methods (TYPE_ACCEL_OPS).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-16-philmd@linaro.org>
---
accel/hvf/hvf-accel-ops.c | 30 ++++++++++++++++++++++++++++++
accel/hvf/hvf-all.c | 28 ----------------------------
2 files changed, 30 insertions(+), 28 deletions(-)
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index b38977207d2..3752334688b 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -50,9 +50,11 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
+#include "qemu/queue.h"
#include "system/address-spaces.h"
#include "gdbstub/enums.h"
#include "hw/boards.h"
+#include "hw/core/cpu.h"
#include "system/accel-ops.h"
#include "system/cpus.h"
#include "system/hvf.h"
@@ -482,6 +484,34 @@ static void hvf_start_vcpu_thread(CPUState *cpu)
cpu, QEMU_THREAD_JOINABLE);
}
+struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, vaddr pc)
+{
+ struct hvf_sw_breakpoint *bp;
+
+ QTAILQ_FOREACH(bp, &hvf_state->hvf_sw_breakpoints, entry) {
+ if (bp->pc == pc) {
+ return bp;
+ }
+ }
+ return NULL;
+}
+
+int hvf_sw_breakpoints_active(CPUState *cpu)
+{
+ return !QTAILQ_EMPTY(&hvf_state->hvf_sw_breakpoints);
+}
+
+static void do_hvf_update_guest_debug(CPUState *cpu, run_on_cpu_data arg)
+{
+ hvf_arch_update_guest_debug(cpu);
+}
+
+int hvf_update_guest_debug(CPUState *cpu)
+{
+ run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
+ return 0;
+}
+
static int hvf_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
{
struct hvf_sw_breakpoint *bp;
diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c
index 8c387fda24d..1c72c43ddb4 100644
--- a/accel/hvf/hvf-all.c
+++ b/accel/hvf/hvf-all.c
@@ -41,31 +41,3 @@ void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line,
abort();
}
-
-struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, vaddr pc)
-{
- struct hvf_sw_breakpoint *bp;
-
- QTAILQ_FOREACH(bp, &hvf_state->hvf_sw_breakpoints, entry) {
- if (bp->pc == pc) {
- return bp;
- }
- }
- return NULL;
-}
-
-int hvf_sw_breakpoints_active(CPUState *cpu)
-{
- return !QTAILQ_EMPTY(&hvf_state->hvf_sw_breakpoints);
-}
-
-static void do_hvf_update_guest_debug(CPUState *cpu, run_on_cpu_data arg)
-{
- hvf_arch_update_guest_debug(cpu);
-}
-
-int hvf_update_guest_debug(CPUState *cpu)
-{
- run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
- return 0;
-}
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 10/31] accel/hvf: Move generic method declarations to hvf-all.c
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2025-07-04 10:14 ` [PULL 09/31] accel/hvf: Move per-cpu method declarations to hvf-accel-ops.c Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 11/31] cpus: Document CPUState::vcpu_dirty field Philippe Mathieu-Daudé
` (21 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
hvf-all.c aims to contain the generic accel methods (TYPE_ACCEL),
while hvf-accel-ops.c the per-vcpu methods (TYPE_ACCEL_OPS).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-17-philmd@linaro.org>
---
accel/hvf/hvf-accel-ops.c | 273 +-------------------------------------
accel/hvf/hvf-all.c | 267 +++++++++++++++++++++++++++++++++++++
2 files changed, 271 insertions(+), 269 deletions(-)
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index 3752334688b..2c0715a17f7 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -48,20 +48,16 @@
*/
#include "qemu/osdep.h"
-#include "qemu/error-report.h"
+#include "qemu/guest-random.h"
#include "qemu/main-loop.h"
#include "qemu/queue.h"
-#include "system/address-spaces.h"
#include "gdbstub/enums.h"
-#include "hw/boards.h"
+#include "exec/cpu-common.h"
#include "hw/core/cpu.h"
#include "system/accel-ops.h"
#include "system/cpus.h"
#include "system/hvf.h"
#include "system/hvf_int.h"
-#include "system/runstate.h"
-#include "qemu/guest-random.h"
-#include "trace.h"
HVFState *hvf_state;
@@ -81,132 +77,6 @@ hvf_slot *hvf_find_overlap_slot(uint64_t start, uint64_t size)
return NULL;
}
-struct mac_slot {
- int present;
- uint64_t size;
- uint64_t gpa_start;
- uint64_t gva;
-};
-
-struct mac_slot mac_slots[32];
-
-static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags)
-{
- struct mac_slot *macslot;
- hv_return_t ret;
-
- macslot = &mac_slots[slot->slot_id];
-
- if (macslot->present) {
- if (macslot->size != slot->size) {
- macslot->present = 0;
- trace_hvf_vm_unmap(macslot->gpa_start, macslot->size);
- ret = hv_vm_unmap(macslot->gpa_start, macslot->size);
- assert_hvf_ok(ret);
- }
- }
-
- if (!slot->size) {
- return 0;
- }
-
- macslot->present = 1;
- macslot->gpa_start = slot->start;
- macslot->size = slot->size;
- trace_hvf_vm_map(slot->start, slot->size, slot->mem, flags,
- flags & HV_MEMORY_READ ? 'R' : '-',
- flags & HV_MEMORY_WRITE ? 'W' : '-',
- flags & HV_MEMORY_EXEC ? 'E' : '-');
- ret = hv_vm_map(slot->mem, slot->start, slot->size, flags);
- assert_hvf_ok(ret);
- return 0;
-}
-
-static void hvf_set_phys_mem(MemoryRegionSection *section, bool add)
-{
- hvf_slot *mem;
- MemoryRegion *area = section->mr;
- bool writable = !area->readonly && !area->rom_device;
- hv_memory_flags_t flags;
- uint64_t page_size = qemu_real_host_page_size();
-
- if (!memory_region_is_ram(area)) {
- if (writable) {
- return;
- } else if (!memory_region_is_romd(area)) {
- /*
- * If the memory device is not in romd_mode, then we actually want
- * to remove the hvf memory slot so all accesses will trap.
- */
- add = false;
- }
- }
-
- if (!QEMU_IS_ALIGNED(int128_get64(section->size), page_size) ||
- !QEMU_IS_ALIGNED(section->offset_within_address_space, page_size)) {
- /* Not page aligned, so we can not map as RAM */
- add = false;
- }
-
- mem = hvf_find_overlap_slot(
- section->offset_within_address_space,
- int128_get64(section->size));
-
- if (mem && add) {
- if (mem->size == int128_get64(section->size) &&
- mem->start == section->offset_within_address_space &&
- mem->mem == (memory_region_get_ram_ptr(area) +
- section->offset_within_region)) {
- return; /* Same region was attempted to register, go away. */
- }
- }
-
- /* Region needs to be reset. set the size to 0 and remap it. */
- if (mem) {
- mem->size = 0;
- if (do_hvf_set_memory(mem, 0)) {
- error_report("Failed to reset overlapping slot");
- abort();
- }
- }
-
- if (!add) {
- return;
- }
-
- if (area->readonly ||
- (!memory_region_is_ram(area) && memory_region_is_romd(area))) {
- flags = HV_MEMORY_READ | HV_MEMORY_EXEC;
- } else {
- flags = HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC;
- }
-
- /* Now make a new slot. */
- int x;
-
- for (x = 0; x < hvf_state->num_slots; ++x) {
- mem = &hvf_state->slots[x];
- if (!mem->size) {
- break;
- }
- }
-
- if (x == hvf_state->num_slots) {
- error_report("No free slots");
- abort();
- }
-
- mem->size = int128_get64(section->size);
- mem->mem = memory_region_get_ram_ptr(area) + section->offset_within_region;
- mem->start = section->offset_within_address_space;
- mem->region = area;
-
- if (do_hvf_set_memory(mem, flags)) {
- error_report("Error registering new memory slot");
- abort();
- }
-}
-
static void do_hvf_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
{
if (!cpu->accel->dirty) {
@@ -244,147 +114,10 @@ static void hvf_cpu_synchronize_pre_loadvm(CPUState *cpu)
run_on_cpu(cpu, do_hvf_cpu_synchronize_set_dirty, RUN_ON_CPU_NULL);
}
-static void hvf_set_dirty_tracking(MemoryRegionSection *section, bool on)
-{
- hvf_slot *slot;
-
- slot = hvf_find_overlap_slot(
- section->offset_within_address_space,
- int128_get64(section->size));
-
- /* protect region against writes; begin tracking it */
- if (on) {
- slot->flags |= HVF_SLOT_LOG;
- hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
- HV_MEMORY_READ | HV_MEMORY_EXEC);
- /* stop tracking region*/
- } else {
- slot->flags &= ~HVF_SLOT_LOG;
- hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
- HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC);
- }
-}
-
-static void hvf_log_start(MemoryListener *listener,
- MemoryRegionSection *section, int old, int new)
-{
- if (old != 0) {
- return;
- }
-
- hvf_set_dirty_tracking(section, 1);
-}
-
-static void hvf_log_stop(MemoryListener *listener,
- MemoryRegionSection *section, int old, int new)
-{
- if (new != 0) {
- return;
- }
-
- hvf_set_dirty_tracking(section, 0);
-}
-
-static void hvf_log_sync(MemoryListener *listener,
- MemoryRegionSection *section)
-{
- /*
- * sync of dirty pages is handled elsewhere; just make sure we keep
- * tracking the region.
- */
- hvf_set_dirty_tracking(section, 1);
-}
-
-static void hvf_region_add(MemoryListener *listener,
- MemoryRegionSection *section)
-{
- hvf_set_phys_mem(section, true);
-}
-
-static void hvf_region_del(MemoryListener *listener,
- MemoryRegionSection *section)
-{
- hvf_set_phys_mem(section, false);
-}
-
-static MemoryListener hvf_memory_listener = {
- .name = "hvf",
- .priority = MEMORY_LISTENER_PRIORITY_ACCEL,
- .region_add = hvf_region_add,
- .region_del = hvf_region_del,
- .log_start = hvf_log_start,
- .log_stop = hvf_log_stop,
- .log_sync = hvf_log_sync,
-};
-
static void dummy_signal(int sig)
{
}
-bool hvf_allowed;
-
-static int hvf_accel_init(MachineState *ms)
-{
- int x;
- hv_return_t ret;
- HVFState *s;
- int pa_range = 36;
- MachineClass *mc = MACHINE_GET_CLASS(ms);
-
- if (mc->hvf_get_physical_address_range) {
- pa_range = mc->hvf_get_physical_address_range(ms);
- if (pa_range < 0) {
- return -EINVAL;
- }
- }
-
- ret = hvf_arch_vm_create(ms, (uint32_t)pa_range);
- assert_hvf_ok(ret);
-
- s = g_new0(HVFState, 1);
-
- s->num_slots = ARRAY_SIZE(s->slots);
- for (x = 0; x < s->num_slots; ++x) {
- s->slots[x].size = 0;
- s->slots[x].slot_id = x;
- }
-
- QTAILQ_INIT(&s->hvf_sw_breakpoints);
-
- hvf_state = s;
- memory_listener_register(&hvf_memory_listener, &address_space_memory);
-
- return hvf_arch_init();
-}
-
-static inline int hvf_gdbstub_sstep_flags(void)
-{
- return SSTEP_ENABLE | SSTEP_NOIRQ;
-}
-
-static void hvf_accel_class_init(ObjectClass *oc, const void *data)
-{
- AccelClass *ac = ACCEL_CLASS(oc);
- ac->name = "HVF";
- ac->init_machine = hvf_accel_init;
- ac->allowed = &hvf_allowed;
- ac->gdbstub_supported_sstep_flags = hvf_gdbstub_sstep_flags;
-}
-
-static const TypeInfo hvf_accel_type = {
- .name = TYPE_HVF_ACCEL,
- .parent = TYPE_ACCEL,
- .instance_size = sizeof(HVFState),
- .class_init = hvf_accel_class_init,
-};
-
-static void hvf_type_init(void)
-{
- type_register_static(&hvf_accel_type);
-}
-
-type_init(hvf_type_init);
-
static void hvf_vcpu_destroy(CPUState *cpu)
{
hv_return_t ret = hv_vcpu_destroy(cpu->accel->fd);
@@ -639,8 +372,10 @@ static const TypeInfo hvf_accel_ops_type = {
.class_init = hvf_accel_ops_class_init,
.abstract = true,
};
+
static void hvf_accel_ops_register_types(void)
{
type_register_static(&hvf_accel_ops_type);
}
+
type_init(hvf_accel_ops_register_types);
diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c
index 1c72c43ddb4..ddc77e629f5 100644
--- a/accel/hvf/hvf-all.c
+++ b/accel/hvf/hvf-all.c
@@ -10,9 +10,24 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
+#include "system/address-spaces.h"
+#include "system/memory.h"
#include "system/hvf.h"
#include "system/hvf_int.h"
#include "hw/core/cpu.h"
+#include "hw/boards.h"
+#include "trace.h"
+
+bool hvf_allowed;
+
+struct mac_slot {
+ int present;
+ uint64_t size;
+ uint64_t gpa_start;
+ uint64_t gva;
+};
+
+struct mac_slot mac_slots[32];
const char *hvf_return_string(hv_return_t ret)
{
@@ -41,3 +56,255 @@ void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line,
abort();
}
+
+static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags)
+{
+ struct mac_slot *macslot;
+ hv_return_t ret;
+
+ macslot = &mac_slots[slot->slot_id];
+
+ if (macslot->present) {
+ if (macslot->size != slot->size) {
+ macslot->present = 0;
+ trace_hvf_vm_unmap(macslot->gpa_start, macslot->size);
+ ret = hv_vm_unmap(macslot->gpa_start, macslot->size);
+ assert_hvf_ok(ret);
+ }
+ }
+
+ if (!slot->size) {
+ return 0;
+ }
+
+ macslot->present = 1;
+ macslot->gpa_start = slot->start;
+ macslot->size = slot->size;
+ trace_hvf_vm_map(slot->start, slot->size, slot->mem, flags,
+ flags & HV_MEMORY_READ ? 'R' : '-',
+ flags & HV_MEMORY_WRITE ? 'W' : '-',
+ flags & HV_MEMORY_EXEC ? 'E' : '-');
+ ret = hv_vm_map(slot->mem, slot->start, slot->size, flags);
+ assert_hvf_ok(ret);
+ return 0;
+}
+
+static void hvf_set_phys_mem(MemoryRegionSection *section, bool add)
+{
+ hvf_slot *mem;
+ MemoryRegion *area = section->mr;
+ bool writable = !area->readonly && !area->rom_device;
+ hv_memory_flags_t flags;
+ uint64_t page_size = qemu_real_host_page_size();
+
+ if (!memory_region_is_ram(area)) {
+ if (writable) {
+ return;
+ } else if (!memory_region_is_romd(area)) {
+ /*
+ * If the memory device is not in romd_mode, then we actually want
+ * to remove the hvf memory slot so all accesses will trap.
+ */
+ add = false;
+ }
+ }
+
+ if (!QEMU_IS_ALIGNED(int128_get64(section->size), page_size) ||
+ !QEMU_IS_ALIGNED(section->offset_within_address_space, page_size)) {
+ /* Not page aligned, so we can not map as RAM */
+ add = false;
+ }
+
+ mem = hvf_find_overlap_slot(
+ section->offset_within_address_space,
+ int128_get64(section->size));
+
+ if (mem && add) {
+ if (mem->size == int128_get64(section->size) &&
+ mem->start == section->offset_within_address_space &&
+ mem->mem == (memory_region_get_ram_ptr(area) +
+ section->offset_within_region)) {
+ return; /* Same region was attempted to register, go away. */
+ }
+ }
+
+ /* Region needs to be reset. set the size to 0 and remap it. */
+ if (mem) {
+ mem->size = 0;
+ if (do_hvf_set_memory(mem, 0)) {
+ error_report("Failed to reset overlapping slot");
+ abort();
+ }
+ }
+
+ if (!add) {
+ return;
+ }
+
+ if (area->readonly ||
+ (!memory_region_is_ram(area) && memory_region_is_romd(area))) {
+ flags = HV_MEMORY_READ | HV_MEMORY_EXEC;
+ } else {
+ flags = HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC;
+ }
+
+ /* Now make a new slot. */
+ int x;
+
+ for (x = 0; x < hvf_state->num_slots; ++x) {
+ mem = &hvf_state->slots[x];
+ if (!mem->size) {
+ break;
+ }
+ }
+
+ if (x == hvf_state->num_slots) {
+ error_report("No free slots");
+ abort();
+ }
+
+ mem->size = int128_get64(section->size);
+ mem->mem = memory_region_get_ram_ptr(area) + section->offset_within_region;
+ mem->start = section->offset_within_address_space;
+ mem->region = area;
+
+ if (do_hvf_set_memory(mem, flags)) {
+ error_report("Error registering new memory slot");
+ abort();
+ }
+}
+
+static void hvf_set_dirty_tracking(MemoryRegionSection *section, bool on)
+{
+ hvf_slot *slot;
+
+ slot = hvf_find_overlap_slot(
+ section->offset_within_address_space,
+ int128_get64(section->size));
+
+ /* protect region against writes; begin tracking it */
+ if (on) {
+ slot->flags |= HVF_SLOT_LOG;
+ hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
+ HV_MEMORY_READ | HV_MEMORY_EXEC);
+ /* stop tracking region*/
+ } else {
+ slot->flags &= ~HVF_SLOT_LOG;
+ hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
+ HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC);
+ }
+}
+
+static void hvf_log_start(MemoryListener *listener,
+ MemoryRegionSection *section, int old, int new)
+{
+ if (old != 0) {
+ return;
+ }
+
+ hvf_set_dirty_tracking(section, 1);
+}
+
+static void hvf_log_stop(MemoryListener *listener,
+ MemoryRegionSection *section, int old, int new)
+{
+ if (new != 0) {
+ return;
+ }
+
+ hvf_set_dirty_tracking(section, 0);
+}
+
+static void hvf_log_sync(MemoryListener *listener,
+ MemoryRegionSection *section)
+{
+ /*
+ * sync of dirty pages is handled elsewhere; just make sure we keep
+ * tracking the region.
+ */
+ hvf_set_dirty_tracking(section, 1);
+}
+
+static void hvf_region_add(MemoryListener *listener,
+ MemoryRegionSection *section)
+{
+ hvf_set_phys_mem(section, true);
+}
+
+static void hvf_region_del(MemoryListener *listener,
+ MemoryRegionSection *section)
+{
+ hvf_set_phys_mem(section, false);
+}
+
+static MemoryListener hvf_memory_listener = {
+ .name = "hvf",
+ .priority = MEMORY_LISTENER_PRIORITY_ACCEL,
+ .region_add = hvf_region_add,
+ .region_del = hvf_region_del,
+ .log_start = hvf_log_start,
+ .log_stop = hvf_log_stop,
+ .log_sync = hvf_log_sync,
+};
+
+static int hvf_accel_init(MachineState *ms)
+{
+ int x;
+ hv_return_t ret;
+ HVFState *s;
+ int pa_range = 36;
+ MachineClass *mc = MACHINE_GET_CLASS(ms);
+
+ if (mc->hvf_get_physical_address_range) {
+ pa_range = mc->hvf_get_physical_address_range(ms);
+ if (pa_range < 0) {
+ return -EINVAL;
+ }
+ }
+
+ ret = hvf_arch_vm_create(ms, (uint32_t)pa_range);
+ assert_hvf_ok(ret);
+
+ s = g_new0(HVFState, 1);
+
+ s->num_slots = ARRAY_SIZE(s->slots);
+ for (x = 0; x < s->num_slots; ++x) {
+ s->slots[x].size = 0;
+ s->slots[x].slot_id = x;
+ }
+
+ QTAILQ_INIT(&s->hvf_sw_breakpoints);
+
+ hvf_state = s;
+ memory_listener_register(&hvf_memory_listener, &address_space_memory);
+
+ return hvf_arch_init();
+}
+
+static int hvf_gdbstub_sstep_flags(void)
+{
+ return SSTEP_ENABLE | SSTEP_NOIRQ;
+}
+
+static void hvf_accel_class_init(ObjectClass *oc, const void *data)
+{
+ AccelClass *ac = ACCEL_CLASS(oc);
+ ac->name = "HVF";
+ ac->init_machine = hvf_accel_init;
+ ac->allowed = &hvf_allowed;
+ ac->gdbstub_supported_sstep_flags = hvf_gdbstub_sstep_flags;
+}
+
+static const TypeInfo hvf_accel_type = {
+ .name = TYPE_HVF_ACCEL,
+ .parent = TYPE_ACCEL,
+ .instance_size = sizeof(HVFState),
+ .class_init = hvf_accel_class_init,
+};
+
+static void hvf_type_init(void)
+{
+ type_register_static(&hvf_accel_type);
+}
+
+type_init(hvf_type_init);
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 11/31] cpus: Document CPUState::vcpu_dirty field
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2025-07-04 10:14 ` [PULL 10/31] accel/hvf: Move generic method declarations to hvf-all.c Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 12/31] accel/hvf: Replace @dirty field by generic " Philippe Mathieu-Daudé
` (20 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Message-Id: <20250703173248.44995-18-philmd@linaro.org>
---
include/hw/core/cpu.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 162a56a5daa..5eaf41a566f 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -442,6 +442,7 @@ struct qemu_work_item;
* @opaque: User data.
* @mem_io_pc: Host Program Counter at which the memory was accessed.
* @accel: Pointer to accelerator specific state.
+ * @vcpu_dirty: Hardware accelerator is not synchronized with QEMU state
* @kvm_fd: vCPU file descriptor for KVM.
* @work_mutex: Lock to prevent multiple access to @work_list.
* @work_list: List of pending asynchronous work.
@@ -538,7 +539,6 @@ struct CPUState {
uint32_t kvm_fetch_index;
uint64_t dirty_pages;
int kvm_vcpu_stats_fd;
- bool vcpu_dirty;
/* Use by accel-block: CPU is executing an ioctl() */
QemuLockCnt in_ioctl_lock;
@@ -554,6 +554,7 @@ struct CPUState {
uint32_t halted;
int32_t exception_index;
+ bool vcpu_dirty;
AccelCPUState *accel;
/* Used to keep track of an outstanding cpu throttle thread for migration
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 12/31] accel/hvf: Replace @dirty field by generic CPUState::vcpu_dirty field
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (10 preceding siblings ...)
2025-07-04 10:14 ` [PULL 11/31] cpus: Document CPUState::vcpu_dirty field Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 13/31] accel/nvmm: " Philippe Mathieu-Daudé
` (19 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
No need for accel-specific @dirty field when we have
a generic one in CPUState.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-19-philmd@linaro.org>
---
include/system/hvf_int.h | 1 -
accel/hvf/hvf-accel-ops.c | 10 +++++-----
target/arm/hvf/hvf.c | 4 ++--
target/i386/hvf/hvf.c | 4 ++--
target/i386/hvf/x86hvf.c | 2 +-
5 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/include/system/hvf_int.h b/include/system/hvf_int.h
index 4f6db40c34e..5150c7dd9c9 100644
--- a/include/system/hvf_int.h
+++ b/include/system/hvf_int.h
@@ -62,7 +62,6 @@ struct AccelCPUState {
bool vtimer_masked;
sigset_t unblock_ipi_mask;
bool guest_debug_enabled;
- bool dirty;
};
void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line,
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index 2c0715a17f7..395b5a8e1c0 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -79,15 +79,15 @@ hvf_slot *hvf_find_overlap_slot(uint64_t start, uint64_t size)
static void do_hvf_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
{
- if (!cpu->accel->dirty) {
+ if (!cpu->vcpu_dirty) {
hvf_get_registers(cpu);
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
}
static void hvf_cpu_synchronize_state(CPUState *cpu)
{
- if (!cpu->accel->dirty) {
+ if (!cpu->vcpu_dirty) {
run_on_cpu(cpu, do_hvf_cpu_synchronize_state, RUN_ON_CPU_NULL);
}
}
@@ -96,7 +96,7 @@ static void do_hvf_cpu_synchronize_set_dirty(CPUState *cpu,
run_on_cpu_data arg)
{
/* QEMU state is the reference, push it to HVF now and on next entry */
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
static void hvf_cpu_synchronize_post_reset(CPUState *cpu)
@@ -150,8 +150,8 @@ static int hvf_init_vcpu(CPUState *cpu)
#else
r = hv_vcpu_create(&cpu->accel->fd, HV_VCPU_DEFAULT);
#endif
- cpu->accel->dirty = true;
assert_hvf_ok(r);
+ cpu->vcpu_dirty = true;
cpu->accel->guest_debug_enabled = false;
diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index 7b6d291e79c..c9cfcdc08bb 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -813,9 +813,9 @@ int hvf_put_registers(CPUState *cpu)
static void flush_cpu_state(CPUState *cpu)
{
- if (cpu->accel->dirty) {
+ if (cpu->vcpu_dirty) {
hvf_put_registers(cpu);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
}
diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c
index 99e37a33e50..818b50419f4 100644
--- a/target/i386/hvf/hvf.c
+++ b/target/i386/hvf/hvf.c
@@ -733,9 +733,9 @@ int hvf_vcpu_exec(CPUState *cpu)
}
do {
- if (cpu->accel->dirty) {
+ if (cpu->vcpu_dirty) {
hvf_put_registers(cpu);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
if (hvf_inject_interrupts(cpu)) {
diff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c
index 2057314892a..17fce1d3cdd 100644
--- a/target/i386/hvf/x86hvf.c
+++ b/target/i386/hvf/x86hvf.c
@@ -427,7 +427,7 @@ int hvf_process_events(CPUState *cs)
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
- if (!cs->accel->dirty) {
+ if (!cs->vcpu_dirty) {
/* light weight sync for CPU_INTERRUPT_HARD and IF_MASK */
env->eflags = rreg(cs->accel->fd, HV_X86_RFLAGS);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (11 preceding siblings ...)
2025-07-04 10:14 ` [PULL 12/31] accel/hvf: Replace @dirty field by generic " Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2026-01-13 19:32 ` Thomas Huth
2025-07-04 10:14 ` [PULL 14/31] accel/whpx: " Philippe Mathieu-Daudé
` (18 subsequent siblings)
31 siblings, 1 reply; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
No need for accel-specific @dirty field when we have
a generic one in CPUState.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-20-philmd@linaro.org>
---
target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
index f1c6120ccf1..aea61a6fd2a 100644
--- a/target/i386/nvmm/nvmm-all.c
+++ b/target/i386/nvmm/nvmm-all.c
@@ -30,7 +30,6 @@ struct AccelCPUState {
struct nvmm_vcpu vcpu;
uint8_t tpr;
bool stop;
- bool dirty;
/* Window-exiting for INTs/NMIs. */
bool int_window_exit;
@@ -508,7 +507,7 @@ nvmm_io_callback(struct nvmm_io *io)
}
/* Needed, otherwise infinite loop. */
- current_cpu->accel->dirty = false;
+ current_cpu->vcpu_dirty = false;
}
static void
@@ -517,7 +516,7 @@ nvmm_mem_callback(struct nvmm_mem *mem)
cpu_physical_memory_rw(mem->gpa, mem->data, mem->size, mem->write);
/* Needed, otherwise infinite loop. */
- current_cpu->accel->dirty = false;
+ current_cpu->vcpu_dirty = false;
}
static struct nvmm_assist_callbacks nvmm_callbacks = {
@@ -727,9 +726,9 @@ nvmm_vcpu_loop(CPUState *cpu)
* Inner VCPU loop.
*/
do {
- if (cpu->accel->dirty) {
+ if (cpu->vcpu_dirty) {
nvmm_set_registers(cpu);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
if (qcpu->stop) {
@@ -827,32 +826,32 @@ static void
do_nvmm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
{
nvmm_get_registers(cpu);
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
static void
do_nvmm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg)
{
nvmm_set_registers(cpu);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
static void
do_nvmm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg)
{
nvmm_set_registers(cpu);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
static void
do_nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg)
{
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
void nvmm_cpu_synchronize_state(CPUState *cpu)
{
- if (!cpu->accel->dirty) {
+ if (!cpu->vcpu_dirty) {
run_on_cpu(cpu, do_nvmm_cpu_synchronize_state, RUN_ON_CPU_NULL);
}
}
@@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
}
}
- qcpu->dirty = true;
+ qcpu->vcpu_dirty = true;
cpu->accel = qcpu;
return 0;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 14/31] accel/whpx: Replace @dirty field by generic CPUState::vcpu_dirty field
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (12 preceding siblings ...)
2025-07-04 10:14 ` [PULL 13/31] accel/nvmm: " Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 15/31] accel/kvm: Remove kvm_cpu_synchronize_state() stub Philippe Mathieu-Daudé
` (17 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
No need for accel-specific @dirty field when we have
a generic one in CPUState.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-21-philmd@linaro.org>
---
target/i386/whpx/whpx-all.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index cf6d3e4cdd4..5001afad3a7 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -237,7 +237,6 @@ struct AccelCPUState {
uint64_t tpr;
uint64_t apic_base;
bool interruption_pending;
- bool dirty;
/* Must be the last field as it may have a tail */
WHV_RUN_VP_EXIT_CONTEXT exit_ctx;
@@ -836,7 +835,7 @@ static HRESULT CALLBACK whpx_emu_setreg_callback(
* The emulator just successfully wrote the register state. We clear the
* dirty state so we avoid the double write on resume of the VP.
*/
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
return hr;
}
@@ -1391,7 +1390,7 @@ static int whpx_last_vcpu_stopping(CPUState *cpu)
/* Returns the address of the next instruction that is about to be executed. */
static vaddr whpx_vcpu_get_pc(CPUState *cpu, bool exit_context_valid)
{
- if (cpu->accel->dirty) {
+ if (cpu->vcpu_dirty) {
/* The CPU registers have been modified by other parts of QEMU. */
return cpu_env(cpu)->eip;
} else if (exit_context_valid) {
@@ -1704,9 +1703,9 @@ static int whpx_vcpu_run(CPUState *cpu)
}
do {
- if (cpu->accel->dirty) {
+ if (cpu->vcpu_dirty) {
whpx_set_registers(cpu, WHPX_SET_RUNTIME_STATE);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
if (exclusive_step_mode == WHPX_STEP_NONE) {
@@ -2054,9 +2053,9 @@ static int whpx_vcpu_run(CPUState *cpu)
static void do_whpx_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
{
- if (!cpu->accel->dirty) {
+ if (!cpu->vcpu_dirty) {
whpx_get_registers(cpu);
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
}
@@ -2064,20 +2063,20 @@ static void do_whpx_cpu_synchronize_post_reset(CPUState *cpu,
run_on_cpu_data arg)
{
whpx_set_registers(cpu, WHPX_SET_RESET_STATE);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
static void do_whpx_cpu_synchronize_post_init(CPUState *cpu,
run_on_cpu_data arg)
{
whpx_set_registers(cpu, WHPX_SET_FULL_STATE);
- cpu->accel->dirty = false;
+ cpu->vcpu_dirty = false;
}
static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu,
run_on_cpu_data arg)
{
- cpu->accel->dirty = true;
+ cpu->vcpu_dirty = true;
}
/*
@@ -2086,7 +2085,7 @@ static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu,
void whpx_cpu_synchronize_state(CPUState *cpu)
{
- if (!cpu->accel->dirty) {
+ if (!cpu->vcpu_dirty) {
run_on_cpu(cpu, do_whpx_cpu_synchronize_state, RUN_ON_CPU_NULL);
}
}
@@ -2226,7 +2225,7 @@ int whpx_init_vcpu(CPUState *cpu)
}
vcpu->interruptable = true;
- vcpu->dirty = true;
+ cpu->vcpu_dirty = true;
cpu->accel = vcpu;
max_vcpu_index = max(max_vcpu_index, cpu->cpu_index);
qemu_add_vm_change_state_handler(whpx_cpu_update_state, env);
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 15/31] accel/kvm: Remove kvm_cpu_synchronize_state() stub
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (13 preceding siblings ...)
2025-07-04 10:14 ` [PULL 14/31] accel/whpx: " Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 16/31] accel/system: Document cpu_synchronize_state() Philippe Mathieu-Daudé
` (16 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Since commit 57038a92bb0 ("cpus: extract out kvm-specific code
to accel/kvm") the kvm_cpu_synchronize_state() stub is not
necessary.
Fixes: e0715f6abce ("kvm: remove kvm specific functions from global includes")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-22-philmd@linaro.org>
---
accel/stubs/kvm-stub.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index b9b4427c919..68cd33ba973 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -29,10 +29,6 @@ void kvm_flush_coalesced_mmio_buffer(void)
{
}
-void kvm_cpu_synchronize_state(CPUState *cpu)
-{
-}
-
bool kvm_has_sync_mmu(void)
{
return false;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 16/31] accel/system: Document cpu_synchronize_state()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (14 preceding siblings ...)
2025-07-04 10:14 ` [PULL 15/31] accel/kvm: Remove kvm_cpu_synchronize_state() stub Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 17/31] accel/system: Document cpu_synchronize_state_post_init/reset() Philippe Mathieu-Daudé
` (15 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-23-philmd@linaro.org>
---
include/system/accel-ops.h | 8 ++++++++
include/system/hw_accel.h | 13 +++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h
index 4c99d25aeff..55f91cea25d 100644
--- a/include/system/accel-ops.h
+++ b/include/system/accel-ops.h
@@ -42,6 +42,14 @@ struct AccelOpsClass {
void (*synchronize_post_reset)(CPUState *cpu);
void (*synchronize_post_init)(CPUState *cpu);
+ /**
+ * synchronize_state:
+ * synchronize_pre_loadvm:
+ * @cpu: The vCPU to synchronize.
+ *
+ * Request to synchronize QEMU vCPU registers from the hardware accelerator
+ * (the hardware accelerator is the reference).
+ */
void (*synchronize_state)(CPUState *cpu);
void (*synchronize_pre_loadvm)(CPUState *cpu);
void (*synchronize_pre_resume)(bool step_pending);
diff --git a/include/system/hw_accel.h b/include/system/hw_accel.h
index 380e9e640b6..574c9738408 100644
--- a/include/system/hw_accel.h
+++ b/include/system/hw_accel.h
@@ -17,9 +17,18 @@
#include "system/whpx.h"
#include "system/nvmm.h"
+/**
+ * cpu_synchronize_state:
+ * cpu_synchronize_pre_loadvm:
+ * @cpu: The vCPU to synchronize.
+ *
+ * Request to synchronize QEMU vCPU registers from the hardware accelerator
+ * (the hardware accelerator is the reference).
+ */
void cpu_synchronize_state(CPUState *cpu);
-void cpu_synchronize_post_reset(CPUState *cpu);
-void cpu_synchronize_post_init(CPUState *cpu);
void cpu_synchronize_pre_loadvm(CPUState *cpu);
+void cpu_synchronize_post_reset(CPUState *cpu);
+void cpu_synchronize_post_init(CPUState *cpu);
+
#endif /* QEMU_HW_ACCEL_H */
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 17/31] accel/system: Document cpu_synchronize_state_post_init/reset()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (15 preceding siblings ...)
2025-07-04 10:14 ` [PULL 16/31] accel/system: Document cpu_synchronize_state() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 18/31] accel/nvmm: Expose nvmm_enabled() to common code Philippe Mathieu-Daudé
` (14 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-24-philmd@linaro.org>
---
include/system/accel-ops.h | 8 ++++++++
include/system/hw_accel.h | 8 ++++++++
2 files changed, 16 insertions(+)
diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h
index 55f91cea25d..a4e706b49c9 100644
--- a/include/system/accel-ops.h
+++ b/include/system/accel-ops.h
@@ -40,6 +40,14 @@ struct AccelOpsClass {
void (*kick_vcpu_thread)(CPUState *cpu);
bool (*cpu_thread_is_idle)(CPUState *cpu);
+ /**
+ * synchronize_post_reset:
+ * synchronize_post_init:
+ * @cpu: The vCPU to synchronize.
+ *
+ * Request to synchronize QEMU vCPU registers to the hardware accelerator
+ * (QEMU is the reference).
+ */
void (*synchronize_post_reset)(CPUState *cpu);
void (*synchronize_post_init)(CPUState *cpu);
/**
diff --git a/include/system/hw_accel.h b/include/system/hw_accel.h
index 574c9738408..fa9228d5d2d 100644
--- a/include/system/hw_accel.h
+++ b/include/system/hw_accel.h
@@ -28,6 +28,14 @@
void cpu_synchronize_state(CPUState *cpu);
void cpu_synchronize_pre_loadvm(CPUState *cpu);
+/**
+ * cpu_synchronize_post_reset:
+ * cpu_synchronize_post_init:
+ * @cpu: The vCPU to synchronize.
+ *
+ * Request to synchronize QEMU vCPU registers to the hardware accelerator
+ * (QEMU is the reference).
+ */
void cpu_synchronize_post_reset(CPUState *cpu);
void cpu_synchronize_post_init(CPUState *cpu);
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 18/31] accel/nvmm: Expose nvmm_enabled() to common code
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (16 preceding siblings ...)
2025-07-04 10:14 ` [PULL 17/31] accel/system: Document cpu_synchronize_state_post_init/reset() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 19/31] accel/whpx: Expose whpx_enabled() " Philippe Mathieu-Daudé
` (13 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Currently nvmm_enabled() is restricted to target-specific code.
By defining CONFIG_NVMM_IS_POSSIBLE we allow its use anywhere.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20250703173248.44995-25-philmd@linaro.org>
---
MAINTAINERS | 1 +
include/system/nvmm.h | 23 ++++++++++++-----------
accel/stubs/nvmm-stub.c | 12 ++++++++++++
target/i386/nvmm/nvmm-all.c | 8 +-------
accel/stubs/meson.build | 1 +
5 files changed, 27 insertions(+), 18 deletions(-)
create mode 100644 accel/stubs/nvmm-stub.c
diff --git a/MAINTAINERS b/MAINTAINERS
index b1cbfe115bc..c73468b2422 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -586,6 +586,7 @@ NetBSD Virtual Machine Monitor (NVMM) CPU support
M: Reinoud Zandijk <reinoud@netbsd.org>
S: Maintained
F: include/system/nvmm.h
+F: accel/stubs/nvmm-stub.c
F: target/i386/nvmm/
Hosts
diff --git a/include/system/nvmm.h b/include/system/nvmm.h
index 6971ddb3a5a..7390def9adb 100644
--- a/include/system/nvmm.h
+++ b/include/system/nvmm.h
@@ -13,17 +13,18 @@
#define QEMU_NVMM_H
#ifdef COMPILING_PER_TARGET
-
-#ifdef CONFIG_NVMM
-
-int nvmm_enabled(void);
-
-#else /* CONFIG_NVMM */
-
-#define nvmm_enabled() (0)
-
-#endif /* CONFIG_NVMM */
-
+# ifdef CONFIG_NVMM
+# define CONFIG_NVMM_IS_POSSIBLE
+# endif /* !CONFIG_NVMM */
+#else
+# define CONFIG_NVMM_IS_POSSIBLE
#endif /* COMPILING_PER_TARGET */
+#ifdef CONFIG_NVMM_IS_POSSIBLE
+extern bool nvmm_allowed;
+#define nvmm_enabled() (nvmm_allowed)
+#else /* !CONFIG_NVMM_IS_POSSIBLE */
+#define nvmm_enabled() 0
+#endif /* !CONFIG_NVMM_IS_POSSIBLE */
+
#endif /* QEMU_NVMM_H */
diff --git a/accel/stubs/nvmm-stub.c b/accel/stubs/nvmm-stub.c
new file mode 100644
index 00000000000..ec14837501a
--- /dev/null
+++ b/accel/stubs/nvmm-stub.c
@@ -0,0 +1,12 @@
+/*
+ * NVMM stubs for QEMU
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "system/nvmm.h"
+
+bool nvmm_allowed;
diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
index aea61a6fd2a..2df49d7eeb4 100644
--- a/target/i386/nvmm/nvmm-all.c
+++ b/target/i386/nvmm/nvmm-all.c
@@ -46,7 +46,7 @@ struct qemu_machine {
/* -------------------------------------------------------------------------- */
-static bool nvmm_allowed;
+bool nvmm_allowed;
static struct qemu_machine qemu_mach;
static struct nvmm_machine *
@@ -1192,12 +1192,6 @@ nvmm_accel_init(MachineState *ms)
return 0;
}
-int
-nvmm_enabled(void)
-{
- return nvmm_allowed;
-}
-
static void
nvmm_accel_class_init(ObjectClass *oc, const void *data)
{
diff --git a/accel/stubs/meson.build b/accel/stubs/meson.build
index 8ca1a4529e2..4c34287215f 100644
--- a/accel/stubs/meson.build
+++ b/accel/stubs/meson.build
@@ -3,5 +3,6 @@ system_stubs_ss.add(when: 'CONFIG_XEN', if_false: files('xen-stub.c'))
system_stubs_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c'))
system_stubs_ss.add(when: 'CONFIG_TCG', if_false: files('tcg-stub.c'))
system_stubs_ss.add(when: 'CONFIG_HVF', if_false: files('hvf-stub.c'))
+system_stubs_ss.add(when: 'CONFIG_NVMM', if_false: files('nvmm-stub.c'))
specific_ss.add_all(when: ['CONFIG_SYSTEM_ONLY'], if_true: system_stubs_ss)
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 19/31] accel/whpx: Expose whpx_enabled() to common code
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (17 preceding siblings ...)
2025-07-04 10:14 ` [PULL 18/31] accel/nvmm: Expose nvmm_enabled() to common code Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 20/31] accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h' Philippe Mathieu-Daudé
` (12 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Currently whpx_enabled() is restricted to target-specific code.
By defining CONFIG_WHPX_IS_POSSIBLE we allow its use anywhere.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-26-philmd@linaro.org>
---
MAINTAINERS | 1 +
include/system/whpx.h | 27 ++++++++++++++-------------
accel/stubs/whpx-stub.c | 12 ++++++++++++
target/i386/whpx/whpx-all.c | 7 +------
accel/stubs/meson.build | 1 +
5 files changed, 29 insertions(+), 19 deletions(-)
create mode 100644 accel/stubs/whpx-stub.c
diff --git a/MAINTAINERS b/MAINTAINERS
index c73468b2422..0fd8b2a4e61 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -540,6 +540,7 @@ WHPX CPUs
M: Sunil Muthuswamy <sunilmut@microsoft.com>
S: Supported
F: target/i386/whpx/
+F: accel/stubs/whpx-stub.c
F: include/system/whpx.h
X86 Instruction Emulator
diff --git a/include/system/whpx.h b/include/system/whpx.h
index 00ff409b682..00f6a3e5236 100644
--- a/include/system/whpx.h
+++ b/include/system/whpx.h
@@ -16,19 +16,20 @@
#define QEMU_WHPX_H
#ifdef COMPILING_PER_TARGET
-
-#ifdef CONFIG_WHPX
-
-int whpx_enabled(void);
-bool whpx_apic_in_platform(void);
-
-#else /* CONFIG_WHPX */
-
-#define whpx_enabled() (0)
-#define whpx_apic_in_platform() (0)
-
-#endif /* CONFIG_WHPX */
-
+# ifdef CONFIG_WHPX
+# define CONFIG_WHPX_IS_POSSIBLE
+# endif /* !CONFIG_WHPX */
+#else
+# define CONFIG_WHPX_IS_POSSIBLE
#endif /* COMPILING_PER_TARGET */
+#ifdef CONFIG_WHPX_IS_POSSIBLE
+extern bool whpx_allowed;
+#define whpx_enabled() (whpx_allowed)
+bool whpx_apic_in_platform(void);
+#else /* !CONFIG_WHPX_IS_POSSIBLE */
+#define whpx_enabled() 0
+#define whpx_apic_in_platform() (0)
+#endif /* !CONFIG_WHPX_IS_POSSIBLE */
+
#endif /* QEMU_WHPX_H */
diff --git a/accel/stubs/whpx-stub.c b/accel/stubs/whpx-stub.c
new file mode 100644
index 00000000000..c564c89fd0b
--- /dev/null
+++ b/accel/stubs/whpx-stub.c
@@ -0,0 +1,12 @@
+/*
+ * WHPX stubs for QEMU
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "system/whpx.h"
+
+bool whpx_allowed;
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index 5001afad3a7..94fd5fc7849 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -242,7 +242,7 @@ struct AccelCPUState {
WHV_RUN_VP_EXIT_CONTEXT exit_ctx;
};
-static bool whpx_allowed;
+bool whpx_allowed;
static bool whp_dispatch_initialized;
static HMODULE hWinHvPlatform, hWinHvEmulation;
static uint32_t max_vcpu_index;
@@ -2688,11 +2688,6 @@ error:
return ret;
}
-int whpx_enabled(void)
-{
- return whpx_allowed;
-}
-
bool whpx_apic_in_platform(void) {
return whpx_global.apic_in_platform;
}
diff --git a/accel/stubs/meson.build b/accel/stubs/meson.build
index 4c34287215f..9dfc4f9ddaf 100644
--- a/accel/stubs/meson.build
+++ b/accel/stubs/meson.build
@@ -4,5 +4,6 @@ system_stubs_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c'))
system_stubs_ss.add(when: 'CONFIG_TCG', if_false: files('tcg-stub.c'))
system_stubs_ss.add(when: 'CONFIG_HVF', if_false: files('hvf-stub.c'))
system_stubs_ss.add(when: 'CONFIG_NVMM', if_false: files('nvmm-stub.c'))
+system_stubs_ss.add(when: 'CONFIG_WHPX', if_false: files('whpx-stub.c'))
specific_ss.add_all(when: ['CONFIG_SYSTEM_ONLY'], if_true: system_stubs_ss)
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 20/31] accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h'
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (18 preceding siblings ...)
2025-07-04 10:14 ` [PULL 19/31] accel/whpx: Expose whpx_enabled() " Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 21/31] accel: Expose and register generic_handle_interrupt() Philippe Mathieu-Daudé
` (11 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
'dummy' helpers are specific to accelerator implementations,
no need to expose them via "system/cpus.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Message-Id: <20250703173248.44995-27-philmd@linaro.org>
---
MAINTAINERS | 1 +
accel/dummy-cpus.h | 14 ++++++++++++++
include/system/cpus.h | 5 -----
accel/dummy-cpus.c | 1 +
accel/qtest/qtest.c | 1 +
accel/xen/xen-all.c | 1 +
6 files changed, 18 insertions(+), 5 deletions(-)
create mode 100644 accel/dummy-cpus.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 0fd8b2a4e61..fca98e12195 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -503,6 +503,7 @@ F: include/system/accel-*.h
F: include/system/cpus.h
F: include/accel/accel-cpu*.h
F: accel/accel-*.?
+F: accel/dummy-cpus.?
F: accel/Makefile.objs
F: accel/stubs/Makefile.objs
F: cpu-common.c
diff --git a/accel/dummy-cpus.h b/accel/dummy-cpus.h
new file mode 100644
index 00000000000..d18dd0fdc51
--- /dev/null
+++ b/accel/dummy-cpus.h
@@ -0,0 +1,14 @@
+/*
+ * Dummy cpu thread code
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef ACCEL_DUMMY_CPUS_H
+#define ACCEL_DUMMY_CPUS_H
+
+void dummy_start_vcpu_thread(CPUState *cpu);
+
+#endif
diff --git a/include/system/cpus.h b/include/system/cpus.h
index 3226c765d01..69be6a77a75 100644
--- a/include/system/cpus.h
+++ b/include/system/cpus.h
@@ -7,11 +7,6 @@ void cpus_register_accel(const AccelOpsClass *i);
/* return registers ops */
const AccelOpsClass *cpus_get_accel(void);
-/* accel/dummy-cpus.c */
-
-/* Create a dummy vcpu for AccelOpsClass->create_vcpu_thread */
-void dummy_start_vcpu_thread(CPUState *);
-
/* interface available for cpus accelerator threads */
/* For temporary buffers for forming a name */
diff --git a/accel/dummy-cpus.c b/accel/dummy-cpus.c
index 867276144fa..03cfc0fa01e 100644
--- a/accel/dummy-cpus.c
+++ b/accel/dummy-cpus.c
@@ -17,6 +17,7 @@
#include "qemu/guest-random.h"
#include "qemu/main-loop.h"
#include "hw/core/cpu.h"
+#include "accel/dummy-cpus.h"
static void *dummy_cpu_thread_fn(void *arg)
{
diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c
index 92bed9264ce..612cede160b 100644
--- a/accel/qtest/qtest.c
+++ b/accel/qtest/qtest.c
@@ -24,6 +24,7 @@
#include "qemu/guest-random.h"
#include "qemu/main-loop.h"
#include "hw/core/cpu.h"
+#include "accel/dummy-cpus.h"
static int64_t qtest_clock_counter;
diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index de52a8f882a..c150dd43cab 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -18,6 +18,7 @@
#include "hw/xen/xen_igd.h"
#include "chardev/char.h"
#include "qemu/accel.h"
+#include "accel/dummy-cpus.h"
#include "system/accel-ops.h"
#include "system/cpus.h"
#include "system/xen.h"
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 21/31] accel: Expose and register generic_handle_interrupt()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (19 preceding siblings ...)
2025-07-04 10:14 ` [PULL 20/31] accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h' Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 22/31] accel: Keep reference to AccelOpsClass in AccelClass Philippe Mathieu-Daudé
` (10 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
In order to dispatch over AccelOpsClass::handle_interrupt(),
we need it always defined, not calling a hidden handler under
the hood. Make AccelOpsClass::handle_interrupt() mandatory.
Expose generic_handle_interrupt() prototype and register it
for each accelerator.
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Message-Id: <20250703173248.44995-29-philmd@linaro.org>
---
include/system/accel-ops.h | 3 +++
accel/hvf/hvf-accel-ops.c | 1 +
accel/kvm/kvm-accel-ops.c | 1 +
accel/qtest/qtest.c | 1 +
accel/xen/xen-all.c | 1 +
system/cpus.c | 10 ++++------
target/i386/nvmm/nvmm-accel-ops.c | 1 +
target/i386/whpx/whpx-accel-ops.c | 1 +
8 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h
index a4e706b49c9..e775ecc348c 100644
--- a/include/system/accel-ops.h
+++ b/include/system/accel-ops.h
@@ -62,6 +62,7 @@ struct AccelOpsClass {
void (*synchronize_pre_loadvm)(CPUState *cpu);
void (*synchronize_pre_resume)(bool step_pending);
+ /* handle_interrupt is mandatory. */
void (*handle_interrupt)(CPUState *cpu, int mask);
/**
@@ -86,4 +87,6 @@ struct AccelOpsClass {
void (*remove_all_breakpoints)(CPUState *cpu);
};
+void generic_handle_interrupt(CPUState *cpu, int mask);
+
#endif /* ACCEL_OPS_H */
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index 395b5a8e1c0..be8724ac896 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -353,6 +353,7 @@ static void hvf_accel_ops_class_init(ObjectClass *oc, const void *data)
ops->create_vcpu_thread = hvf_start_vcpu_thread;
ops->kick_vcpu_thread = hvf_kick_vcpu_thread;
+ ops->handle_interrupt = generic_handle_interrupt;
ops->synchronize_post_reset = hvf_cpu_synchronize_post_reset;
ops->synchronize_post_init = hvf_cpu_synchronize_post_init;
diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
index e5c15449aa6..0eafc902c3f 100644
--- a/accel/kvm/kvm-accel-ops.c
+++ b/accel/kvm/kvm-accel-ops.c
@@ -101,6 +101,7 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, const void *data)
ops->synchronize_post_init = kvm_cpu_synchronize_post_init;
ops->synchronize_state = kvm_cpu_synchronize_state;
ops->synchronize_pre_loadvm = kvm_cpu_synchronize_pre_loadvm;
+ ops->handle_interrupt = generic_handle_interrupt;
#ifdef TARGET_KVM_HAVE_GUEST_DEBUG
ops->update_guest_debug = kvm_update_guest_debug_ops;
diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c
index 612cede160b..5474ce73135 100644
--- a/accel/qtest/qtest.c
+++ b/accel/qtest/qtest.c
@@ -67,6 +67,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, const void *data)
ops->create_vcpu_thread = dummy_start_vcpu_thread;
ops->get_virtual_clock = qtest_get_virtual_clock;
ops->set_virtual_clock = qtest_set_virtual_clock;
+ ops->handle_interrupt = generic_handle_interrupt;
};
static const TypeInfo qtest_accel_ops_type = {
diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index c150dd43cab..c12c22de785 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -153,6 +153,7 @@ static void xen_accel_ops_class_init(ObjectClass *oc, const void *data)
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
ops->create_vcpu_thread = dummy_start_vcpu_thread;
+ ops->handle_interrupt = generic_handle_interrupt;
}
static const TypeInfo xen_accel_ops_type = {
diff --git a/system/cpus.c b/system/cpus.c
index a43e0e4e796..0d0eec82a2f 100644
--- a/system/cpus.c
+++ b/system/cpus.c
@@ -254,7 +254,7 @@ int64_t cpus_get_elapsed_ticks(void)
return cpu_get_ticks();
}
-static void generic_handle_interrupt(CPUState *cpu, int mask)
+void generic_handle_interrupt(CPUState *cpu, int mask)
{
cpu->interrupt_request |= mask;
@@ -267,11 +267,7 @@ void cpu_interrupt(CPUState *cpu, int mask)
{
g_assert(bql_locked());
- if (cpus_accel->handle_interrupt) {
- cpus_accel->handle_interrupt(cpu, mask);
- } else {
- generic_handle_interrupt(cpu, mask);
- }
+ cpus_accel->handle_interrupt(cpu, mask);
}
/*
@@ -680,6 +676,8 @@ void cpus_register_accel(const AccelOpsClass *ops)
{
assert(ops != NULL);
assert(ops->create_vcpu_thread != NULL); /* mandatory */
+ assert(ops->handle_interrupt);
+
cpus_accel = ops;
}
diff --git a/target/i386/nvmm/nvmm-accel-ops.c b/target/i386/nvmm/nvmm-accel-ops.c
index 21443078b72..a5517b0abf3 100644
--- a/target/i386/nvmm/nvmm-accel-ops.c
+++ b/target/i386/nvmm/nvmm-accel-ops.c
@@ -87,6 +87,7 @@ static void nvmm_accel_ops_class_init(ObjectClass *oc, const void *data)
ops->create_vcpu_thread = nvmm_start_vcpu_thread;
ops->kick_vcpu_thread = nvmm_kick_vcpu_thread;
+ ops->handle_interrupt = generic_handle_interrupt;
ops->synchronize_post_reset = nvmm_cpu_synchronize_post_reset;
ops->synchronize_post_init = nvmm_cpu_synchronize_post_init;
diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/whpx-accel-ops.c
index b8bebe403c9..31cf15f0045 100644
--- a/target/i386/whpx/whpx-accel-ops.c
+++ b/target/i386/whpx/whpx-accel-ops.c
@@ -90,6 +90,7 @@ static void whpx_accel_ops_class_init(ObjectClass *oc, const void *data)
ops->create_vcpu_thread = whpx_start_vcpu_thread;
ops->kick_vcpu_thread = whpx_kick_vcpu_thread;
ops->cpu_thread_is_idle = whpx_vcpu_thread_is_idle;
+ ops->handle_interrupt = generic_handle_interrupt;
ops->synchronize_post_reset = whpx_cpu_synchronize_post_reset;
ops->synchronize_post_init = whpx_cpu_synchronize_post_init;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 22/31] accel: Keep reference to AccelOpsClass in AccelClass
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (20 preceding siblings ...)
2025-07-04 10:14 ` [PULL 21/31] accel: Expose and register generic_handle_interrupt() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 23/31] accel: Propagate AccelState to AccelClass::init_machine() Philippe Mathieu-Daudé
` (9 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Allow dereferencing AccelOpsClass outside of accel/accel-system.c.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250703173248.44995-30-philmd@linaro.org>
---
include/qemu/accel.h | 3 +++
include/system/accel-ops.h | 3 ++-
accel/accel-system.c | 3 ++-
accel/tcg/tcg-accel-ops.c | 4 +++-
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index fbd3d897fef..9dea3145429 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -37,6 +37,9 @@ typedef struct AccelClass {
/*< public >*/
const char *name;
+ /* Cached by accel_init_ops_interfaces() when created */
+ AccelOpsClass *ops;
+
int (*init_machine)(MachineState *ms);
bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
void (*cpu_common_unrealize)(CPUState *cpu);
diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h
index e775ecc348c..a786c7d478a 100644
--- a/include/system/accel-ops.h
+++ b/include/system/accel-ops.h
@@ -10,6 +10,7 @@
#ifndef ACCEL_OPS_H
#define ACCEL_OPS_H
+#include "qemu/accel.h"
#include "exec/vaddr.h"
#include "qom/object.h"
@@ -31,7 +32,7 @@ struct AccelOpsClass {
/*< public >*/
/* initialization function called when accel is chosen */
- void (*ops_init)(AccelOpsClass *ops);
+ void (*ops_init)(AccelClass *ac);
bool (*cpus_are_resettable)(void);
void (*cpu_reset_hold)(CPUState *cpu);
diff --git a/accel/accel-system.c b/accel/accel-system.c
index a0f562ae9ff..64bc991b1ce 100644
--- a/accel/accel-system.c
+++ b/accel/accel-system.c
@@ -85,8 +85,9 @@ void accel_init_ops_interfaces(AccelClass *ac)
* non-NULL create_vcpu_thread operation.
*/
ops = ACCEL_OPS_CLASS(oc);
+ ac->ops = ops;
if (ops->ops_init) {
- ops->ops_init(ops);
+ ops->ops_init(ac);
}
cpus_register_accel(ops);
}
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
index 6116644d1c0..37b4b21f882 100644
--- a/accel/tcg/tcg-accel-ops.c
+++ b/accel/tcg/tcg-accel-ops.c
@@ -196,8 +196,10 @@ static inline void tcg_remove_all_breakpoints(CPUState *cpu)
cpu_watchpoint_remove_all(cpu, BP_GDB);
}
-static void tcg_accel_ops_init(AccelOpsClass *ops)
+static void tcg_accel_ops_init(AccelClass *ac)
{
+ AccelOpsClass *ops = ac->ops;
+
if (qemu_tcg_mttcg_enabled()) {
ops->create_vcpu_thread = mttcg_start_vcpu_thread;
ops->kick_vcpu_thread = mttcg_kick_vcpu_thread;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 23/31] accel: Propagate AccelState to AccelClass::init_machine()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (21 preceding siblings ...)
2025-07-04 10:14 ` [PULL 22/31] accel: Keep reference to AccelOpsClass in AccelClass Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 24/31] accel/tcg: Prefer local AccelState over global current_accel() Philippe Mathieu-Daudé
` (8 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
In order to avoid init_machine() to call current_accel(),
pass AccelState along.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250703173248.44995-31-philmd@linaro.org>
---
include/qemu/accel.h | 2 +-
accel/accel-system.c | 2 +-
accel/hvf/hvf-all.c | 2 +-
accel/kvm/kvm-all.c | 2 +-
accel/qtest/qtest.c | 2 +-
accel/tcg/tcg-all.c | 2 +-
accel/xen/xen-all.c | 2 +-
bsd-user/main.c | 2 +-
linux-user/main.c | 2 +-
target/i386/nvmm/nvmm-all.c | 2 +-
target/i386/whpx/whpx-all.c | 2 +-
11 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index 9dea3145429..b9a9b3593d8 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -40,7 +40,7 @@ typedef struct AccelClass {
/* Cached by accel_init_ops_interfaces() when created */
AccelOpsClass *ops;
- int (*init_machine)(MachineState *ms);
+ int (*init_machine)(AccelState *as, MachineState *ms);
bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
void (*cpu_common_unrealize)(CPUState *cpu);
diff --git a/accel/accel-system.c b/accel/accel-system.c
index 64bc991b1ce..913b7155d77 100644
--- a/accel/accel-system.c
+++ b/accel/accel-system.c
@@ -37,7 +37,7 @@ int accel_init_machine(AccelState *accel, MachineState *ms)
int ret;
ms->accelerator = accel;
*(acc->allowed) = true;
- ret = acc->init_machine(ms);
+ ret = acc->init_machine(accel, ms);
if (ret < 0) {
ms->accelerator = NULL;
*(acc->allowed) = false;
diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c
index ddc77e629f5..68f1425fae2 100644
--- a/accel/hvf/hvf-all.c
+++ b/accel/hvf/hvf-all.c
@@ -247,7 +247,7 @@ static MemoryListener hvf_memory_listener = {
.log_sync = hvf_log_sync,
};
-static int hvf_accel_init(MachineState *ms)
+static int hvf_accel_init(AccelState *as, MachineState *ms)
{
int x;
hv_return_t ret;
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 17235f26464..264f288dc64 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2573,7 +2573,7 @@ static int kvm_setup_dirty_ring(KVMState *s)
return 0;
}
-static int kvm_init(MachineState *ms)
+static int kvm_init(AccelState *as, MachineState *ms)
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
static const char upgrade_note[] =
diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c
index 5474ce73135..2b831260201 100644
--- a/accel/qtest/qtest.c
+++ b/accel/qtest/qtest.c
@@ -38,7 +38,7 @@ static void qtest_set_virtual_clock(int64_t count)
qatomic_set_i64(&qtest_clock_counter, count);
}
-static int qtest_init_accel(MachineState *ms)
+static int qtest_init_accel(AccelState *as, MachineState *ms)
{
return 0;
}
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index 6e5dc333d59..d68fbb23773 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -80,7 +80,7 @@ static void tcg_accel_instance_init(Object *obj)
bool one_insn_per_tb;
-static int tcg_init_machine(MachineState *ms)
+static int tcg_init_machine(AccelState *as, MachineState *ms)
{
TCGState *s = TCG_STATE(current_accel());
unsigned max_threads = 1;
diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index c12c22de785..8279746f115 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -77,7 +77,7 @@ static void xen_setup_post(MachineState *ms, AccelState *accel)
}
}
-static int xen_init(MachineState *ms)
+static int xen_init(AccelState *as, MachineState *ms)
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
diff --git a/bsd-user/main.c b/bsd-user/main.c
index 7c0a059c3ba..d0cc8e0088f 100644
--- a/bsd-user/main.c
+++ b/bsd-user/main.c
@@ -474,7 +474,7 @@ int main(int argc, char **argv)
opt_one_insn_per_tb, &error_abort);
object_property_set_int(OBJECT(accel), "tb-size",
opt_tb_size, &error_abort);
- ac->init_machine(NULL);
+ ac->init_machine(accel, NULL);
}
/*
diff --git a/linux-user/main.c b/linux-user/main.c
index 5ac5b55dc65..a9142ee7268 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -820,7 +820,7 @@ int main(int argc, char **argv, char **envp)
opt_one_insn_per_tb, &error_abort);
object_property_set_int(OBJECT(accel), "tb-size",
opt_tb_size, &error_abort);
- ac->init_machine(NULL);
+ ac->init_machine(accel, NULL);
}
/*
diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
index 2df49d7eeb4..b4a4d50e860 100644
--- a/target/i386/nvmm/nvmm-all.c
+++ b/target/i386/nvmm/nvmm-all.c
@@ -1152,7 +1152,7 @@ static struct RAMBlockNotifier nvmm_ram_notifier = {
/* -------------------------------------------------------------------------- */
static int
-nvmm_accel_init(MachineState *ms)
+nvmm_accel_init(AccelState *as, MachineState *ms)
{
int ret, err;
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index 94fd5fc7849..721c4782b9c 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -2504,7 +2504,7 @@ static void whpx_set_kernel_irqchip(Object *obj, Visitor *v,
* Partition support
*/
-static int whpx_accel_init(MachineState *ms)
+static int whpx_accel_init(AccelState *as, MachineState *ms)
{
struct whpx_state *whpx;
int ret;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 24/31] accel/tcg: Prefer local AccelState over global current_accel()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (22 preceding siblings ...)
2025-07-04 10:14 ` [PULL 23/31] accel: Propagate AccelState to AccelClass::init_machine() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 25/31] accel/kvm: Prefer local AccelState over global MachineState::accel Philippe Mathieu-Daudé
` (7 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-33-philmd@linaro.org>
---
accel/tcg/tcg-all.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index d68fbb23773..c674d5bcf78 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -82,7 +82,7 @@ bool one_insn_per_tb;
static int tcg_init_machine(AccelState *as, MachineState *ms)
{
- TCGState *s = TCG_STATE(current_accel());
+ TCGState *s = TCG_STATE(as);
unsigned max_threads = 1;
#ifndef CONFIG_USER_ONLY
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 25/31] accel/kvm: Prefer local AccelState over global MachineState::accel
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (23 preceding siblings ...)
2025-07-04 10:14 ` [PULL 24/31] accel/tcg: Prefer local AccelState over global current_accel() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 26/31] accel/kvm: Directly pass KVMState argument to do_kvm_create_vm() Philippe Mathieu-Daudé
` (6 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-32-philmd@linaro.org>
---
accel/kvm/kvm-all.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 264f288dc64..72fba12d9fa 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2588,15 +2588,13 @@ static int kvm_init(AccelState *as, MachineState *ms)
{ /* end of list */ }
}, *nc = num_cpus;
int soft_vcpus_limit, hard_vcpus_limit;
- KVMState *s;
+ KVMState *s = KVM_STATE(as);
const KVMCapabilityInfo *missing_cap;
int ret;
int type;
qemu_mutex_init(&kml_slots_lock);
- s = KVM_STATE(ms->accelerator);
-
/*
* On systems where the kernel can support different base page
* sizes, host page size may be different from TARGET_PAGE_SIZE,
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 26/31] accel/kvm: Directly pass KVMState argument to do_kvm_create_vm()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (24 preceding siblings ...)
2025-07-04 10:14 ` [PULL 25/31] accel/kvm: Prefer local AccelState over global MachineState::accel Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 27/31] accel: Directly pass AccelState argument to AccelClass::has_memory() Philippe Mathieu-Daudé
` (5 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-35-philmd@linaro.org>
---
accel/kvm/kvm-all.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 72fba12d9fa..007f82a50de 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2470,13 +2470,10 @@ uint32_t kvm_dirty_ring_size(void)
return kvm_state->kvm_dirty_ring_size;
}
-static int do_kvm_create_vm(MachineState *ms, int type)
+static int do_kvm_create_vm(KVMState *s, int type)
{
- KVMState *s;
int ret;
- s = KVM_STATE(ms->accelerator);
-
do {
ret = kvm_ioctl(s, KVM_CREATE_VM, type);
} while (ret == -EINTR);
@@ -2646,7 +2643,7 @@ static int kvm_init(AccelState *as, MachineState *ms)
goto err;
}
- ret = do_kvm_create_vm(ms, type);
+ ret = do_kvm_create_vm(s, type);
if (ret < 0) {
goto err;
}
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 27/31] accel: Directly pass AccelState argument to AccelClass::has_memory()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (25 preceding siblings ...)
2025-07-04 10:14 ` [PULL 26/31] accel/kvm: Directly pass KVMState argument to do_kvm_create_vm() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 28/31] accel: Remove unused MachineState argument of AccelClass::setup_post() Philippe Mathieu-Daudé
` (4 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20250703173248.44995-34-philmd@linaro.org>
---
include/qemu/accel.h | 2 +-
accel/kvm/kvm-all.c | 4 ++--
system/memory.c | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index b9a9b3593d8..f327a71282c 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -46,7 +46,7 @@ typedef struct AccelClass {
/* system related hooks */
void (*setup_post)(MachineState *ms, AccelState *accel);
- bool (*has_memory)(MachineState *ms, AddressSpace *as,
+ bool (*has_memory)(AccelState *accel, AddressSpace *as,
hwaddr start_addr, hwaddr size);
/* gdbstub related hooks */
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 007f82a50de..6f6f9ef69ba 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -3786,10 +3786,10 @@ int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target)
return r;
}
-static bool kvm_accel_has_memory(MachineState *ms, AddressSpace *as,
+static bool kvm_accel_has_memory(AccelState *accel, AddressSpace *as,
hwaddr start_addr, hwaddr size)
{
- KVMState *kvm = KVM_STATE(ms->accelerator);
+ KVMState *kvm = KVM_STATE(accel);
int i;
for (i = 0; i < kvm->nr_as; ++i) {
diff --git a/system/memory.c b/system/memory.c
index 76b44b8220f..e8d9b15b28f 100644
--- a/system/memory.c
+++ b/system/memory.c
@@ -3501,7 +3501,7 @@ static void mtree_print_flatview(gpointer key, gpointer value,
if (fvi->ac) {
for (i = 0; i < fv_address_spaces->len; ++i) {
as = g_array_index(fv_address_spaces, AddressSpace*, i);
- if (fvi->ac->has_memory(current_machine, as,
+ if (fvi->ac->has_memory(current_machine->accelerator, as,
int128_get64(range->addr.start),
MR_SIZE(range->addr.size) + 1)) {
qemu_printf(" %s", fvi->ac->name);
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 28/31] accel: Remove unused MachineState argument of AccelClass::setup_post()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (26 preceding siblings ...)
2025-07-04 10:14 ` [PULL 27/31] accel: Directly pass AccelState argument to AccelClass::has_memory() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 29/31] accel: Pass AccelState argument to gdbstub_supported_sstep_flags() Philippe Mathieu-Daudé
` (3 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
This method only accesses xen_domid/xen_domid_restrict, which are both
related to the 'accelerator', not the machine. Besides, xen_domid aims
to be in Xen AccelState and xen_domid_restrict a xen_domid_restrict
QOM property.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-36-philmd@linaro.org>
---
include/qemu/accel.h | 2 +-
accel/accel-system.c | 2 +-
accel/xen/xen-all.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index f327a71282c..a6a95ff0bcd 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -45,7 +45,7 @@ typedef struct AccelClass {
void (*cpu_common_unrealize)(CPUState *cpu);
/* system related hooks */
- void (*setup_post)(MachineState *ms, AccelState *accel);
+ void (*setup_post)(AccelState *as);
bool (*has_memory)(AccelState *accel, AddressSpace *as,
hwaddr start_addr, hwaddr size);
diff --git a/accel/accel-system.c b/accel/accel-system.c
index 913b7155d77..af713cc9024 100644
--- a/accel/accel-system.c
+++ b/accel/accel-system.c
@@ -58,7 +58,7 @@ void accel_setup_post(MachineState *ms)
AccelState *accel = ms->accelerator;
AccelClass *acc = ACCEL_GET_CLASS(accel);
if (acc->setup_post) {
- acc->setup_post(ms, accel);
+ acc->setup_post(accel);
}
}
diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index 8279746f115..bd0ff64befc 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -64,7 +64,7 @@ static void xen_set_igd_gfx_passthru(Object *obj, bool value, Error **errp)
xen_igd_gfx_pt_set(value, errp);
}
-static void xen_setup_post(MachineState *ms, AccelState *accel)
+static void xen_setup_post(AccelState *as)
{
int rc;
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 29/31] accel: Pass AccelState argument to gdbstub_supported_sstep_flags()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (27 preceding siblings ...)
2025-07-04 10:14 ` [PULL 28/31] accel: Remove unused MachineState argument of AccelClass::setup_post() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 30/31] MAINTAINERS: Add me as reviewer of overall accelerators section Philippe Mathieu-Daudé
` (2 subsequent siblings)
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
In order to have AccelClass methods instrospect their state,
we need to pass AccelState by argument.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-37-philmd@linaro.org>
---
include/qemu/accel.h | 2 +-
accel/accel-common.c | 2 +-
accel/hvf/hvf-all.c | 2 +-
accel/kvm/kvm-all.c | 2 +-
accel/tcg/tcg-all.c | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index a6a95ff0bcd..1c097ac4dfb 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -50,7 +50,7 @@ typedef struct AccelClass {
hwaddr start_addr, hwaddr size);
/* gdbstub related hooks */
- int (*gdbstub_supported_sstep_flags)(void);
+ int (*gdbstub_supported_sstep_flags)(AccelState *as);
bool *allowed;
/*
diff --git a/accel/accel-common.c b/accel/accel-common.c
index 4894b98d64a..591ff4cbb65 100644
--- a/accel/accel-common.c
+++ b/accel/accel-common.c
@@ -124,7 +124,7 @@ int accel_supported_gdbstub_sstep_flags(void)
AccelState *accel = current_accel();
AccelClass *acc = ACCEL_GET_CLASS(accel);
if (acc->gdbstub_supported_sstep_flags) {
- return acc->gdbstub_supported_sstep_flags();
+ return acc->gdbstub_supported_sstep_flags(accel);
}
return 0;
}
diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c
index 68f1425fae2..b6075c036e2 100644
--- a/accel/hvf/hvf-all.c
+++ b/accel/hvf/hvf-all.c
@@ -281,7 +281,7 @@ static int hvf_accel_init(AccelState *as, MachineState *ms)
return hvf_arch_init();
}
-static int hvf_gdbstub_sstep_flags(void)
+static int hvf_gdbstub_sstep_flags(AccelState *as)
{
return SSTEP_ENABLE | SSTEP_NOIRQ;
}
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 6f6f9ef69ba..45579f80fa5 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -3980,7 +3980,7 @@ static void kvm_accel_instance_init(Object *obj)
* Returns: SSTEP_* flags that KVM supports for guest debug. The
* support is probed during kvm_init()
*/
-static int kvm_gdbstub_sstep_flags(void)
+static int kvm_gdbstub_sstep_flags(AccelState *as)
{
return kvm_sstep_flags;
}
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index c674d5bcf78..5904582a68d 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -219,7 +219,7 @@ static void tcg_set_one_insn_per_tb(Object *obj, bool value, Error **errp)
qatomic_set(&one_insn_per_tb, value);
}
-static int tcg_gdbstub_supported_sstep_flags(void)
+static int tcg_gdbstub_supported_sstep_flags(AccelState *as)
{
/*
* In replay mode all events will come from the log and can't be
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 30/31] MAINTAINERS: Add me as reviewer of overall accelerators section
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (28 preceding siblings ...)
2025-07-04 10:14 ` [PULL 29/31] accel: Pass AccelState argument to gdbstub_supported_sstep_flags() Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 31/31] hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers() Philippe Mathieu-Daudé
2025-07-04 17:49 ` [PULL 00/31] Accelerators patches for 2025-07-04 Stefan Hajnoczi
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
I'd like to be informed of overall changes of accelerators.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250703173248.44995-40-philmd@linaro.org>
---
MAINTAINERS | 1 +
1 file changed, 1 insertion(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index fca98e12195..bfd59f64122 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -495,6 +495,7 @@ Guest CPU Cores (other accelerators)
Overall
M: Richard Henderson <richard.henderson@linaro.org>
R: Paolo Bonzini <pbonzini@redhat.com>
+R: Philippe Mathieu-Daudé <philmd@linaro.org>
S: Maintained
F: include/exec/cpu*.h
F: include/exec/target_long.h
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 31/31] hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers()
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (29 preceding siblings ...)
2025-07-04 10:14 ` [PULL 30/31] MAINTAINERS: Add me as reviewer of overall accelerators section Philippe Mathieu-Daudé
@ 2025-07-04 10:14 ` Philippe Mathieu-Daudé
2025-07-04 17:49 ` [PULL 00/31] Accelerators patches for 2025-07-04 Stefan Hajnoczi
31 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-07-04 10:14 UTC (permalink / raw)
To: qemu-devel
From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Commit b84694defb added the CPU_DUMP_VPU to allow vector registers to be
logged by log_cpu_exec() in TCG. This flag was then used in commit
b227f6a8a7 to print RISC-V vector registers using this flag. Note that
this change was done in riscv_cpu_dump_state(), the cpu_dump_state()
callback for RISC-V, the same callback used in hmp_info_registers().
Back then we forgot to change hmp_info_registers(), and 'info registers'
isn't showing RISC-V vector registers as a result. No other target is
impacted since only RISC-V is using CPU_DUMP_VPU.
There's no reason to not show VPU regs in info_registers(), so add
CPU_DUMP_VPU to hmp_info_registers(). This will print vector registers
for all RISC-V machines and, as said above, has no impact in other
archs.
Cc: Dr. David Alan Gilbert <dave@treblig.org>
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20250623145306.991562-1-dbarboza@ventanamicro.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
monitor/hmp-cmds-target.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
index 8eaf70d9c9a..e9820611466 100644
--- a/monitor/hmp-cmds-target.c
+++ b/monitor/hmp-cmds-target.c
@@ -102,7 +102,7 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
if (all_cpus) {
CPU_FOREACH(cs) {
monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
- cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
+ cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU);
}
} else {
cs = vcpu >= 0 ? qemu_get_cpu(vcpu) : mon_get_cpu(mon);
@@ -117,7 +117,7 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
}
monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
- cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
+ cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU);
}
}
--
2.49.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* Re: [PULL 00/31] Accelerators patches for 2025-07-04
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
` (30 preceding siblings ...)
2025-07-04 10:14 ` [PULL 31/31] hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers() Philippe Mathieu-Daudé
@ 2025-07-04 17:49 ` Stefan Hajnoczi
31 siblings, 0 replies; 52+ messages in thread
From: Stefan Hajnoczi @ 2025-07-04 17:49 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/10.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2025-07-04 10:14 ` [PULL 13/31] accel/nvmm: " Philippe Mathieu-Daudé
@ 2026-01-13 19:32 ` Thomas Huth
2026-01-13 20:30 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 52+ messages in thread
From: Thomas Huth @ 2026-01-13 19:32 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Reinoud Zandijk, Ryo ONODERA
On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
> No need for accel-specific @dirty field when we have
> a generic one in CPUState.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
> Message-Id: <20250703173248.44995-20-philmd@linaro.org>
> ---
> target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
> index f1c6120ccf1..aea61a6fd2a 100644
> --- a/target/i386/nvmm/nvmm-all.c
> +++ b/target/i386/nvmm/nvmm-all.c
...
> @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
> }
> }
>
> - qcpu->dirty = true;
> + qcpu->vcpu_dirty = true;
> cpu->accel = qcpu;
>
> return 0;
FYI, this does not seem to compile:
../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has no
member named 'vcpu_dirty'
988 | qcpu->vcpu_dirty = true;
| ^~
Is anybody checking the netbsd builds at all?
(I'm currently trying to update test/vm/netbsd to version 10.1, that's how I
noticed it)
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-13 19:32 ` Thomas Huth
@ 2026-01-13 20:30 ` Philippe Mathieu-Daudé
2026-01-13 20:36 ` Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-13 20:30 UTC (permalink / raw)
To: Thomas Huth, qemu-devel, Daniel P. Berrangé, Peter Maydell,
Richard Henderson
Cc: Reinoud Zandijk, Ryo ONODERA, Markus Armbruster
On 13/1/26 20:32, Thomas Huth wrote:
> On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
>> No need for accel-specific @dirty field when we have
>> a generic one in CPUState.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
>> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>> Message-Id: <20250703173248.44995-20-philmd@linaro.org>
>> ---
>> target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
>> 1 file changed, 10 insertions(+), 11 deletions(-)
>>
>> diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
>> index f1c6120ccf1..aea61a6fd2a 100644
>> --- a/target/i386/nvmm/nvmm-all.c
>> +++ b/target/i386/nvmm/nvmm-all.c
> ...
>> @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
>> }
>> }
>> - qcpu->dirty = true;
>> + qcpu->vcpu_dirty = true;
>> cpu->accel = qcpu;
>> return 0;
>
> FYI, this does not seem to compile:
>
> ../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
> ../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has no
> member named 'vcpu_dirty'
> 988 | qcpu->vcpu_dirty = true;
> | ^~
s/qcpu/cpu/
>
> Is anybody checking the netbsd builds at all?
3 reviewers and 6 months later.
Should we add a policy for bitrotting untested code?
> (I'm currently trying to update test/vm/netbsd to version 10.1, that's
> how I noticed it)
>
> Thomas
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-13 20:30 ` Philippe Mathieu-Daudé
@ 2026-01-13 20:36 ` Philippe Mathieu-Daudé
2026-01-14 7:38 ` Markus Armbruster
2026-01-14 9:12 ` [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field Daniel P. Berrangé
2 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-13 20:36 UTC (permalink / raw)
To: Thomas Huth, qemu-devel, Daniel P. Berrangé, Peter Maydell,
Richard Henderson
Cc: Reinoud Zandijk, Ryo ONODERA, Markus Armbruster
On 13/1/26 21:30, Philippe Mathieu-Daudé wrote:
> On 13/1/26 20:32, Thomas Huth wrote:
>> On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
>>> No need for accel-specific @dirty field when we have
>>> a generic one in CPUState.
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
>>> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>>> Message-Id: <20250703173248.44995-20-philmd@linaro.org>
>>> ---
>>> target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
>>> 1 file changed, 10 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
>>> index f1c6120ccf1..aea61a6fd2a 100644
>>> --- a/target/i386/nvmm/nvmm-all.c
>>> +++ b/target/i386/nvmm/nvmm-all.c
>> ...
>>> @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
>>> }
>>> }
>>> - qcpu->dirty = true;
>>> + qcpu->vcpu_dirty = true;
>>> cpu->accel = qcpu;
>>> return 0;
>>
>> FYI, this does not seem to compile:
>>
>> ../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
>> ../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has
>> no member named 'vcpu_dirty'
>> 988 | qcpu->vcpu_dirty = true;
>> | ^~
>
> s/qcpu/cpu/
>
>>
>> Is anybody checking the netbsd builds at all?
>
> 3 reviewers and 6 months later.
and 7 commits on top of this PR :)
$ git log --oneline 2098164a6be..master -- target/i386/nvmm/nvmm-all.c
d5e1d2dea11 target/i386: clear CPU_INTERRUPT_SIPI for all accelerators
5699f6a4409 target/i386/nvmm: Inline cpu_physical_memory_rw() in
nvmm_mem_callback
9a191d3782d cpus: clear exit_request in qemu_process_cpu_events
f084ff128b6 accel: use atomic accesses for exit_request
ac6c8a390b4 accel: use store_release/load_acquire for cross-thread
exit_request
602d5ebba26 treewide: clear bits of cs->interrupt_request with
cpu_reset_interrupt()
87511341c30 add cpu_test_interrupt()/cpu_set_interrupt() helpers and use
them tree wide
f96b157ebb9 Merge tag 'accel-20250715' of https://github.com/philmd/qemu
into staging
f7a7e7dd217 accel: Extract AccelClass definition to 'accel/accel-ops.h'
d93972d88b0 target/i386: nvmm, whpx: add accel/CPU class that sets host
vendor
51e18961999 accel: Propagate AccelState to AccelClass::init_machine()
b6637bd5561 accel/nvmm: Expose nvmm_enabled() to common code
>
> Should we add a policy for bitrotting untested code?
>
>> (I'm currently trying to update test/vm/netbsd to version 10.1, that's
>> how I noticed it)
>>
>> Thomas
>>
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-13 20:30 ` Philippe Mathieu-Daudé
2026-01-13 20:36 ` Philippe Mathieu-Daudé
@ 2026-01-14 7:38 ` Markus Armbruster
2026-01-14 9:19 ` Daniel P. Berrangé
2026-01-14 9:12 ` [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field Daniel P. Berrangé
2 siblings, 1 reply; 52+ messages in thread
From: Markus Armbruster @ 2026-01-14 7:38 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Thomas Huth, qemu-devel, Daniel P. Berrangé, Peter Maydell,
Richard Henderson, Reinoud Zandijk, Ryo ONODERA
Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> On 13/1/26 20:32, Thomas Huth wrote:
>> On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
>>> No need for accel-specific @dirty field when we have
>>> a generic one in CPUState.
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
>>> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>>> Message-Id: <20250703173248.44995-20-philmd@linaro.org>
>>> ---
>>> target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
>>> 1 file changed, 10 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
>>> index f1c6120ccf1..aea61a6fd2a 100644
>>> --- a/target/i386/nvmm/nvmm-all.c
>>> +++ b/target/i386/nvmm/nvmm-all.c
>> ...
>>> @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
>>> }
>>> }
>>> - qcpu->dirty = true;
>>> + qcpu->vcpu_dirty = true;
>>> cpu->accel = qcpu;
>>> return 0;
>> FYI, this does not seem to compile:
>> ../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
>> ../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has no member named 'vcpu_dirty'
>> 988 | qcpu->vcpu_dirty = true;
>> | ^~
>
> s/qcpu/cpu/
>
>> Is anybody checking the netbsd builds at all?
>
> 3 reviewers and 6 months later.
I have good news! Because this does not compile since 10.1, and we're
already in the 11.0 cycle, we can rip it out immediately without doing
the deprecation dance.
> Should we add a policy for bitrotting untested code?
What policy do you have in mind?
>> (I'm currently trying to update test/vm/netbsd to version 10.1, that's how I noticed it)
>> Thomas
>>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-13 20:30 ` Philippe Mathieu-Daudé
2026-01-13 20:36 ` Philippe Mathieu-Daudé
2026-01-14 7:38 ` Markus Armbruster
@ 2026-01-14 9:12 ` Daniel P. Berrangé
2 siblings, 0 replies; 52+ messages in thread
From: Daniel P. Berrangé @ 2026-01-14 9:12 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Thomas Huth, qemu-devel, Peter Maydell, Richard Henderson,
Reinoud Zandijk, Ryo ONODERA, Markus Armbruster
On Tue, Jan 13, 2026 at 09:30:32PM +0100, Philippe Mathieu-Daudé wrote:
> On 13/1/26 20:32, Thomas Huth wrote:
> > On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
> > > No need for accel-specific @dirty field when we have
> > > a generic one in CPUState.
> > >
> > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> > > Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> > > Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
> > > Message-Id: <20250703173248.44995-20-philmd@linaro.org>
> > > ---
> > > target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
> > > 1 file changed, 10 insertions(+), 11 deletions(-)
> > >
> > > diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
> > > index f1c6120ccf1..aea61a6fd2a 100644
> > > --- a/target/i386/nvmm/nvmm-all.c
> > > +++ b/target/i386/nvmm/nvmm-all.c
> > ...
> > > @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
> > > }
> > > }
> > > - qcpu->dirty = true;
> > > + qcpu->vcpu_dirty = true;
> > > cpu->accel = qcpu;
> > > return 0;
> >
> > FYI, this does not seem to compile:
> >
> > ../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
> > ../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has no
> > member named 'vcpu_dirty'
> > 988 | qcpu->vcpu_dirty = true;
> > | ^~
>
> s/qcpu/cpu/
>
> >
> > Is anybody checking the netbsd builds at all?
>
> 3 reviewers and 6 months later.
>
> Should we add a policy for bitrotting untested code?
Since we don't cover netbsd in GitLab CI, all responsibility for keeping
it working lies with whomever cares about the distro. No contributors
or maintainers in general should feel obligated to fix bugs in untested
platforms unless they specifically care about the platform.
> > (I'm currently trying to update test/vm/netbsd to version 10.1, that's
> > how I noticed it)
MAINTAINERS lists no one against test/vm/netbsd.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 7:38 ` Markus Armbruster
@ 2026-01-14 9:19 ` Daniel P. Berrangé
2026-01-14 9:26 ` Paolo Bonzini
2026-01-14 10:43 ` Policy regarding platforms / features with out CI coverage (was: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field) Markus Armbruster
0 siblings, 2 replies; 52+ messages in thread
From: Daniel P. Berrangé @ 2026-01-14 9:19 UTC (permalink / raw)
To: Markus Armbruster
Cc: Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Reinoud Zandijk, Ryo ONODERA
On Wed, Jan 14, 2026 at 08:38:26AM +0100, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
>
> > On 13/1/26 20:32, Thomas Huth wrote:
> >> On 04/07/2025 12.14, Philippe Mathieu-Daudé wrote:
> >>> No need for accel-specific @dirty field when we have
> >>> a generic one in CPUState.
> >>>
> >>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> >>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> >>> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> >>> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
> >>> Message-Id: <20250703173248.44995-20-philmd@linaro.org>
> >>> ---
> >>> target/i386/nvmm/nvmm-all.c | 21 ++++++++++-----------
> >>> 1 file changed, 10 insertions(+), 11 deletions(-)
> >>>
> >>> diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
> >>> index f1c6120ccf1..aea61a6fd2a 100644
> >>> --- a/target/i386/nvmm/nvmm-all.c
> >>> +++ b/target/i386/nvmm/nvmm-all.c
> >> ...
> >>> @@ -982,7 +981,7 @@ nvmm_init_vcpu(CPUState *cpu)
> >>> }
> >>> }
> >>> - qcpu->dirty = true;
> >>> + qcpu->vcpu_dirty = true;
> >>> cpu->accel = qcpu;
> >>> return 0;
> >> FYI, this does not seem to compile:
> >> ../src/target/i386/nvmm/nvmm-all.c: In function 'nvmm_init_vcpu':
> >> ../src/target/i386/nvmm/nvmm-all.c:988:9: error: 'AccelCPUState' has no member named 'vcpu_dirty'
> >> 988 | qcpu->vcpu_dirty = true;
> >> | ^~
> >
> > s/qcpu/cpu/
> >
> >> Is anybody checking the netbsd builds at all?
> >
> > 3 reviewers and 6 months later.
>
> I have good news! Because this does not compile since 10.1, and we're
> already in the 11.0 cycle, we can rip it out immediately without doing
> the deprecation dance.
>
> > Should we add a policy for bitrotting untested code?
>
> What policy do you have in mind?
Implicitly I consider the policy to effectively be
(1) Platforms untested by GitLab CI are not guaranteed to work at
any time, including in formal releases.
(2) No contributors/maintainers are obligated to investigate or
fix breakage in untested platforms
(3) Those whom care about the platform are expected to perform
manual testing and contribute fixes as required.
This doesn't imply we should automatically rip it out, but if we see
no evidence of (3) for a prolonged period of time, and no sign of it
being used downstream in any way, it is worth considering the cost /
benefit.
In the case of NetBSD something must be working to some extent since
it appears that 10.1.0 QEMU is present in the pkg repos:
https://pkgsrc.se/emulators/qemu
so that argues against ripping stuff out even if we notice breakage.
> >> (I'm currently trying to update test/vm/netbsd to version 10.1, that's how I noticed it)
> >> Thomas
> >>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 9:19 ` Daniel P. Berrangé
@ 2026-01-14 9:26 ` Paolo Bonzini
2026-01-14 10:45 ` Markus Armbruster
2026-01-14 10:43 ` Policy regarding platforms / features with out CI coverage (was: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field) Markus Armbruster
1 sibling, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2026-01-14 9:26 UTC (permalink / raw)
To: Daniel P. Berrangé, Markus Armbruster
Cc: Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Reinoud Zandijk, Ryo ONODERA
On 1/14/26 10:19, Daniel P. Berrangé wrote:
> This doesn't imply we should automatically rip it out, but if we see
> no evidence of (3) for a prolonged period of time, and no sign of it
> being used downstream in any way, it is worth considering the cost /
> benefit.
>
> In the case of NetBSD something must be working to some extent since
> it appears that 10.1.0 QEMU is present in the pkg repos:
>
> https://pkgsrc.se/emulators/qemu
>
> so that argues against ripping stuff out even if we notice breakage.
And indeed their pkgsrc has the same patch that Philippe has now
submitted for inclusion in qemu.git:
https://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/emulators/qemu/patches/patch-target_i386_nvmm_nvmm-all.c.diff?r1=1.10;r2=1.11
---- target/i386/nvmm/nvmm-all.c.orig 2024-11-20 22:48:05.000000000 +0000
+--- target/i386/nvmm/nvmm-all.c.orig 2025-08-26 18:32:38.000000000 +0000
+++ target/i386/nvmm/nvmm-all.c
-@@ -1057,7 +1057,11 @@ nvmm_process_section(MemoryRegionSection
+@@ -984,7 +984,7 @@ nvmm_init_vcpu(CPUState *cpu)
+ }
+ }
+
+- qcpu->vcpu_dirty = true;
++ cpu->vcpu_dirty = true;
+ cpu->accel = qcpu;
+
+ return 0;
+@@ -1059,7 +1059,11 @@ nvmm_process_section(MemoryRegionSection
unsigned int delta;
uintptr_t hva;
^ permalink raw reply [flat|nested] 52+ messages in thread
* Policy regarding platforms / features with out CI coverage (was: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field)
2026-01-14 9:19 ` Daniel P. Berrangé
2026-01-14 9:26 ` Paolo Bonzini
@ 2026-01-14 10:43 ` Markus Armbruster
1 sibling, 0 replies; 52+ messages in thread
From: Markus Armbruster @ 2026-01-14 10:43 UTC (permalink / raw)
To: Daniel P. Berrangé
Cc: Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Reinoud Zandijk, Ryo ONODERA
Daniel P. Berrangé <berrange@redhat.com> writes:
> On Wed, Jan 14, 2026 at 08:38:26AM +0100, Markus Armbruster wrote:
>> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
[...]
>> > Should we add a policy for bitrotting untested code?
>>
>> What policy do you have in mind?
>
> Implicitly I consider the policy to effectively be
>
> (1) Platforms untested by GitLab CI are not guaranteed to work at
> any time, including in formal releases.
> (2) No contributors/maintainers are obligated to investigate or
> fix breakage in untested platforms
> (3) Those whom care about the platform are expected to perform
> manual testing and contribute fixes as required.
>
> This doesn't imply we should automatically rip it out, but if we see
> no evidence of (3) for a prolonged period of time, and no sign of it
> being used downstream in any way, it is worth considering the cost /
> benefit.
Sounds good to me. Put it in docs/ somewhere?
[...]
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 9:26 ` Paolo Bonzini
@ 2026-01-14 10:45 ` Markus Armbruster
2026-01-14 10:54 ` Paolo Bonzini
2026-01-14 11:28 ` Reinoud Zandijk
0 siblings, 2 replies; 52+ messages in thread
From: Markus Armbruster @ 2026-01-14 10:45 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
qemu-devel, Peter Maydell, Richard Henderson, Reinoud Zandijk,
Ryo ONODERA
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 1/14/26 10:19, Daniel P. Berrangé wrote:
>> This doesn't imply we should automatically rip it out, but if we see
>> no evidence of (3) for a prolonged period of time, and no sign of it
>> being used downstream in any way, it is worth considering the cost /
>> benefit.
>>
>> In the case of NetBSD something must be working to some extent since
>> it appears that 10.1.0 QEMU is present in the pkg repos:
>>
>> https://pkgsrc.se/emulators/qemu
>>
>> so that argues against ripping stuff out even if we notice breakage.
>
> And indeed their pkgsrc has the same patch that Philippe has now
> submitted for inclusion in qemu.git:
>
> https://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/emulators/qemu/patches/patch-target_i386_nvmm_nvmm-all.c.diff?r1=1.10;r2=1.11
>
> ---- target/i386/nvmm/nvmm-all.c.orig 2024-11-20 22:48:05.000000000 +0000
> +--- target/i386/nvmm/nvmm-all.c.orig 2025-08-26 18:32:38.000000000 +0000
> +++ target/i386/nvmm/nvmm-all.c
> -@@ -1057,7 +1057,11 @@ nvmm_process_section(MemoryRegionSection
> +@@ -984,7 +984,7 @@ nvmm_init_vcpu(CPUState *cpu)
> + }
> + }
> +
> +- qcpu->vcpu_dirty = true;
> ++ cpu->vcpu_dirty = true;
> + cpu->accel = qcpu;
> +
> + return 0;
> +@@ -1059,7 +1059,11 @@ nvmm_process_section(MemoryRegionSection
> unsigned int delta;
> uintptr_t hva;
That they didn't immediately post the fix upstream is a bit of a
disappointment. Deep in the weeds, I guess.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 10:45 ` Markus Armbruster
@ 2026-01-14 10:54 ` Paolo Bonzini
2026-01-14 11:27 ` Markus Armbruster
2026-01-14 11:28 ` Reinoud Zandijk
1 sibling, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2026-01-14 10:54 UTC (permalink / raw)
To: Markus Armbruster
Cc: Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
qemu-devel, Peter Maydell, Richard Henderson, Reinoud Zandijk,
Ryo ONODERA
On 1/14/26 11:45, Markus Armbruster wrote:
>> ---- target/i386/nvmm/nvmm-all.c.orig 2024-11-20 22:48:05.000000000 +0000
>> +--- target/i386/nvmm/nvmm-all.c.orig 2025-08-26 18:32:38.000000000 +0000
>> +++ target/i386/nvmm/nvmm-all.c
>> -@@ -1057,7 +1057,11 @@ nvmm_process_section(MemoryRegionSection
>> +@@ -984,7 +984,7 @@ nvmm_init_vcpu(CPUState *cpu)
>> + }
>> + }
>> +
>> +- qcpu->vcpu_dirty = true;
>> ++ cpu->vcpu_dirty = true;
>> + cpu->accel = qcpu;
>> +
>> + return 0;
>> +@@ -1059,7 +1059,11 @@ nvmm_process_section(MemoryRegionSection
>> unsigned int delta;
>> uintptr_t hva;
>
> That they didn't immediately post the fix upstream is a bit of a
> disappointment. Deep in the weeds, I guess.
Eh, it happens. :/ For the future, since Ryo and Reinoud are in Cc, it
would have been enough to contact anyone on IRC or reply to the release
announcement.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 10:54 ` Paolo Bonzini
@ 2026-01-14 11:27 ` Markus Armbruster
0 siblings, 0 replies; 52+ messages in thread
From: Markus Armbruster @ 2026-01-14 11:27 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
qemu-devel, Peter Maydell, Richard Henderson, Reinoud Zandijk,
Ryo ONODERA
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 1/14/26 11:45, Markus Armbruster wrote:
>>> ---- target/i386/nvmm/nvmm-all.c.orig 2024-11-20 22:48:05.000000000 +0000
>>> +--- target/i386/nvmm/nvmm-all.c.orig 2025-08-26 18:32:38.000000000 +0000
>>> +++ target/i386/nvmm/nvmm-all.c
>>> -@@ -1057,7 +1057,11 @@ nvmm_process_section(MemoryRegionSection
>>> +@@ -984,7 +984,7 @@ nvmm_init_vcpu(CPUState *cpu)
>>> + }
>>> + }
>>> +
>>> +- qcpu->vcpu_dirty = true;
>>> ++ cpu->vcpu_dirty = true;
>>> + cpu->accel = qcpu;
>>> +
>>> + return 0;
>>> +@@ -1059,7 +1059,11 @@ nvmm_process_section(MemoryRegionSection
>>> unsigned int delta;
>>> uintptr_t hva;
>> That they didn't immediately post the fix upstream is a bit of a
>> disappointment. Deep in the weeds, I guess.
>
> Eh, it happens. :/ For the future, since Ryo and Reinoud are in Cc, it would have been enough to contact anyone on IRC or reply to the release announcement.
Yes, it happens, especially when you're deep in the weeds.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 10:45 ` Markus Armbruster
2026-01-14 10:54 ` Paolo Bonzini
@ 2026-01-14 11:28 ` Reinoud Zandijk
2026-01-14 12:09 ` Paolo Bonzini
` (2 more replies)
1 sibling, 3 replies; 52+ messages in thread
From: Reinoud Zandijk @ 2026-01-14 11:28 UTC (permalink / raw)
To: Markus Armbruster
Cc: Paolo Bonzini, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Reinoud Zandijk, Ryo ONODERA
On Wed, Jan 14, 2026 at 11:45:35AM +0100, Markus Armbruster wrote:
> That they didn't immediately post the fix upstream is a bit of a
> disappointment. Deep in the weeds, I guess.
Sorry to break this but even submitting simple patches and getting them into
the qemu source tree hasn't been an easy nor enjoyable experience to me to
understate it so once in a while, a new version is pulled into pkgsrc and
patches are made on top and if they start to grow or diverge too much a patch
round can be made requested on the qemu repo. This is just my experience of
course.
With regards,
Reinoud
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 11:28 ` Reinoud Zandijk
@ 2026-01-14 12:09 ` Paolo Bonzini
2026-01-14 12:17 ` Paolo Bonzini
2026-01-14 13:11 ` Thomas Huth
2 siblings, 0 replies; 52+ messages in thread
From: Paolo Bonzini @ 2026-01-14 12:09 UTC (permalink / raw)
To: Reinoud Zandijk, Markus Armbruster
Cc: Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
qemu-devel, Peter Maydell, Richard Henderson, Ryo ONODERA
[-- Attachment #1: PGP/MIME version identification --]
[-- Type: application/pgp-encrypted, Size: 11 bytes --]
[-- Attachment #2: OpenPGP encrypted message --]
[-- Type: application/octet-stream, Size: 23920 bytes --]
-----BEGIN PGP MESSAGE-----
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
L3891ngq
=DxQF
-----END PGP MESSAGE-----
-----BEGIN PGP MESSAGE-----
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
=Uxmw
-----END PGP MESSAGE-----
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 11:28 ` Reinoud Zandijk
2026-01-14 12:09 ` Paolo Bonzini
@ 2026-01-14 12:17 ` Paolo Bonzini
2026-01-15 10:29 ` Reinoud Zandijk
2026-01-14 13:11 ` Thomas Huth
2 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2026-01-14 12:17 UTC (permalink / raw)
To: Reinoud Zandijk, Markus Armbruster
Cc: Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
qemu-devel, Peter Maydell, Richard Henderson, Ryo ONODERA
On 1/14/26 12:28, Reinoud Zandijk wrote:
> On Wed, Jan 14, 2026 at 11:45:35AM +0100, Markus Armbruster wrote:
>> That they didn't immediately post the fix upstream is a bit of a
>> disappointment. Deep in the weeds, I guess.
>
> Sorry to break this but even submitting simple patches and getting them into
> the qemu source tree hasn't been an easy nor enjoyable experience to me to
> understate it
Have you actually tried since 2021 when your last commit was?
https://patchew.org/search?q=project%3AQEMU+from%3Areinoud says you
didn't but I may be missing something.
In fact your only contribution was a really big one, and I say this not
to understate you work but because *almost anything* would be easier
than submitting a new accelerator.
> so once in a while, a new version is pulled into pkgsrc and
> patches are made on top and if they start to grow or diverge too much a patch
> round can be made requested on the qemu repo. This is just my experience of
> course.
We're not asking you to keep CI up-to-date (which Thomas is doing now,
despite having no specific need that I know of to support NetBSD), just
to *report* failure to build from source and tell us "hey, that's how we
fixed it". Otherwise we have the false impression that no one even
cares about new QEMU on NetBSD.
Thanks,
Paolo
ps: sorry about the previous copy of the message, I somehow fat-fingered
the "encrypt message" command...
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 11:28 ` Reinoud Zandijk
2026-01-14 12:09 ` Paolo Bonzini
2026-01-14 12:17 ` Paolo Bonzini
@ 2026-01-14 13:11 ` Thomas Huth
2 siblings, 0 replies; 52+ messages in thread
From: Thomas Huth @ 2026-01-14 13:11 UTC (permalink / raw)
To: Reinoud Zandijk, Markus Armbruster
Cc: Paolo Bonzini, Daniel P. Berrangé,
Philippe Mathieu-Daudé, qemu-devel, Peter Maydell,
Richard Henderson, Ryo ONODERA
On 14/01/2026 12.28, Reinoud Zandijk wrote:
> On Wed, Jan 14, 2026 at 11:45:35AM +0100, Markus Armbruster wrote:
>> That they didn't immediately post the fix upstream is a bit of a
>> disappointment. Deep in the weeds, I guess.
>
> Sorry to break this but even submitting simple patches and getting them into
> the qemu source tree hasn't been an easy nor enjoyable experience to me
Sorry to hear that (and yes, I agree, it can be difficult indeed some times
for bigger patch sets), but at least for simple patches like this one-line
fix, you can always CC: qemu-trivial@nongnu.org which should help to get
those in rather easily, I hope.
HTH,
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-14 12:17 ` Paolo Bonzini
@ 2026-01-15 10:29 ` Reinoud Zandijk
2026-01-15 11:25 ` Markus Armbruster
0 siblings, 1 reply; 52+ messages in thread
From: Reinoud Zandijk @ 2026-01-15 10:29 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Reinoud Zandijk, Markus Armbruster, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Ryo ONODERA
On Wed, Jan 14, 2026 at 01:17:20PM +0100, Paolo Bonzini wrote:
> On 1/14/26 12:28, Reinoud Zandijk wrote:
> > Sorry to break this but even submitting simple patches and getting them into
> > the qemu source tree hasn't been an easy nor enjoyable experience to me to
> > understate it
>
> Have you actually tried since 2021 when your last commit was?
> https://patchew.org/search?q=project%3AQEMU+from%3Areinoud says you didn't
> but I may be missing something.
>
> In fact your only contribution was a really big one, and I say this not to
> understate you work but because *almost anything* would be easier than
> submitting a new accelerator.
I can't claim all the credits :) Most of the low level work was done by maxv,
the author of NVMM. IIRC I updated the local patch and modified it to work
with the newer build framework and committed it into the tree. I have to admit
I haven't contributed more since but I still use Qemu daily, with the NVMM
accelerator :) It makes such a big difference.
> > so once in a while, a new version is pulled into pkgsrc and
> > patches are made on top and if they start to grow or diverge too much a patch
> > round can be made requested on the qemu repo. This is just my experience of
> > course.
>
> We're not asking you to keep CI up-to-date (which Thomas is doing now,
> despite having no specific need that I know of to support NetBSD), just to
> *report* failure to build from source and tell us "hey, that's how we fixed
> it". Otherwise we have the false impression that no one even cares about
> new QEMU on NetBSD.
As pkgsrc normally tracks releases and has a directory with local patches on
top of that, build errors only show up when we bump the version. Version 10.2
is now in pkgsrc though I am running 10.1.3 so there is surely interest in
keeping it running. I could try to commit some more trivial patches in the
repo here to reduce the diffs some more.
Thanks for the feedback,
Reinoud
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-15 10:29 ` Reinoud Zandijk
@ 2026-01-15 11:25 ` Markus Armbruster
2026-01-15 16:43 ` Alex Bennée
0 siblings, 1 reply; 52+ messages in thread
From: Markus Armbruster @ 2026-01-15 11:25 UTC (permalink / raw)
To: Reinoud Zandijk
Cc: Paolo Bonzini, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Ryo ONODERA
Reinoud Zandijk <reinoud@NetBSD.org> writes:
> On Wed, Jan 14, 2026 at 01:17:20PM +0100, Paolo Bonzini wrote:
>> On 1/14/26 12:28, Reinoud Zandijk wrote:
[...]
>> We're not asking you to keep CI up-to-date (which Thomas is doing now,
>> despite having no specific need that I know of to support NetBSD), just to
>> *report* failure to build from source and tell us "hey, that's how we fixed
>> it". Otherwise we have the false impression that no one even cares about
>> new QEMU on NetBSD.
>
> As pkgsrc normally tracks releases and has a directory with local patches on
> top of that, build errors only show up when we bump the version. Version 10.2
> is now in pkgsrc though I am running 10.1.3 so there is surely interest in
> keeping it running. I could try to commit some more trivial patches in the
> repo here to reduce the diffs some more.
Fixing the build long after it broke is less than ideal. What would it
take to get NetBSD covered in CI?
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-15 11:25 ` Markus Armbruster
@ 2026-01-15 16:43 ` Alex Bennée
2026-01-15 19:41 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 52+ messages in thread
From: Alex Bennée @ 2026-01-15 16:43 UTC (permalink / raw)
To: Markus Armbruster
Cc: Reinoud Zandijk, Paolo Bonzini, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Thomas Huth, qemu-devel,
Peter Maydell, Richard Henderson, Ryo ONODERA
Markus Armbruster <armbru@redhat.com> writes:
> Reinoud Zandijk <reinoud@NetBSD.org> writes:
>
>> On Wed, Jan 14, 2026 at 01:17:20PM +0100, Paolo Bonzini wrote:
>>> On 1/14/26 12:28, Reinoud Zandijk wrote:
>
> [...]
>
>>> We're not asking you to keep CI up-to-date (which Thomas is doing now,
>>> despite having no specific need that I know of to support NetBSD), just to
>>> *report* failure to build from source and tell us "hey, that's how we fixed
>>> it". Otherwise we have the false impression that no one even cares about
>>> new QEMU on NetBSD.
>>
>> As pkgsrc normally tracks releases and has a directory with local patches on
>> top of that, build errors only show up when we bump the version. Version 10.2
>> is now in pkgsrc though I am running 10.1.3 so there is surely interest in
>> keeping it running. I could try to commit some more trivial patches in the
>> repo here to reduce the diffs some more.
>
> Fixing the build long after it broke is less than ideal. What would it
> take to get NetBSD covered in CI?
We have the ability to run tests via the vm-build:
make vm-build-netbsd
however to take full advantage that needs a runner with a reasonable
amount of memory and access to KVM so it can run reasonably fast. Does
anyone want to host a dedicated x86_64 custom runner?
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field
2026-01-15 16:43 ` Alex Bennée
@ 2026-01-15 19:41 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-15 19:41 UTC (permalink / raw)
To: Alex Bennée, Markus Armbruster
Cc: Reinoud Zandijk, Paolo Bonzini, Daniel P. Berrangé,
Thomas Huth, qemu-devel, Peter Maydell, Richard Henderson,
Ryo ONODERA
On 15/1/26 17:43, Alex Bennée wrote:
> Markus Armbruster <armbru@redhat.com> writes:
>
>> Reinoud Zandijk <reinoud@NetBSD.org> writes:
>>
>>> On Wed, Jan 14, 2026 at 01:17:20PM +0100, Paolo Bonzini wrote:
>>>> On 1/14/26 12:28, Reinoud Zandijk wrote:
>>
>> [...]
>>
>>>> We're not asking you to keep CI up-to-date (which Thomas is doing now,
>>>> despite having no specific need that I know of to support NetBSD), just to
>>>> *report* failure to build from source and tell us "hey, that's how we fixed
>>>> it". Otherwise we have the false impression that no one even cares about
>>>> new QEMU on NetBSD.
>>>
>>> As pkgsrc normally tracks releases and has a directory with local patches on
>>> top of that, build errors only show up when we bump the version. Version 10.2
>>> is now in pkgsrc though I am running 10.1.3 so there is surely interest in
>>> keeping it running. I could try to commit some more trivial patches in the
>>> repo here to reduce the diffs some more.
>>
>> Fixing the build long after it broke is less than ideal. What would it
>> take to get NetBSD covered in CI?
>
> We have the ability to run tests via the vm-build:
>
> make vm-build-netbsd
>
> however to take full advantage that needs a runner with a reasonable
> amount of memory and access to KVM so it can run reasonably fast. Does
> anyone want to host a dedicated x86_64 custom runner?
Pierrick had a clever & simpler way to get that:
https://lore.kernel.org/qemu-devel/ae956364-78e6-4067-b0eb-94213891a112@linaro.org/
^ permalink raw reply [flat|nested] 52+ messages in thread
end of thread, other threads:[~2026-01-15 19:42 UTC | newest]
Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-04 10:14 [PULL 00/31] Accelerators patches for 2025-07-04 Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 01/31] system/cpus: Assert interrupt handling is done with BQL locked Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 02/31] accel/kvm: Remove kvm_init_cpu_signals() stub Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 03/31] accel/kvm: Reduce kvm_create_vcpu() declaration scope Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 04/31] accel/tcg: Remove 'info opcount' and @x-query-opcount Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 05/31] accel/tcg: Remove profiler leftover Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 06/31] accel/tcg: Factor tcg_dump_flush_info() out Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 07/31] accel/tcg: Factor tcg_dump_stats() out for re-use Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 08/31] accel/hvf: Restrict internal declarations Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 09/31] accel/hvf: Move per-cpu method declarations to hvf-accel-ops.c Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 10/31] accel/hvf: Move generic method declarations to hvf-all.c Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 11/31] cpus: Document CPUState::vcpu_dirty field Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 12/31] accel/hvf: Replace @dirty field by generic " Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 13/31] accel/nvmm: " Philippe Mathieu-Daudé
2026-01-13 19:32 ` Thomas Huth
2026-01-13 20:30 ` Philippe Mathieu-Daudé
2026-01-13 20:36 ` Philippe Mathieu-Daudé
2026-01-14 7:38 ` Markus Armbruster
2026-01-14 9:19 ` Daniel P. Berrangé
2026-01-14 9:26 ` Paolo Bonzini
2026-01-14 10:45 ` Markus Armbruster
2026-01-14 10:54 ` Paolo Bonzini
2026-01-14 11:27 ` Markus Armbruster
2026-01-14 11:28 ` Reinoud Zandijk
2026-01-14 12:09 ` Paolo Bonzini
2026-01-14 12:17 ` Paolo Bonzini
2026-01-15 10:29 ` Reinoud Zandijk
2026-01-15 11:25 ` Markus Armbruster
2026-01-15 16:43 ` Alex Bennée
2026-01-15 19:41 ` Philippe Mathieu-Daudé
2026-01-14 13:11 ` Thomas Huth
2026-01-14 10:43 ` Policy regarding platforms / features with out CI coverage (was: [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field) Markus Armbruster
2026-01-14 9:12 ` [PULL 13/31] accel/nvmm: Replace @dirty field by generic CPUState::vcpu_dirty field Daniel P. Berrangé
2025-07-04 10:14 ` [PULL 14/31] accel/whpx: " Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 15/31] accel/kvm: Remove kvm_cpu_synchronize_state() stub Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 16/31] accel/system: Document cpu_synchronize_state() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 17/31] accel/system: Document cpu_synchronize_state_post_init/reset() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 18/31] accel/nvmm: Expose nvmm_enabled() to common code Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 19/31] accel/whpx: Expose whpx_enabled() " Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 20/31] accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h' Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 21/31] accel: Expose and register generic_handle_interrupt() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 22/31] accel: Keep reference to AccelOpsClass in AccelClass Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 23/31] accel: Propagate AccelState to AccelClass::init_machine() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 24/31] accel/tcg: Prefer local AccelState over global current_accel() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 25/31] accel/kvm: Prefer local AccelState over global MachineState::accel Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 26/31] accel/kvm: Directly pass KVMState argument to do_kvm_create_vm() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 27/31] accel: Directly pass AccelState argument to AccelClass::has_memory() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 28/31] accel: Remove unused MachineState argument of AccelClass::setup_post() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 29/31] accel: Pass AccelState argument to gdbstub_supported_sstep_flags() Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 30/31] MAINTAINERS: Add me as reviewer of overall accelerators section Philippe Mathieu-Daudé
2025-07-04 10:14 ` [PULL 31/31] hmp-cmds-target.c: add CPU_DUMP_VPU in hmp_info_registers() Philippe Mathieu-Daudé
2025-07-04 17:49 ` [PULL 00/31] Accelerators patches for 2025-07-04 Stefan Hajnoczi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.