[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 01/11] hvf: Add facility for initialisation code prior to first v
From: |
phil |
Subject: |
[PATCH 01/11] hvf: Add facility for initialisation code prior to first vCPU run |
Date: |
Mon, 9 Dec 2024 21:36:19 +0100 |
From: Phil Dennis-Jordan <phil@philjordan.eu>
Some VM state required for fully configuring vCPUs is only available
after all devices have been through their init phase. This extra
function, called just before each vCPU makes its first VM entry,
allows us to perform such architecture-specific initialisation.
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
---
accel/hvf/hvf-accel-ops.c | 5 +++++
include/sysemu/hvf_int.h | 1 +
target/arm/hvf/hvf.c | 4 ++++
target/i386/hvf/hvf.c | 4 ++++
4 files changed, 14 insertions(+)
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index d60874d3e6..c17a9a10de 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -442,6 +442,11 @@ static void *hvf_cpu_thread_fn(void *arg)
cpu_thread_signal_created(cpu);
qemu_guest_random_seed_thread_part2(cpu->random_seed);
+ if (!cpu_can_run(cpu)) {
+ qemu_wait_io_event(cpu);
+ }
+ hvf_vcpu_before_first_run(cpu);
+
do {
if (cpu_can_run(cpu)) {
r = hvf_vcpu_exec(cpu);
diff --git a/include/sysemu/hvf_int.h b/include/sysemu/hvf_int.h
index 42ae18433f..2775bd82d7 100644
--- a/include/sysemu/hvf_int.h
+++ b/include/sysemu/hvf_int.h
@@ -67,6 +67,7 @@ const char *hvf_return_string(hv_return_t ret);
int hvf_arch_init(void);
hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range);
int hvf_arch_init_vcpu(CPUState *cpu);
+void hvf_vcpu_before_first_run(CPUState *cpu);
void hvf_arch_vcpu_destroy(CPUState *cpu);
int hvf_vcpu_exec(CPUState *);
hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t);
diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index ca7ea92774..0b334c268e 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -1061,6 +1061,10 @@ int hvf_arch_init_vcpu(CPUState *cpu)
return 0;
}
+void hvf_vcpu_before_first_run(CPUState *cpu)
+{
+}
+
void hvf_kick_vcpu_thread(CPUState *cpu)
{
cpus_kick_thread(cpu);
diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c
index c5d025d557..3b6ee79fb2 100644
--- a/target/i386/hvf/hvf.c
+++ b/target/i386/hvf/hvf.c
@@ -338,6 +338,10 @@ int hvf_arch_init_vcpu(CPUState *cpu)
return 0;
}
+void hvf_vcpu_before_first_run(CPUState *cpu)
+{
+}
+
static void hvf_store_events(CPUState *cpu, uint32_t ins_len, uint64_t
idtvec_info)
{
X86CPU *x86_cpu = X86_CPU(cpu);
--
2.39.3 (Apple Git-146)
- [PATCH 00/11] hvf and APIC fixes, improvements, and optimisations, phil, 2024/12/09
- [PATCH 02/11] arm/hvf: Initialise GICv3 state just before first vCPU run, phil, 2024/12/09
- [PATCH 01/11] hvf: Add facility for initialisation code prior to first vCPU run,
phil <=
- [PATCH 04/11] i386/hvf: Pre-fetch emulated instructions, phil, 2024/12/09
- [PATCH 05/11] i386/hvf: Decode APIC access x86 instruction outside BQL, phil, 2024/12/09
- [PATCH 08/11] i386/hvf: Variable type fixup in decoder, phil, 2024/12/09
- [PATCH 07/11] i386/hvf: Enables APIC_ACCESS VM exits by setting APICBASE, phil, 2024/12/09
- [PATCH 09/11] i386/hvf: Print hex pairs for each opcode byte in decode error, phil, 2024/12/09
- [PATCH 03/11] i386/hvf: Don't send signal to thread when kicking, phil, 2024/12/09