60 lines
2.3 KiB
Diff
60 lines
2.3 KiB
Diff
From 65a864175fc2ace2862993871fb0da783db2f09e Mon Sep 17 00:00:00 2001
|
|
From: Magnus Kulke <magnuskulke@linux.microsoft.com>
|
|
Date: Tue, 21 Apr 2026 05:21:54 +0000
|
|
Subject: [PATCH 2/2] accel/mshv: implement cpu_thread_is_idle() hook
|
|
|
|
RH-Author: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-MergeRequest: 559: accel/mshv: backport required patches for mshv guests
|
|
RH-Jira: RHEL-184951
|
|
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>
|
|
RH-Commit: [2/2] ffcc0f3b6d3e7e04d28797d9fb31d88df4827230 (mrezanin/rhel-src-qemu-kvm)
|
|
|
|
In MSHV the hypervisor APIC is always used, so we to implement this hook
|
|
to make sure the AP's vcpu thread is not blocked waiting for an INIT SIPI
|
|
by the BSP. Without this change soft reboots with -smp cpus>=2 will
|
|
hang.
|
|
|
|
Signed-off-by: Magnus Kulke <magnuskulke@linux.microsoft.com>
|
|
Reviewed-by: Mohamed Mediouni <mohamed@unpredictable.fr>
|
|
Link: https://lore.kernel.org/r/20260421-mshv_accel_arm64_supp-v3-9-469f544778ba@linux.microsoft.com
|
|
[Make comment not x86 specific. - Paolo]
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
(cherry picked from commit dbfb680772d5184544f7c0a8bba96bec229c96e6)
|
|
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
---
|
|
accel/mshv/mshv-all.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c
|
|
index 88b66f2992..d7df89dbd2 100644
|
|
--- a/accel/mshv/mshv-all.c
|
|
+++ b/accel/mshv/mshv-all.c
|
|
@@ -699,11 +699,23 @@ static const TypeInfo mshv_accel_type = {
|
|
.instance_size = sizeof(MshvState),
|
|
};
|
|
|
|
+/*
|
|
+ * MSHV manages secondary processors in the hypervisor. SIPI for x86 and
|
|
+ * PSCI for Arm are handled internally. Halted vCPUs must still enter
|
|
+ * mshv_cpu_exec() so that MSHV_RUN_VP is called and the hypervisor will
|
|
+ * wake APs.
|
|
+ */
|
|
+static bool mshv_vcpu_thread_is_idle(CPUState *cpu)
|
|
+{
|
|
+ return false;
|
|
+}
|
|
+
|
|
static void mshv_accel_ops_class_init(ObjectClass *oc, const void *data)
|
|
{
|
|
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
|
|
|
ops->create_vcpu_thread = mshv_start_vcpu_thread;
|
|
+ ops->cpu_thread_is_idle = mshv_vcpu_thread_is_idle;
|
|
ops->synchronize_post_init = mshv_cpu_synchronize_post_init;
|
|
ops->synchronize_post_reset = mshv_cpu_synchronize_post_reset;
|
|
ops->synchronize_state = mshv_cpu_synchronize;
|
|
--
|
|
2.52.0
|
|
|