From 9ac9c120a51663fa98ef25d721c321e5d16b3859 Mon Sep 17 00:00:00 2001 From: "Xinle.Guo" Date: Sat, 26 Feb 2022 17:25:11 +0800 Subject: [PATCH] stratovirt: fix the problem that fails to plug net device In kernel, hot plug pcie device needs to sleep 100ms to avoid misoperation. Kata 1.x version agent monitor the plug event to make sure plug device success. But kata 2.x does not provide method. It may failed to get net device after plug the device. Signed-off-by: Xinle.Guo --- src/runtime/virtcontainers/stratovirt.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/runtime/virtcontainers/stratovirt.go b/src/runtime/virtcontainers/stratovirt.go index ffe8965..27b45b7 100644 --- a/src/runtime/virtcontainers/stratovirt.go +++ b/src/runtime/virtcontainers/stratovirt.go @@ -39,6 +39,7 @@ const ( iothreadID = "iothread_block" mmioBlkCount = 4 mmioNetCount = 2 + hotPlugDelayTime = 200 ) const ( @@ -1540,6 +1541,7 @@ func (s *stratovirt) hotplugNet(ctx context.Context, endpoint Endpoint, op opera if err := s.qmpMonitorCh.qmp.ExecuteNetPCIDeviceAdd(s.qmpMonitorCh.ctx, tap.ID, tap.ID, endpoint.HardwareAddr(), devAddr, bus, "", 0, false); err != nil { return err } + time.Sleep(time.Millisecond * hotPlugDelayTime) case removeDevice: if errDel := s.delDevSlot(endpoint.Name()); errDel != nil { s.Logger().WithError(errDel).Warnf("Failed to delete device slot.") @@ -1670,6 +1672,7 @@ func (s *stratovirt) hotplugVFIO(ctx context.Context, device *config.VFIODev, op if err = s.qmpMonitorCh.qmp.ExecutePCIVFIODeviceAdd(s.qmpMonitorCh.ctx, device.ID, device.BDF, devAddr, bus, ""); err != nil { return err } + time.Sleep(time.Millisecond * hotPlugDelayTime) case removeDevice: if errDel := s.delDevSlot(device.ID); errDel != nil { s.Logger().WithError(errDel).Warnf("Failed to delete device slot.") -- 2.20.1.windows.1