All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC XEN PATCH] x86/cpuid: Expose max_vcpus field in HVM hypervisor leaf
@ 2024-07-08 15:42 Matthew Barnes
  2024-07-09  6:40 ` Jan Beulich
  0 siblings, 1 reply; 6+ messages in thread
From: Matthew Barnes @ 2024-07-08 15:42 UTC (permalink / raw)
  To: Xen-devel
  Cc: Matthew Barnes, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Alejandro Vallejo

Currently, OVMF is hard-coded to set up a maximum of 64 vCPUs on
startup.

There are efforts to support a maximum of 128 vCPUs, which would involve
bumping the OVMF constant from 64 to 128.

However, it would be more future-proof for OVMF to access the maximum
number of vCPUs for a domain and set itself up appropriately at
run-time.

For OVMF to access the maximum vCPU count, Xen will have to expose this
property via cpuid.

This patch exposes the max_vcpus field via cpuid on the HVM hypervisor
leaf in edx.

Tested on HVM guests running Ubuntu 22.04 LTS and Windows 10 x64.

GitLab ticket: https://gitlab.com/xen-project/xen/-/issues/191

Signed-off-by: Matthew Barnes <matthew.barnes@cloud.com>
---
 xen/arch/x86/traps.c                | 4 ++++
 xen/include/public/arch-x86/cpuid.h | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index ee91fc56b125..b439ee94f562 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -1169,6 +1169,10 @@ void cpuid_hypervisor_leaves(const struct vcpu *v, uint32_t leaf,
         res->a |= XEN_HVM_CPUID_DOMID_PRESENT;
         res->c = d->domain_id;
 
+        /* Indicate presence of max vcpus and set it in edx */
+        res->a |= XEN_HVM_CPUID_MAX_VCPUS_PRESENT;
+        res->d = d->max_vcpus;
+
         /*
          * Per-vCPU event channel upcalls are implemented and work
          * correctly with PIRQs routed over event channels.
diff --git a/xen/include/public/arch-x86/cpuid.h b/xen/include/public/arch-x86/cpuid.h
index 3bb0dd249ff9..a11c9b684308 100644
--- a/xen/include/public/arch-x86/cpuid.h
+++ b/xen/include/public/arch-x86/cpuid.h
@@ -87,6 +87,7 @@
  * Sub-leaf 0: EAX: Features
  * Sub-leaf 0: EBX: vcpu id (iff EAX has XEN_HVM_CPUID_VCPU_ID_PRESENT flag)
  * Sub-leaf 0: ECX: domain id (iff EAX has XEN_HVM_CPUID_DOMID_PRESENT flag)
+ * Sub-leaf 0: EDX: max vcpus (iff EAX has XEN_HVM_CPUID_MAX_VCPUS_PRESENT flag)
  */
 #define XEN_HVM_CPUID_APIC_ACCESS_VIRT (1u << 0) /* Virtualized APIC registers */
 #define XEN_HVM_CPUID_X2APIC_VIRT      (1u << 1) /* Virtualized x2APIC accesses */
@@ -107,6 +108,8 @@
  */
 #define XEN_HVM_CPUID_UPCALL_VECTOR    (1u << 6)
 
+#define XEN_HVM_CPUID_MAX_VCPUS_PRESENT (1u << 7) /* max vpcus is present in EDX */
+
 /*
  * Leaf 6 (0x40000x05)
  * PV-specific parameters
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-07-16 15:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-08 15:42 [RFC XEN PATCH] x86/cpuid: Expose max_vcpus field in HVM hypervisor leaf Matthew Barnes
2024-07-09  6:40 ` Jan Beulich
2024-07-09 11:11   ` Alejandro Vallejo
2024-07-09 11:43     ` Jan Beulich
2024-07-16 15:03   ` Matthew Barnes
2024-07-16 15:37     ` Jan Beulich

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.