Repository navigation
openvmm: pin the PCI transport's restore tests - #1451
Merged
Pedro Henrique Penna (ppenna) merged 2 commits intoNov 10, 2026
Merged
Conversation
#1232 requires the virtio restore contract on both transports: a restore rejects an active queue that lacks its progress before the device sees any state, and a save before the first start returns the restored queue progress and private state. Only the MMIO transport tested either for an active device. Pin cd5cd3814, which microsoft/openvmm#5016 proposes for feature/microvm/dev: one commit on a8a0e3517, the head of that branch. It adds the PCI counterparts of those two tests, and corrects the module documentation of the virtio-net saved-state tests, which still said that an inactive transport defers the device-private state until the device is activated. It changes no product code. The control-session vectors, the source excerpts, the contract versions, and the CPU profiles that nvx-rs copies from OpenVMM match the revision's. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The NVX pin moves to cd5cd3814, position 246, 115 commits past the mapped tip. Position 246, which microsoft/openvmm#5016 proposes for feature/microvm/dev on its head, a8a0e3517, is unassigned. It adds the PCI counterparts of two MMIO tests of the virtio restore: a restore whose active queue lacks its progress fails before the device sees any state, and a save before the first start returns the restored queue progress and private state. It also corrects the module documentation of the virtio-net saved-state tests, which still described the deferred restore of device-private state. The Scope also says that microsoft/openvmm#5013 merged positions 243-245. Position 246 changes only the test modules of PR13's positions 039 and 048, the first of which positions 213 and 218 also extend. On upstream main, both of its files conflict, since upstream main lacks both test modules, so it follows PR13 upstream. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues are reported for the roadmap update documenting PCI restore test coverage and its upstream dependency.
No open issues 🎉
What changed in this PR
Updates the OpenVMM roadmap to track the test-only revision that adds PCI restore coverage for #1232, without changing product behavior.
Changes:
- Records pin
cd5cd3814at position 246, 115 commits beyond the mapped tip. - Documents the PCI tests for missing active-queue progress and re-saving before first start, plus the virtio-net test documentation correction.
- Records position 246’s dependency on PR13 for upstreaming.
| File | Description |
|---|---|
doc/openvmm-upstream-roadmap.md |
Updates the pin, chain counts, and position 246 mapping with its test scope and upstream dependencies. |
Review effort: Balanced
Pedro Henrique Penna (ppenna)
deleted the
agents/issue-1232-device-restoration
branch
November 10, 2026 17:12
16 tasks
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.
Part of #1232
What and why
#1232 asks for the virtio restore contract on both the PCI and MMIO
transports, with tests of re-save, reset, and removal before the first start.
Position 039 of the microVM chain, which restores a device's private state
into the stopped device for #1232, promises two parts of that contract on both
transports: a restore rejects an enabled queue of a
DRIVER_OKdevice thatlacks its progress, before the device sees any state; and a save before the
first start returns the restored queue progress and private state. Only the
MMIO transport tested either for an active device. #1308 added the PCI
counterpart of the removal test, but not these. And the module documentation
of the virtio-net saved-state tests still described the deferred restore of
device-private state that position 039's rewrite retired. No product code is
wrong: this completes the tests and the documentation.
microsoft/openvmm#5016 is one commit on
a8a0e3517, the head offeature/microvm/dev:cd5cd3814,virtio: test PCI re-save before start and missing queue progress, addspci_restore_rejects_missing_active_queue_progressandpci_resave_before_first_start_keeps_restored_state, and corrects thevirtio-net test module's documentation. It changes only tests.
This pull request:
openvmm: pin the PCI transport's restore testsmoves the gitlink, andnothing else, from
a8a0e3517, which openvmm: pin state changes that fail instead of panicking on a lost unit #1448 pins, tocd5cd38149419c99a31564631ce6cb6e149a2a7a, the head of[DO NOT REVIEW] virtio: test PCI re-save before start and missing queue progress openvmm#5016. The control-session vectors, source excerpts,
contract versions, and CPU profiles that nvx-rs copies from OpenVMM match the
revision's.
doc: map the PCI restore tests in the OpenVMM roadmapmaps position 246 asnot yet assigned, as the roadmap maps position 213, whose tests of position
039 it extends, and moves the pin there, 115 commits past the mapped tip. It
conflicts with upstream main, which lacks both test modules, so it follows
PR13 upstream.
#1232 after this pull request
Met on
dev(705412fdd, OpenVMMa8a0e3517), as #1232's latest statuscomment records, and since then:
the host resources that it refers to, restore into the stopped device on both
virtio transports and through the chipset device workers, after the exact
unit inventory check, so a restore that cannot complete fails before any vCPU
runs, even for a VM restored paused.
generates no queue notification; removal and reset before the first start
are covered on both transports (openvmm: pin virtio-net queue starts that fail without endpoint queues #1308), and with this pull request so are a
re-save before the first start and the rejection of an active queue without
its progress.
restore (openvmm: pin virtio-net queue starts that fail without endpoint queues #1308; acceptance 3, in part).
acceptance 4, in part): each device confirms its start before the VM runs,
and virtio-net fails a queue start whose endpoint cannot create its queues.
as openvmm: drop the snapshot quiesce timeout and microsoft/openvmm#4625 #1260 decided (openvmm: pin the snapshot quiesce without a deadline #1288; acceptance 5).
acceptance 5).
terminal state (openvmm: an uncertain snapshot quiesce makes teardown or a later lifecycle request panic #1148, fixed by openvmm: pin the handling of state units in a terminal state #1435) and on a unit whose task has ended
(openvmm: stop, save, reset or restore panics if a state unit's task has exited #1363, fixed by openvmm: pin state changes that fail instead of panicking on a lost unit #1448; acceptance 5).
records state_unit: make unit start fallible and roll back partial starts openvmm#4619, #4622, and #4623 as closed in favor of openvmm: refactor device restoration onto upstream async save/restore #1232;
the command-line launch, the REPL, the management RPC's resume, and petri
report a failed resume; OpenVMM's guides and NVX's lifecycle specification
describe the confirmed start (openvmm: pin device starts confirmed before the VM runs #1316, doc: specify that a failed device start fails the VM's start #1350).
Left open, each blocked outside this repository:
virtio_net: preserve queues across pause and restore from saved cursors openvmm#4713 and virtio_net: separate vhost-user ring enable from start and stop openvmm#4729, both drafts: the retained
pause, as distinct from the stop that releases queue ownership; restore-time
reconstruction of the queue cursors; PCI and MSI-X notifications deferred
until the start; and queue progress across a pause for a virtio-net NIC
without a static identity (work items 1 to 3, acceptance 3). microVM NICs
have one, and keep their progress across a pause through position 048's
save.
3, acceptance 2). The MMIO transport still sets its interrupt line while the
VM restores.
open, and openvmm: add eager-copy snapshot restore to ttrpc RestoreVM openvmm#4676, a draft. Their resume callers must handle
the fallible resume when they land.
plumbing removed, waits on the above (work item 9, acceptance 7). The chain
stopped staging device state for activation in its v4.0 reorganization.
Outside the microVM's reach: upstream's remote chipset device proxy still
panics when its device worker ends during a stop or a reset. Only the TPM uses
a remote device worker.
Decisions:
this repository can add now. Alternative: port virtio_net: preserve queues across pause and restore from saved cursors openvmm#4713,
#4729, #4855, or #4676 into the chain. Reason: each is an upstream draft whose
contract review may still change, and porting one is a design decision for
the maintainers. Recommendation: adopt each when it lands upstream, at the
chain's next rebase, rather than port a draft.
in one OpenVMM pull request. Alternative: separate commits or stacked pull
requests, as openvmm: pin virtio-net queue starts that fail without endpoint queues #1308 used. Reason: all three align position 039's tests and
documentation with its contract, and none changes product code.
the roadmap maps position 213. Alternative: a PR13 fixup, to fold into
positions 039 and 048 at the next reorganization.
Landing order: land microsoft/openvmm#5016 first, by fast-forwarding
feature/microvm/devto the exact pinned revision,cd5cd38149419c99a31564631ce6cb6e149a2a7a, since OpenVMM's merge buttonsquashes and would leave the pin off the branch; then merge this pull request.
Validation
Locally, on Windows, OpenVMM at the pin:
cargo check,cargo clippy --all-targets,cargo doc --no-depswithRUSTDOCFLAGS=-D warnings, andcargo nextest run --profile agentfor-p virtio -p virtio_net: 226 passed and 1 skipped, without warnings;cargo xtask fmt --fixchanged nothing.longer requires the progress of an enabled
DRIVER_OKqueue(
validate_restored_state), or when a stop before the first start dropsthe restored progress of a queue that never started (
capture_stop).python scripts\local_gates.py --base origin/dev --run: test-changes (0changes to existing tests), markdown-links, test-layout, openvmm-vectors,
and openvmm-cpu-profiles passed. nvx-cli ran 2188 tests, skipping 88, and
7 subtests of two guest-script tests in
scripts/test_microvm_tests.py,test_host_loopback_allow_script_checks_publication_and_trafficandtest_private_network_ingress_script_checks_policy_and_traffic, hit their10-second limit under Git's
shon this loaded machine. They time out thesame way at
origin/devthere, and this pull request changes no script.openvmm-ci is left to CI.
python scripts\openvmm_pin.py check-branch --topicandcheck-roadmap --worktree, andpython scripts\nvx.py verify, passed.message, which was fixed before the commit was pushed.
Hosts, OpenVMM's
virtioandvirtio_nettests:a8a0e3517No microVM scenario is affected: the change has no product code, so the
openvmmbinary at the pin behaves as ata8a0e3517. Left to CI: the fullmatrix that a gitlink change selects, and openvmm-ci, which requires OpenVMM's
CI of the pin.
check_test_changes.pylists no change to existing NVX tests. In OpenVMM, onlythe module documentation of the virtio-net saved-state tests changes, and no
existing test.