-
Notifications
You must be signed in to change notification settings - Fork 27
Specialize CPUID 8000_001E more reasonably #961
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
discovered by a bit of a fluke: if I use |
If leaf 8000_001E is to be discarded, ensure we clear `TopologyExtensions` so that guests are not told the now-zeroed leaf is valid If leaf 8000_001E is to be kept, specialize it for each vCPU. The code that was present is mostly fine for this purpose. It is not in the list of leaves Propolis supports specializing because `propolis-server` and `propolis-standalone` unconditionally set `has_smt == true` (even for single-vCPU VMs!), which means a specialized leaf 8000_001E will fault in EDK2 on boot. The initial CPUID profile must have `TopologyExtensions` set if guests are expected to use leaf 8000_001E. This leaf has spooky action properties with Windows guests. To reiterate https://github.com/oxidecomputer/omicron/pull/9043/files#r2418399831: if `PerfCtrExtCore` is set and `TopologyExtensions` is not, Windows Server 2022 has been seen to enter an infinite loop at boot. If both bits are set, neither bit is set, or `TopologyExtensions` is set without `PerfCtrExtCore`, Windows Server 2022 appears to be fine. This (minorly) changes CPUID profiles that had included leaf 8000_001E. There is no provision for the (incorrect) CPUID profile that `propolis-{server,standalone}` could provide before, where the initial APIC ID was read as zero on all cores while having the `TopologyExtensions` bit set.
OK. I'd gotten the fluke backwards:
With I'm going to remove Ext1E from the supported topo leaves list for now, figure out the relationship between |
9f3330f
to
913f8b6
Compare
Propolis changes: * oxidecomputer/propolis#950 * oxidecomputer/propolis#952 * oxidecomputer/propolis#951 * oxidecomputer/propolis#954 * oxidecomputer/propolis#957 * oxidecomputer/propolis#960 * oxidecomputer/propolis#961 * oxidecomputer/propolis#955 Crucible changes: * oxidecomputer/crucible#1773 * oxidecomputer/crucible#1774 * oxidecomputer/crucible#1780 * oxidecomputer/crucible#1778
Propolis changes: * oxidecomputer/propolis#950 * oxidecomputer/propolis#952 * oxidecomputer/propolis#951 * oxidecomputer/propolis#954 * oxidecomputer/propolis#957 * oxidecomputer/propolis#960 * oxidecomputer/propolis#961 * oxidecomputer/propolis#955 Crucible changes: * oxidecomputer/crucible#1773 * oxidecomputer/crucible#1774 * oxidecomputer/crucible#1780 * oxidecomputer/crucible#1778 Crucible shouldn't have functional changes here, Propolis' big ones are @sunshowers' work moving Propolis to versioned APIs, plus propolis#960 turning the crank on MAXCPU. propolis#961 changes the initial Milan CPU profile one last time before the release in service of propolis#959. Propolis will clear [this bit](https://github.com/oxidecomputer/omicron/blob/d74f5e3f1ae0a378dcdb9795a0ada2426702b046/nexus/src/app/instance_platform/cpu_platform.rs#L423). Later we want to actually set up leaf 8000_001E, so after this merges I'll have a followup to remove that leaf from the inital Milan definition to keep the profile constant when `propolis-server` is smarter about the leaf.
If leaf 8000_001E is to be discarded, ensure we clear
TopologyExtensions
so that guests are not told the now-zeroed leaf is validIf leaf 8000_001E is to be kept, specialize it for each vCPU. The code that was present is fine, we just need to include it in the list of leaves that Propolis supports specializing.
The initial CPUID profile must have
TopologyExtensions
set if guests are expected to use leaf 8000_001E.This leaf has spooky action properties with Windows guests. To reiterate https://github.com/oxidecomputer/omicron/pull/9043/files#r2418399831: if
PerfCtrExtCore
is set andTopologyExtensions
is not, Windows Server 2022 has been seen to enter an infinite loop at boot. If both bits are set, neither bit is set, orTopologyExtensions
is set withoutPerfCtrExtCore
, Windows Server 2022 appears to be fine.This (minorly) changes CPUID profiles that had included leaf 8000_001E. There is no provision for the (incorrect) CPUID profile that
propolis-{server,standalone}
could provide before, where the initial APIC ID was read as zero on all cores while having theTopologyExtensions
bit set.