Repository navigation
openvmm: pin amd.genoa.v2 for Genoa hosts without the TSA immunities - #935
Open
Pedro Henrique Penna (ppenna) wants to merge 2 commits into
Open
Pedro Henrique Penna (ppenna) wants to merge 2 commits into
Pedro Henrique Penna (ppenna) wants to merge 2 commits into
Conversation
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Human verification is needed because OpenVMM #4769 remains unmerged and the changed Genoa CPUID surface lacks exact-pin AMD/WHP cold-boot and restore qualification.
No open issues 🎉
What changed in this PR
Integrates the amd.genoa.v2 profile into NVX’s catalogs and guidance to support Genoa hosts whose hypervisors lack features required by v1, addressing #928 and advancing #409. Genoa qualification on MSHV and WHP remains pending.
Changes:
- Records Genoa v2 as the latest profile while preserving v1 in the Rust catalog.
- Updates catalog consistency tests and deduplicates CPU generations in CLI guidance.
- Documents profile compatibility, qualification limits, and the OpenVMM pin’s roadmap position.
| File | Description |
|---|---|
scripts/test_time_abi.py |
Tests latest-revision selection and catalog consistency across revisions. |
scripts/nvx_tools/time_abi.py |
Tracks profile revisions and selects Genoa v2. |
nvx-rs/src/host/cli/cpu_profile.rs |
Lists each CPU generation once in guidance. |
nvx-rs/src/host/cli/cpu_generations.json |
Adds Genoa v2 alongside v1. |
doc/usage.md |
Explains revision selection, compatibility, and qualification limits. |
doc/openvmm-upstream-roadmap.md |
Records the new pin and two Genoa-related commits. |
doc/ci.md |
Updates doctor documentation for latest-revision reporting. |
Review effort: Balanced
Pin microsoft/openvmm#4769 at d2338ea22c36135b468e7f3ae168066b6c9efde9, two commits on 57d0a18b3, the previous pin, which is the head of feature/microvm/dev. amd.genoa.v1 pins what the KVM of the GitHub-hosted runner that it derives from presents on an EPYC 9V74: the basic leaves up to 0x1C, and LFENCE serialization, NoSmmCtlMsr, and the TSA immunities in CPUID 0x80000021. The Microsoft hypervisor of the Azure Genoa VMs fingerprinted so far presents none of them, under nested MSHV (#409) and nested WHP (#928) alike, so every cold boot with --cpu-profile auto there fails before the guest runs: [E_PROFILE_UNSUPPORTED] the hypervisor's processor features cannot present CPU profile amd.genoa.v1: they lack tsa_l1_no_support, tsa_sq_no_support The first commit pins amd.genoa.v2, amd.genoa.v1 without them, which auto now selects on every Genoa host; amd.genoa.v1 stays pinned, so --cpu-profile amd.genoa.v1 still selects it and its snapshots still restore. The second records the WHP host of #928 and tests that amd.genoa.v2 serves it as pinned. NVX's two copies of the catalog assumed one profile per generation. nvx-rs/src/host/cli/cpu_generations.json, which copies the identity of every pinned profile, gains amd.genoa.v2, and nvx-rs run's guidance lists each generation that the built-in profiles cover once. scripts/nvx_tools/time_abi.py's copy records the latest revision of each generation's profile, which doctor reports without OpenVMM, and its test compares every revision with the pinned profiles. doc/usage.md and doc/ci.md name amd.genoa.v2 as Genoa's profile. Fixes #928 Part of #409 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Record the two commits that the previous commit pins as positions 348 and 349 of the microVM chain, and move the NVX pin to d2338ea22. Position 348 pins amd.genoa.v2, a second revision of the Genoa CPU profile that position 282 pins, and makes CPUID 0x80000008 EDX a limit of the derivation policy of positions 159-269. Position 349 records the nested-WHP Genoa host that amd.genoa.v2 serves as a test fixture. They add to the CPU profile work that no PR maps yet rather than fix mapped work, so they join positions 158-333, 341-343, 346, and 347 as unassigned. Add them to the chain and to the table of the commits after the mapped tip, and extend the scope. The pin is now 192 commits past the mapped tip. Positions 346 and 347 are no longer only a proposal: microsoft/openvmm#4767 merged them, so position 347, 57d0a18b3, is the head of feature/microvm/dev. Say so in the scope, and name microsoft/openvmm#4769 as the proposal of positions 348 and 349. Part of #928 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pedro Henrique Penna (ppenna)
force-pushed
the
agents/check-nvx-issue-928-status
branch
from
October 27, 2026 21:57
a538571 to
3be6590
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #928
Part of #409
Pins microsoft/openvmm#4769 at
d2338ea22c36135b468e7f3ae168066b6c9efde9, two commits on57d0a18b3, the previous pin, which is the head offeature/microvm/dev. It addsamd.genoa.v2, a second revision of the Genoa CPU profile, which--cpu-profile autoselects on every Genoa host, so the Azure Genoa VMs whose Microsoft hypervisor cannot presentamd.genoa.v1cold-boot on a built-in profile.Why
amd.genoa.v1pins what the KVM of the GitHub-hosted runner that it derives from presents on an EPYC 9V74: the basic leaves up to0x1c, andLFENCEserialization, NoSmmCtlMsr, and the TSA immunities in CPUID0x80000021. The Microsoft hypervisor of the Azure Genoa VMs fingerprinted so far presents none of them, under nested MSHV (#409,Standard_D64als_v6) and nested WHP (#928,Standard_D8ads_v5) alike, so every cold boot withautothere fails before the guest runs:amd.genoa.v2isamd.genoa.v1without them (sha256:8ee00e9e…), derived from the runner's KVM fingerprint and the #409 MSHV host's. Its Linux guests report TSA as vulnerable, asamd.milan.v1's do.amd.genoa.v1stays pinned, so--cpu-profile amd.genoa.v1still selects it and its snapshots still restore. Against the #928 fingerprint,amd.genoa.v2passes the cold boot's processor-feature check and has no CPUID violation; the two CET XSAVE subleaves that the fingerprint's probe partition shows are read on a partition configured from the profile, as foramd.milan.v1on the Azure WHP host whose processor features this host's WHP offers exactly. microsoft/openvmm#4769 records that host as a test fixture.Changes
openvmm: pin amd.genoa.v2 for Genoa hosts without the TSA immunities(d2d1971f5): the gitlink, and the coordinated changes that the new profile revision needs, since NVX's two copies of the catalog assumed one profile per generation:nvx-rs/src/host/cli/cpu_generations.json, which copies the identity of every pinned profile, gainsamd.genoa.v2, andnvx-rs run's guidance lists each generation that the built-in profiles cover once.scripts/nvx_tools/time_abi.py's copy records the latest revision of each generation's profile (CpuGeneration.revision, which takes no part in comparisons), whichdoctor --no-openvmmreports, andtest_the_catalog_copy_matches_openvmm_pinned_profilescompares every revision with the pinned profiles.doc/usage.mdanddoc/ci.mdnameamd.genoa.v2as Genoa's profile.doc: map the Genoa profile revision in the OpenVMM roadmap(3be659044): positions 348 and 349, unassigned like 341-343, 346, and 347, and the new pin, now 192 commits past the mapped tip; [DONT REVIEW] microVM: let a platform restore install a new network policy on a NIC template openvmm#4767 merged positions 346 and 347.Not in scope: Turin, whose
amd.turin.v1pins the same maximum basic leaf and0x80000021values and likely fails the same way on these hypervisors (unverified), and the qualification of Genoa hosts on MSHV and WHP withdoctorandtest-microvm, which needs AMD hosts that CI lacks.Dependency
57d0a18b3; this PR pins its head,d2338ea22, itself (treecd7a694ba56bff4fe3b024056141128c12fc6f85), so no equivalence argument is needed. Both OpenVMM commits carry good signatures. Merge this PR only after #4769 lands onfeature/microvm/devwith these commits; if its merge rewrites them, this PR's pin must move to the merged revision.Validation
NVX head submitted to CI:
3be659044c418f8dffef156539175cccab180c6d, directly ondevatb65df4781.microsoft/openvmm#4767 and #931 landed while this PR waited, so both PRs were rebased. OpenVMM's two commits moved from
e68871cc6to57d0a18b3(b61b4b363becamed2338ea22);git range-diffshows identical patches, and only the first commit's port note changed, to name the new base. This PR's commits were rebuilt onb65df4781: the promotion commit differs from its first revision only in the gitlink and its message's pin paragraph, and the roadmap commit numbers OpenVMM's commits 348 and 349, after #931's 346 and 347.d2338ea22on Windows with Rust 1.95.0, and before the rebase atb61b4b363:cargo clippy --all-targets -p cpu_profile -p virt_whp -- -D warnings,cargo doc --no-depsfor both with-D warnings,cargo nextest run --profile agent -p cpu_profile -p virt_whp(162 passed, 17 skipped), andcargo xtask fmt --fix(clean). OpenVMM'scheck_fingerprintexample reproduces CPU profile: Standard_D8ads_v5 / EPYC 9V74 fails amd.genoa.v1 on WHP #928's failure exactly ate68871cc6.openvmm_vectorspasses unchanged, andopenvmm_cpu_profilesandtest_the_catalog_copy_matches_openvmm_pinned_profilesfailed on the bare gitlink and pass with the coordinated changes.a5385715aon612d2ff31, whose code changes this head repeats unchanged:check-quality's Python and Markdown checks:ruff check,ruff format --check,pyrightfor Linux and Windows, andcheck_markdown_links.py.validate-nvx's Windows steps:compileall, the unittest list (1,365 tests),test_adversarial.py,test_hosts.py, andnvx.py verify. All pass except seven tests oftest_setup_azureandtest_microvm_teststhat run Linux shell scripts under Git Bash on this host; they fail identically at the base2d56df65f.check-nvx-rs's steps that run on Windows:cargo fmt --check, the three Clippy configurations, the tests with all, default, and no features,cargo docwith-D warnings, the MSRV check with 1.89, and the runtime adapter's protocol-only and host-only configurations.3be659044:nvx.py verify,ruff check,ruff format --check,pyrightfor Linux and Windows,check_markdown_links.py,test_time_abi.py(70 tests),test_nvx_tools.py's benchmark, CPU-profile, and doctor tests (28),openvmm_cpu_profiles,openvmm_vectors,nvx-rs'scpu_profiletests, andcargo fmt --check.amd.genoa.v2; CPU profile: Standard_D8ads_v5 / EPYC 9V74 fails amd.genoa.v1 on WHP #928's reporter is asked to qualify their host.