Skip to content

[shimV2] adds vpci device controller#2643

Open
rawahars wants to merge 1 commit intomicrosoft:mainfrom
rawahars:vpci-dev-ctrl
Open

[shimV2] adds vpci device controller#2643
rawahars wants to merge 1 commit intomicrosoft:mainfrom
rawahars:vpci-dev-ctrl

Conversation

@rawahars
Copy link
Contributor

Summary

This change adds the VPCI device controller which can be used to assign/unassign virtual PCI devices to the UVM. The same then can be assigned to the containers running in the UVM.

Changes

The package exposes a controller that handles the full lifecycle of vPCI device assignments on a UVM. When a device is assigned, the controller issues a host-side HCS call to attach the physical PCI device to the VM. For Linux guests (LCOW), it additionally notifies the GCS so the guest can wait for the required device paths to become available before any workload uses them. For Windows guests (WCOW), no guest-side notification is needed. When a device is removed, the controller tears down the host-side assignment and cleans up all associated state.

Key Design Decisions

  • Reference counting: If the same physical device is assigned multiple times, the controller reuses the existing VMBus channel and increments a reference count instead of issuing a duplicate HCS call. The device is only removed once the reference count reaches zero.
  • Invalid device state: If the host-side HCS assignment succeeds but the guest-side notification fails, the device is marked invalid. It remains tracked so the caller can still trigger host-side cleanup, preventing resource leaks.

This change adds the VPCI device controller which can be used to assign/unassign virtual PCI devices to the UVM. The same then can be assigned to the containers running in the UVM.

Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
@rawahars rawahars requested a review from a team as a code owner March 23, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant