## Summary Follow-up to microsoft/openvmm#4573. Adds scalable-mode RID-based second-stage translation lookup and shared page-table validation. New scalable/A/D capabilities remain unadvertised until the later implementation stages are complete. ## Changes - Dispatch translation using the SRTP-latched table mode and resolve scalable root, context, PASID-directory and PASID-table entries from guest memory. - Support implied RID_PASID, second-stage translation and scalable pass-through without extending the DMA API. - Validate structure fields, supported widths, permissions, page sizes/alignment, checked addresses and output limits. - Preserve original requester/address information and qualified fault-suppression behavior. - Retain legacy pass-through compatibility for supported 39-bit and 48-bit AW values; unsupported encodings and address limits remain enforced. This intentionally tolerates existing guest-driver behavior while the specification still requires software to program the largest AGAW. - Add raw-memory regressions for legacy malformed entries, width boundaries, blocked DMA and fault records, including top-level SSPTPTR access reporting and architectural FI masking. ## Validation `cargo check -p intel_vtd`, `cargo clippy --all-targets -p intel_vtd`, `cargo doc --no-deps -p intel_vtd` and `cargo xtask fmt --fix` passed on the rebased branch. `cargo nextest run --profile agent -p intel_vtd`: 166 passed, none skipped. Formatting ran last. Tracking-enabled scalable translations still fail closed here until the atomic A/D stage. First-stage, extended-accessed, nested, tagged-PASID, ATS/PRI and supervisor features remain unsupported. The withdrawn unsupported-TTM fault-code proposal was not applied. ## Stack The existing fork counterpart is jakeatmicrosoft/openvmm#2. The later atomic A/D and capability-advertising drafts remain jakeatmicrosoft/openvmm#4 and jakeatmicrosoft/openvmm#6. The stack was rebased onto current upstream with unchanged PR patches and preserved backup refs. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
OpenVMM
OpenVMM is a modular, cross-platform Virtual Machine Monitor (VMM), written in Rust.
Although it can function as a traditional VMM, OpenVMM's development is currently focused on its role in the OpenHCL paravisor.
This repo is the home for both projects.
For more information, read our guide or our introductory blog post.
Getting Started
For info on how to run, build, and use OpenVMM, check out the The OpenVMM Guide.
The guide is published out of this repo via Markdown files. Please keep them up-to-date.
The maintainers of this project use Discord to collaborate with external contributors and users. Please join if you have any questions about contributing to or using OpenVMM/OpenHCL.
Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit Contributor License Agreements.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Trademarks
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.