[shimV2] adds vpci device controller#2643
Conversation
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>
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
| guidStr := vmBusGUID.String() | ||
|
|
||
| // Host-side: add the vPCI device to the VM. | ||
| if err := c.vmVPCI.AddDevice(ctx, guidStr, settings); err != nil { |
There was a problem hiding this comment.
Why is this a guidstr? Its required to be a guid? If it needs to be a str do it in that AddDevice fn not before calling it.
| } | ||
|
|
||
| // Update the ref count to indicate the device is now assigned to the VM. | ||
| dev.refCount++ |
There was a problem hiding this comment.
Do you want a state machine here? Device is added but if wait ready fails what start are we in?
There was a problem hiding this comment.
Just invalid is good enough I guess?
There was a problem hiding this comment.
If add fails maybe mark it invalid as well and then its fine ?
There was a problem hiding this comment.
So state machine seemed excessive here. I added a field isInvalid which took care of the same. Should we consider state machine for consistency?
| } | ||
|
|
||
| // Decrement the ref count for the device. | ||
| dev.refCount-- |
There was a problem hiding this comment.
You cant decrement until success
There was a problem hiding this comment.
Just have it be that its a > 0 check for a simple -- otherwise its a do the things, and set to 0 for the last one.
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