diff --git a/virtcontainers/qemu.go b/virtcontainers/qemu.go index 18bed3558..e73e93699 100644 --- a/virtcontainers/qemu.go +++ b/virtcontainers/qemu.go @@ -1070,6 +1070,10 @@ func (q *qemu) hotplugRemoveCPUs(amount uint32) (uint32, error) { } func (q *qemu) hotplugMemory(memDev *memoryDevice, op operation) (int, error) { + + if !q.arch.supportGuestMemoryHotplug() { + return 0, fmt.Errorf("guest memory hotplug not supported") + } if memDev.sizeMB < 0 { return 0, fmt.Errorf("cannot hotplug negative size (%d) memory", memDev.sizeMB) } diff --git a/virtcontainers/qemu_arch_base.go b/virtcontainers/qemu_arch_base.go index b8fb5cd20..a0f8f84e7 100644 --- a/virtcontainers/qemu_arch_base.go +++ b/virtcontainers/qemu_arch_base.go @@ -93,6 +93,9 @@ type qemuArch interface { // handleImagePath handles the Hypervisor Config image path handleImagePath(config HypervisorConfig) + + // supportGuestMemoryHotplug returns if the guest supports memory hotplug + supportGuestMemoryHotplug() bool } type qemuArchBase struct { @@ -559,3 +562,7 @@ func (q *qemuArchBase) handleImagePath(config HypervisorConfig) { q.kernelParamsDebug = append(q.kernelParamsDebug, kernelParamsSystemdDebug...) } } + +func (q *qemuArchBase) supportGuestMemoryHotplug() bool { + return true +} diff --git a/virtcontainers/qemu_test.go b/virtcontainers/qemu_test.go index e0b7159b4..656d88490 100644 --- a/virtcontainers/qemu_test.go +++ b/virtcontainers/qemu_test.go @@ -350,6 +350,7 @@ func TestHotplugRemoveMemory(t *testing.T) { qemuConfig := newQemuConfig() fs := &filesystem{} q := &qemu{ + arch: &qemuArchBase{}, config: qemuConfig, storage: fs, }