[RFC XEN PATCH v2] x86/cpuid: Expose max_vcpus field in HVM hypervisor leaf

Matthew Barnes posted 1 patch 1 month, 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/fa24cd3b232e8865eb6451e5f7af9cd203ce52ab.1721224079.git.matthew.barnes@cloud.com
xen/arch/x86/traps.c                | 4 ++++
xen/include/public/arch-x86/cpuid.h | 3 +++
2 files changed, 7 insertions(+)
[RFC XEN PATCH v2] x86/cpuid: Expose max_vcpus field in HVM hypervisor leaf
Posted by Matthew Barnes 1 month, 2 weeks ago
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.

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

For OVMF to access the maximum vCPU count, this patch has Xen expose
the maximum vCPU ID via cpuid on the HVM hypervisor leaf in edx.

Signed-off-by: Matthew Barnes <matthew.barnes@cloud.com>
---
Changes in v2:
- Tweak value from "maximum vcpu count" to "maximum vcpu id"
- Reword commit message to avoid "have to" wording
- Fix vpcus -> vcpus typo
---
 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..f39b598e9bba 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 vcpu id and set it in edx */
+        res->a |= XEN_HVM_CPUID_MAX_VCPU_ID_PRESENT;
+        res->d = d->max_vcpus - 1;
+
         /*
          * 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..7673e285a9ec 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 vcpu id (iff EAX has XEN_HVM_CPUID_MAX_VCPU_ID_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_VCPU_ID_PRESENT (1u << 7) /* max vcpu id is present in EDX */
+
 /*
  * Leaf 6 (0x40000x05)
  * PV-specific parameters
-- 
2.34.1
Re: [RFC XEN PATCH v2] x86/cpuid: Expose max_vcpus field in HVM hypervisor leaf
Posted by Jan Beulich 1 month, 2 weeks ago
On 19.07.2024 16:21, Matthew Barnes wrote:
> 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.
> 
> GitLab ticket: https://gitlab.com/xen-project/xen/-/issues/191
> 
> For OVMF to access the maximum vCPU count, this patch has Xen expose
> the maximum vCPU ID via cpuid on the HVM hypervisor leaf in edx.
> 
> Signed-off-by: Matthew Barnes <matthew.barnes@cloud.com>
> ---
> Changes in v2:
> - Tweak value from "maximum vcpu count" to "maximum vcpu id"
> - Reword commit message to avoid "have to" wording
> - Fix vpcus -> vcpus typo
> ---

Yet still HVM-only?

Jan