openvmm_entry,vmm_core: unblock and test pcie with x64 linux direct#2904
Merged
jackschefer-msft merged 2 commits intomicrosoft:mainfrom Mar 9, 2026
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR enables PCIe support for x64 Linux direct boot in OpenVMM by addressing three issues that prevented it from working: the ECAM was placed above 4GB (at 32GB) which the Linux kernel doesn't support, the legacy PCI bus conflicted with PCIe, and ACPI tables describing PCIe roots (SSDT) were not generated for the Linux direct path.
Changes:
- Moves the PCIe ECAM region below 4GB by placing it just below the low PCI MMIO range (which is itself below the platform MMIO gap), instead of at a fixed 32GB base address. Removes the now-unused
DEFAULT_PCIE_ECAM_BASEconstant. - Removes the legacy PCI bus from unenlightened Linux direct boot (
with_generic_pci_bus: false) to avoid conflicts with PCIe. - Generates ACPI SSDT tables describing PCIe root complexes in the common
build_acpi_tables_innerpath (used by Linux direct), matching what was already done for UEFI. Adds alinux_direct_x64test variant and updates PCI device parsing to use sysfs and full 24-bit class codes.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
openvmm/openvmm_defs/src/config.rs |
Removes the DEFAULT_PCIE_ECAM_BASE constant (was 32GB, above 4G) |
openvmm/openvmm_entry/src/lib.rs |
Restructures ECAM placement to be below low PCI MMIO (below 4G), removes DEFAULT_PCIE_ECAM_BASE import |
vmm_core/vm_manifest_builder/src/lib.rs |
Sets with_generic_pci_bus: false for UnenlightenedLinuxDirect; updates doc comment |
vmm_core/src/acpi_builder.rs |
Adds SSDT generation for PCIe host bridges in build_acpi_tables_inner, used by Linux direct boot |
vmm_tests/vmm_tests/tests/tests/multiarch/pcie.rs |
Adds linux_direct_x64 test variant, switches Linux PCI enumeration from lspci to sysfs, changes class_code from u16 to u32 (full 24-bit class code) |
smalis-msft
approved these changes
Mar 9, 2026
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.
This change: