openhcl: add build that relays NVIDIA GPUs to CVM guests#3889
Draft
robertschaedler3 wants to merge 5 commits into
Draft
openhcl: add build that relays NVIDIA GPUs to CVM guests#3889robertschaedler3 wants to merge 5 commits into
robertschaedler3 wants to merge 5 commits into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an Azure Local–specific OpenHCL build configuration that expands the VPCI relay allow-list to include NVIDIA datacenter GPUs (3D controller class) and NVLink/NVSwitch fabric devices (bridge/other class), and wires this through Flowey as a new x64-cvm-azure-local IGVM recipe gated by a new azurelocal Cargo feature.
Changes:
- Add PCI subclass constant for “3D controller” (0x0302) to support class-based allow-listing.
- Introduce
azurelocalCargo feature plumbing acrossopenvmm_hcl→underhill_entry→underhill_core, enabling extra NVIDIA allow-list entries in the VPCI relay. - Add a new Flowey/
build-igvmrecipe (x64-cvm-azure-local) that builds CVM OpenHCL with theazurelocalfeature enabled.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| vm/devices/pci/pci_core/src/spec.rs | Adds Subclass::DISPLAY_CONTROLLER_3D needed for NVIDIA GPU class filtering. |
| openhcl/underhill_entry/Cargo.toml | Exposes azurelocal feature to propagate into underhill_core. |
| openhcl/underhill_core/src/worker.rs | Adds NVIDIA vendor constant and azurelocal-gated VPCI relay allow-list rules for GPU + fabric devices. |
| openhcl/underhill_core/Cargo.toml | Defines the azurelocal feature flag at the core layer. |
| openhcl/openvmm_hcl/Cargo.toml | Exposes azurelocal feature at the OpenHCL binary layer. |
| flowey/flowey_lib_hvlite/src/build_openvmm_hcl.rs | Adds OpenvmmHclFeature::AzureLocal → cargo feature name mapping. |
| flowey/flowey_lib_hvlite/src/build_openhcl_igvm_from_recipe.rs | Adds X64CvmAzureLocal recipe that enables the azurelocal OpenHCL feature. |
| flowey/flowey_lib_hvlite/src/artifact_openhcl_igvm_from_recipe.rs | Maps the new recipe to/from its artifact filename. |
| flowey/flowey_lib_hvlite/src/_jobs/local_build_igvm.rs | Adds local build output name for the new recipe. |
| flowey/flowey_hvlite/src/pipelines/build_igvm.rs | Adds build-igvm CLI enum variant and recipe mapping for x64-cvm-azure-local. |
smalis-msft
reviewed
Jul 8, 2026
…rtschaedler3/azurelocal-cgpu
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.
Adds a dedicated build that relays NVIDIA GPUs (and their NVLink fabric) through the VPCI relay to confidential VM guests, enabling confidential GPU workloads on Azure Local.
The behavior is gated behind a new
nvidia_vpci_relay_allowedcargo feature and is only compiled into a new IGVM recipe the defaultx64-cvmbuild is unchanged.Why vendor + class rather than an explicit device list?
Datacenter GPUs (H100/H200/HGX H100/H200, HGX B200/B300) are headless and enumerate as 3D controllers rather than VGA, and HGX clusters additionally expose NVSwitch devices that are PCI bridges so a single display-class filter would miss the fabric. Keying on vendor + the two relevant classes covers whole clusters while still rejecting all non-NVIDIA devices, and avoids a rebuild each time a new SKU ships.