Skip to content

[DO NOT REVIEW] microvm: enable governed ARM64 cold boot on WHP - #5045

Open
Gautam Ahuja (ahuja-gautam) wants to merge 3 commits into
microsoft:feature/microvm/devfrom
ahuja-gautam:openvmm-arm64-microvm-dev-20261111
Open

Gautam Ahuja (ahuja-gautam) wants to merge 3 commits into
microsoft:feature/microvm/devfrom
ahuja-gautam:openvmm-arm64-microvm-dev-20261111

Conversation

@ahuja-gautam

@ahuja-gautam Gautam Ahuja (ahuja-gautam) commented Nov 11, 2026 •

Copy link
Copy Markdown

Summary

  • Enable profile-owned ARM64/WHP microVM cold boot using the existing Image loader, device-tree, resources and devices, with fixed device/status/GIC bindings, MMIO platform control and hvc0 console. Preserve x86/Standard defaults, legacy probing, PIO and existing state/wire contracts.
  • Add governed CPU admission with actual WHP programming and effective-ID, feature-bank, PA-width and native-counter-frequency readback, retaining the PA36 profile.
  • Pair actual active guest CNTVCT_EL0 reads around host UTC sampling, rejecting changed epochs, backwards counters and pairing uncertainty above 100 us. Reuse TimeSampleSource, the existing 48-byte v1 codec and shared host-clock publisher; unknown or unrepresentable calibration/correction/error bounds remain unknown, not synchronization guarantees.

ARM support remains cold-boot only: no ARM snapshot capture or restore.

Current source

Head 6036d7ee6f56357b18f01b126b9f7463473deddf contains three linear ARM feature/verifier/report-layout commits above exact upstream 5d656d854a8daca0f23833666b0b71229fe2ab73, with no new merge commits. Its tree is 4190b02abce965455f2b15c9fa1ab78fffce223a, the verified upstream-plus-feature union.

Bounded qualification of this head

  • Native Windows ARM64 focused units: 255 passed, 0 failed, 3 ignored; 399 filtered. Windows x64 tests executed under ARM64 emulation: 35 passed, 0 failed, 0 ignored; 398 filtered, not physical-x64 WHP qualification.
  • All-target checks passed for eight affected packages on ARM64 and x64; native all-target clippy, no-dependency docs and all four full formatter passes passed. Formatting left the verified source unchanged. Packages: virt, virt_whp, openvmm_core, openvmm_entry, vmm_core, vmcore, state_unit, chipset.
  • The existing native verifier passed admission/readback plus expected unknown-profile and unsupported-hook refusals. Its success path executes no Linux guest instructions.
  • Two maintained native WHP cold cases passed: proxy-only networking (two serial 1VP VMs) and layered managed scratch/control lifecycle (one 1VP VM; one test passed, two filtered). All three VM outcomes succeeded with all seven teardown flags true. These used preserved NVX f77577b4 and historical guest inputs, not current-dev NVX qualification; no NVX source or gitlink changed.

@ahuja-gautam
Gautam Ahuja (ahuja-gautam) requested a review from a team as a code owner November 11, 2026 18:53
@github-actions github-actions Bot added Guide release-nvx Targets a branch under feature/microvm/. unsafe Related to unsafe code labels Nov 11, 2026
@github-actions

Copy link
Copy Markdown

⚠️ Unsafe Code Detected

This PR modifies files containing unsafe Rust code. Extra scrutiny is required during review.

For more on why we check whole files, instead of just diffs, check out the Rustonomicon

@ahuja-gautam

Copy link
Copy Markdown
Author

@microsoft-github-policy-service agree company="Microsoft"

@ahuja-gautam
Gautam Ahuja (ahuja-gautam) marked this pull request as draft November 11, 2026 18:59
@ahuja-gautam Gautam Ahuja (ahuja-gautam) changed the title microvm: enable governed ARM64 cold boot on WHP [DO NOT REVIEW] microvm: enable governed ARM64 cold boot on WHP Nov 11, 2026
@ahuja-gautam
Gautam Ahuja (ahuja-gautam) marked this pull request as ready for review November 11, 2026 19:07
@ppenna
Pedro Henrique Penna (ppenna) removed the request for review from a team November 11, 2026 20:01
@github-actions

Copy link
Copy Markdown

@ahuja-gautam

Gautam Ahuja (ahuja-gautam) commented Nov 12, 2026 •

Copy link
Copy Markdown
Author

Clarifying the unsafe-code notice: it scans whole modified Rust files. Relative to the rebased PR's base (5d656d85), the existing unsafe blocks and unsafe fn declarations in vm/whp/src/lib.rs and tmk/tmk_vmm/src/host_vmm.rs are unchanged; this PR adds no new unsafe blocks. The WHP additions here are safe property getters reusing the existing wrapper. The PR does add ARM ABI definitions and safe callers of those wrappers, so this is not a claim that the WHP changes need no review.

AI-authored clarification, posted at the author's request.

@github-actions

Copy link
Copy Markdown

Add the profile-owned ARM64 microVM boot, fixed device and platform-control integration using the existing loaders, device tree and shared device abstractions. Add governed ARM CPU/time admission with native WHP programming and readback, retaining the legacy fingerprint API and x86 behavior.

Keep the qualified PA36 contract and cold-boot-only boundary; ARM snapshot capture and restore remain unavailable.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Extend the existing --x-time-abi-verify lifecycle to ARM64 using one shared TimeAbiReport and the existing native admission checks. Report the selected profile, effective register checks and actual WHP address, feature-bank and counter-frequency readbacks without executing the guest. Keep x86 output compatible, reject unsupported ARM fault-injection hooks, and fail closed on missing evidence. This does not establish UTC synchronization or clock authority.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep the shared CPU/time report and sample-field conversion within the architecture-selected adapter. Restore native type and clock-status import ownership so target-branch clock changes merge without conflict, retaining one shared report and unchanged field conversion and runtime behavior. No target commits or time-policy changes are incorporated.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@ahuja-gautam
Gautam Ahuja (ahuja-gautam) force-pushed the openvmm-arm64-microvm-dev-20261111 branch from 1d6ddec to 6036d7e Compare November 12, 2026 22:12
@github-actions

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Guide release-nvx Targets a branch under feature/microvm/. unsafe Related to unsafe code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants