Merge pull request #11289 from BbolroC/fix-vfio-coldplug

runtime: Preserve hotplug devices for vfio-coldplug mode
This commit is contained in:
Fabiano Fidêncio 2025-05-21 09:48:25 +02:00 committed by GitHub
commit 6c9b199ef1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -860,7 +860,7 @@ func (c *Container) createDevices(contConfig *ContainerConfig) error {
hotPlugVFIO := (c.sandbox.config.HypervisorConfig.HotPlugVFIO != config.NoPort)
hotPlugDevices := []config.DeviceInfo{}
coldPlugDevices := []config.DeviceInfo{}
vfioColdPlugDevices := []config.DeviceInfo{}
for i, vfio := range deviceInfos {
// If device is already attached during sandbox creation, e.g.
@ -889,7 +889,7 @@ func (c *Container) createDevices(contConfig *ContainerConfig) error {
// Device is already cold-plugged at sandbox creation time
// ignore it for the container creation
if coldPlugVFIO && isVFIODevice {
coldPlugDevices = append(coldPlugDevices, deviceInfos[i])
vfioColdPlugDevices = append(vfioColdPlugDevices, deviceInfos[i])
continue
}
hotPlugDevices = append(hotPlugDevices, deviceInfos[i])
@ -904,7 +904,9 @@ func (c *Container) createDevices(contConfig *ContainerConfig) error {
// if vfio_mode is VFIO and coldPlugVFIO is true (e.g. vfio-ap-cold).
// This ensures that ociSpec.Linux.Devices is updated with
// this information before the container is created on the guest.
deviceInfos = sortContainerVFIODevices(coldPlugDevices)
sortedVFIODevices := sortContainerVFIODevices(vfioColdPlugDevices)
// Combine sorted VFIO devices with hot-plug devices
deviceInfos = append(sortedVFIODevices, hotPlugDevices...)
} else {
deviceInfos = sortContainerVFIODevices(hotPlugDevices)
}
@ -927,7 +929,7 @@ func (c *Container) createDevices(contConfig *ContainerConfig) error {
// If we're hot-plugging this will be a no-op because at this stage
// no devices are attached to the root-port or switch-port
c.annotateContainerWithVFIOMetadata(coldPlugDevices)
c.annotateContainerWithVFIOMetadata(vfioColdPlugDevices)
return nil
}