From f9c9d8f645b0e32bc4eaefdccc999075dc7cdd33 Mon Sep 17 00:00:00 2001 From: Jianyong Wu Date: Tue, 15 Aug 2023 06:29:06 +0000 Subject: [PATCH] runtime: QemuVirt: hotadd virtio-mem dev to pcie root port Hotplug virtio-mem device to pcie root port for Qemu Virt. Fixes: #7646 Signed-off-by: Jianyong Wu --- src/runtime/virtcontainers/qemu.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index 4d3fbee69c..6c052a86a9 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -937,7 +937,17 @@ func (q *qemu) setupVirtioMem(ctx context.Context) error { } }() - err = q.qmpMonitorCh.qmp.ExecMemdevAdd(q.qmpMonitorCh.ctx, memoryBack, "virtiomem", target, sizeMB, share, "virtio-mem-pci", "virtiomem0", addr, bridge.ID) + bridgeID := bridge.ID + + // Hot add virtioMem dev to pcie-root-port for QemuVirt + machineType := q.HypervisorConfig().HypervisorMachineType + if machineType == QemuVirt { + addr = "00" + bridgeID = fmt.Sprintf("%s%d", config.PCIeRootPortPrefix, len(config.PCIeDevices[config.RootPort])) + config.PCIeDevices[config.RootPort]["virtiomem"] = true + } + + err = q.qmpMonitorCh.qmp.ExecMemdevAdd(q.qmpMonitorCh.ctx, memoryBack, "virtiomem", target, sizeMB, share, "virtio-mem-pci", "virtiomem0", addr, bridgeID) if err == nil { q.Logger().Infof("Setup %dMB virtio-mem-pci success", sizeMB) } else {