From 03e484a4f6fbf833f5b6fba3b8cebf43ca433f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Date: Mon, 25 Mar 2024 10:48:23 +0100 Subject: [PATCH] x86/vcpu: relax VCPUOP_initialise restriction for non-PV vCPUs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There's no reason to force HVM guests to have a valid vcpu_info area when initializing a vCPU, as the vCPU can also be brought online using the local APIC, and on that path there's no requirement for vcpu_info to be setup ahead of the bring up. Note an HVM vCPU can operate normally without making use of vcpu_info, and in fact does so when brought up via the local APIC. Restrict the check against dummy_vcpu_info to only apply to PV guests. Fixes: 192df6f9122d ('x86: allow HVM guests to use hypercalls to bring up vCPUs') Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper --- xen/common/compat/domain.c | 2 +- xen/common/domain.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/common/compat/domain.c b/xen/common/compat/domain.c index 7ff238cc26..6b4afc8232 100644 --- a/xen/common/compat/domain.c +++ b/xen/common/compat/domain.c @@ -49,7 +49,7 @@ int compat_common_vcpu_op(int cmd, struct vcpu *v, { case VCPUOP_initialise: { - if ( v->vcpu_info_area.map == &dummy_vcpu_info ) + if ( is_pv_domain(d) && v->vcpu_info_area.map == &dummy_vcpu_info ) return -EINVAL; #ifdef CONFIG_HVM diff --git a/xen/common/domain.c b/xen/common/domain.c index 9b42eee44a..ceb44c8266 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1827,7 +1827,7 @@ long common_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg) switch ( cmd ) { case VCPUOP_initialise: - if ( v->vcpu_info_area.map == &dummy_vcpu_info ) + if ( is_pv_domain(d) && v->vcpu_info_area.map == &dummy_vcpu_info ) return -EINVAL; rc = arch_initialise_vcpu(v, arg);