From 8939b0f8e0b57631841f6412a2c568e381392a2a Mon Sep 17 00:00:00 2001 From: Julio Montes Date: Fri, 14 Jan 2022 13:11:03 -0600 Subject: [PATCH] qemu: add support for SGX Define and implement memory-backend-epc object Signed-off-by: Julio Montes --- qemu/qemu.go | 16 ++++++++++++++++ qemu/qemu_test.go | 13 +++++++++++++ 2 files changed, 29 insertions(+) diff --git a/qemu/qemu.go b/qemu/qemu.go index f6db8481d3..c43ff57955 100644 --- a/qemu/qemu.go +++ b/qemu/qemu.go @@ -234,6 +234,9 @@ const ( // MemoryBackendFile represents a guest memory mapped file. MemoryBackendFile ObjectType = "memory-backend-file" + // MemoryBackendEPC represents a guest memory backend EPC for SGX. + MemoryBackendEPC ObjectType = "memory-backend-epc" + // TDXGuest represents a TDX object TDXGuest ObjectType = "tdx-guest" @@ -283,6 +286,9 @@ type Object struct { // ReadOnly specifies whether `MemPath` is opened read-only or read/write (default) ReadOnly bool + + // Prealloc enables memory preallocation + Prealloc bool } // Valid returns true if the Object structure is valid and complete. @@ -290,6 +296,8 @@ func (object Object) Valid() bool { switch object.Type { case MemoryBackendFile: return object.ID != "" && object.MemPath != "" && object.Size != 0 + case MemoryBackendEPC: + return object.ID != "" && object.Size != 0 case TDXGuest: return object.ID != "" && object.File != "" && object.DeviceID != "" case SEVGuest: @@ -326,6 +334,14 @@ func (object Object) QemuParams(config *Config) []string { objectParams = append(objectParams, "readonly=on") deviceParams = append(deviceParams, "unarmed=on") } + case MemoryBackendEPC: + objectParams = append(objectParams, string(object.Type)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("size=%d", object.Size)) + if object.Prealloc { + objectParams = append(objectParams, "prealloc=on") + } + case TDXGuest: objectParams = append(objectParams, string(object.Type)) objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) diff --git a/qemu/qemu_test.go b/qemu/qemu_test.go index e423661544..2e37b0e166 100644 --- a/qemu/qemu_test.go +++ b/qemu/qemu_test.go @@ -144,6 +144,19 @@ func TestAppendDeviceNVDIMM(t *testing.T) { testAppend(object, deviceNVDIMMString, t) } +var objectEPCString = "-object memory-backend-epc,id=epc0,size=65536,prealloc=on" + +func TestAppendEPCObject(t *testing.T) { + object := Object{ + Type: MemoryBackendEPC, + ID: "epc0", + Size: 1 << 16, + Prealloc: true, + } + + testAppend(object, objectEPCString, t) +} + func TestAppendDeviceFS(t *testing.T) { fsdev := FSDevice{ Driver: Virtio9P,