From d73f27c6121f366a313505c203ce843588e279b9 Mon Sep 17 00:00:00 2001 From: Alice Frosi Date: Mon, 19 Nov 2018 09:52:48 +0000 Subject: [PATCH 1/2] test: set arch for test TestHotplugRemoveMemory The arch field needs to be set Signed-off-by: Alice Frosi --- virtcontainers/qemu_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/virtcontainers/qemu_test.go b/virtcontainers/qemu_test.go index e0b7159b4e..656d884902 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, } From 0796f2e5a076850e150d6cc18b25388af9bc5797 Mon Sep 17 00:00:00 2001 From: Alice Frosi Date: Thu, 15 Nov 2018 15:04:39 +0000 Subject: [PATCH 2/2] virtcontainers: Add function supportGuestMemoryHotplug This PR defines a new function supportGuestMemoryHotplug that clearly defines if the architecture supports memory hotplug. The function can be reimplemented in virtcontainers/qemu_$arch.go file for each architecture. Fixes: #910 Signed-off-by: Alice Frosi --- virtcontainers/qemu.go | 4 ++++ virtcontainers/qemu_arch_base.go | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/virtcontainers/qemu.go b/virtcontainers/qemu.go index 18bed3558a..e73e936991 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 b8fb5cd20c..a0f8f84e78 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 +}