arch: x86_64: recommend Hyper-V paravirt TLB flush and cluster IPI

Adds three recommendation bits to CPUID 0x40000004.EAX so Windows /
Hyper-V-aware guests use the corresponding paravirtualized hypercalls
instead of falling back to architectural primitives. The hypercalls
themselves are emulated unconditionally by KVM and surfaced via the
corresponding KVM_CAP_HYPERV_* info caps; no userspace cap negotiation
is needed because KVM advertises support to the guest at hypercall
issue time:

  KVM_CAP_HYPERV_TLBFLUSH advertises HvFlush{VirtualAddressSpace,Ex,
                          List,ListEx} (api.rst 8.18, info-only cap).
  KVM_CAP_HYPERV_SEND_IPI advertises HvCallSendSyntheticClusterIpi{,Ex}
                          (api.rst 8.20, also info-only).

Leaf 0x40000004.EAX (HV_CPUID_ENLIGHTMENT_INFO):
  bit 1  LocalTlbFlushRecommended
  bit 2  RemoteTlbFlushRecommended
         Recommend HvFlushVirtualAddressSpace / List in place of
         architectural INVPCID / INVLPG broadcasts. Remote shoot-down
         via hypercall lets the host skip vCPUs that are not currently
         scheduled, instead of waiting for an IPI ack.
  bit 10 ClusterIpiRecommended
         Recommend HvCallSendSyntheticClusterIpi over per-target APIC
         ICR writes. A single hypercall can target up to 64 vCPUs (or
         all of them via the Ex variant) versus one VM exit per APIC
         access on the architectural path.

These bits depend on AccessVpIndex (0x40000003.EAX bit 6), which is
advertised by the partition-privileges change.

Sources:
  Microsoft Hypervisor Top-Level Functional Specification 7.4.5
  qemu/qemu docs/system/i386/hyperv.rst (hv-tlbflush, hv-ipi)
  Linux Documentation/virt/kvm/api.rst 8.18, 8.20

Signed-off-by: CMGS <ilskdw@gmail.com>
This commit is contained in:
CMGS
2026-06-28 22:06:07 +08:00
committed by Bo Chen
parent ba11523760
commit f8d0186a26

View File

@@ -877,7 +877,15 @@ fn required_common_cpuid_updates(
});
cpuid.push(CpuIdEntry {
function: 0x4000_0004,
eax: 1 << 5, // Recommend relaxed timing
// Recommendation hints to Hyper-V-aware guests. Bit semantics per
// Microsoft Hypervisor Top-Level Functional Specification 7.4.5.
eax: (1 << 1) // LocalTlbFlushRecommended
| (1 << 2) // RemoteTlbFlushRecommended
| (1 << 3) // ApicAccessRecommended (VP Assist page MSR EOI/ICR/TPR)
| (1 << 5) // RelaxedTimingRecommended
| (1 << 9) // DeprecatingAeoiRecommended (keeps APICv on with SynIC)
| (1 << 10), // ClusterIpiRecommended (HvCallSendSyntheticClusterIpi)
ebx: 0xfff, // Suggested spinlock retry attempts before trapping to host
..Default::default()
});
for i in 0x4000_0005..=0x4000_000a {