forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.8 KiB
162 lines
4.8 KiB
4 weeks ago
|
From 0573fcd1775b6613127b1906d59d02e65f7519f3 Mon Sep 17 00:00:00 2001
|
||
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Date: Mon, 18 Mar 2024 11:07:43 -0400
|
||
|
Subject: [PATCH 021/100] target/i386: introduce x86-confidential-guest
|
||
|
|
||
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
RH-MergeRequest: 245: SEV-SNP support
|
||
|
RH-Jira: RHEL-39544
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Bandan Das <bdas@redhat.com>
|
||
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||
|
RH-Commit: [21/91] e86d3bcde7e1c2fa1ba8c9bc83e02033644f1ac0 (bonzini/rhel-qemu-kvm)
|
||
|
|
||
|
Introduce a common superclass for x86 confidential guest implementations.
|
||
|
It will extend ConfidentialGuestSupportClass with a method that provides
|
||
|
the VM type to be passed to KVM_CREATE_VM.
|
||
|
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit d82e9c843d662f13821026618aba936eda31a6c0)
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
---
|
||
|
target/i386/confidential-guest.c | 33 ++++++++++++++++++++++++++
|
||
|
target/i386/confidential-guest.h | 40 ++++++++++++++++++++++++++++++++
|
||
|
target/i386/meson.build | 2 +-
|
||
|
target/i386/sev.c | 6 ++---
|
||
|
4 files changed, 77 insertions(+), 4 deletions(-)
|
||
|
create mode 100644 target/i386/confidential-guest.c
|
||
|
create mode 100644 target/i386/confidential-guest.h
|
||
|
|
||
|
diff --git a/target/i386/confidential-guest.c b/target/i386/confidential-guest.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..b3727845ad
|
||
|
--- /dev/null
|
||
|
+++ b/target/i386/confidential-guest.c
|
||
|
@@ -0,0 +1,33 @@
|
||
|
+/*
|
||
|
+ * QEMU Confidential Guest support
|
||
|
+ *
|
||
|
+ * Copyright (C) 2024 Red Hat, Inc.
|
||
|
+ *
|
||
|
+ * Authors:
|
||
|
+ * Paolo Bonzini <pbonzini@redhat.com>
|
||
|
+ *
|
||
|
+ * This work is licensed under the terms of the GNU GPL, version 2 or
|
||
|
+ * later. See the COPYING file in the top-level directory.
|
||
|
+ *
|
||
|
+ */
|
||
|
+
|
||
|
+#include "qemu/osdep.h"
|
||
|
+
|
||
|
+#include "confidential-guest.h"
|
||
|
+
|
||
|
+OBJECT_DEFINE_ABSTRACT_TYPE(X86ConfidentialGuest,
|
||
|
+ x86_confidential_guest,
|
||
|
+ X86_CONFIDENTIAL_GUEST,
|
||
|
+ CONFIDENTIAL_GUEST_SUPPORT)
|
||
|
+
|
||
|
+static void x86_confidential_guest_class_init(ObjectClass *oc, void *data)
|
||
|
+{
|
||
|
+}
|
||
|
+
|
||
|
+static void x86_confidential_guest_init(Object *obj)
|
||
|
+{
|
||
|
+}
|
||
|
+
|
||
|
+static void x86_confidential_guest_finalize(Object *obj)
|
||
|
+{
|
||
|
+}
|
||
|
diff --git a/target/i386/confidential-guest.h b/target/i386/confidential-guest.h
|
||
|
new file mode 100644
|
||
|
index 0000000000..ca12d5a8fb
|
||
|
--- /dev/null
|
||
|
+++ b/target/i386/confidential-guest.h
|
||
|
@@ -0,0 +1,40 @@
|
||
|
+/*
|
||
|
+ * x86-specific confidential guest methods.
|
||
|
+ *
|
||
|
+ * Copyright (c) 2024 Red Hat Inc.
|
||
|
+ *
|
||
|
+ * Authors:
|
||
|
+ * Paolo Bonzini <pbonzini@redhat.com>
|
||
|
+ *
|
||
|
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||
|
+ * See the COPYING file in the top-level directory.
|
||
|
+ */
|
||
|
+#ifndef TARGET_I386_CG_H
|
||
|
+#define TARGET_I386_CG_H
|
||
|
+
|
||
|
+#include "qom/object.h"
|
||
|
+
|
||
|
+#include "exec/confidential-guest-support.h"
|
||
|
+
|
||
|
+#define TYPE_X86_CONFIDENTIAL_GUEST "x86-confidential-guest"
|
||
|
+
|
||
|
+OBJECT_DECLARE_TYPE(X86ConfidentialGuest,
|
||
|
+ X86ConfidentialGuestClass,
|
||
|
+ X86_CONFIDENTIAL_GUEST)
|
||
|
+
|
||
|
+struct X86ConfidentialGuest {
|
||
|
+ /* <private> */
|
||
|
+ ConfidentialGuestSupport parent_obj;
|
||
|
+};
|
||
|
+
|
||
|
+/**
|
||
|
+ * X86ConfidentialGuestClass:
|
||
|
+ *
|
||
|
+ * Class to be implemented by confidential-guest-support concrete objects
|
||
|
+ * for the x86 target.
|
||
|
+ */
|
||
|
+struct X86ConfidentialGuestClass {
|
||
|
+ /* <private> */
|
||
|
+ ConfidentialGuestSupportClass parent;
|
||
|
+};
|
||
|
+#endif
|
||
|
diff --git a/target/i386/meson.build b/target/i386/meson.build
|
||
|
index 7c74bfa859..8abce725f8 100644
|
||
|
--- a/target/i386/meson.build
|
||
|
+++ b/target/i386/meson.build
|
||
|
@@ -6,7 +6,7 @@ i386_ss.add(files(
|
||
|
'xsave_helper.c',
|
||
|
'cpu-dump.c',
|
||
|
))
|
||
|
-i386_ss.add(when: 'CONFIG_SEV', if_true: files('host-cpu.c'))
|
||
|
+i386_ss.add(when: 'CONFIG_SEV', if_true: files('host-cpu.c', 'confidential-guest.c'))
|
||
|
|
||
|
# x86 cpu type
|
||
|
i386_ss.add(when: 'CONFIG_KVM', if_true: files('host-cpu.c'))
|
||
|
diff --git a/target/i386/sev.c b/target/i386/sev.c
|
||
|
index c49a8fd55e..ebe36d4c10 100644
|
||
|
--- a/target/i386/sev.c
|
||
|
+++ b/target/i386/sev.c
|
||
|
@@ -35,7 +35,7 @@
|
||
|
#include "monitor/monitor.h"
|
||
|
#include "monitor/hmp-target.h"
|
||
|
#include "qapi/qapi-commands-misc-target.h"
|
||
|
-#include "exec/confidential-guest-support.h"
|
||
|
+#include "confidential-guest.h"
|
||
|
#include "hw/i386/pc.h"
|
||
|
#include "exec/address-spaces.h"
|
||
|
|
||
|
@@ -54,7 +54,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(SevGuestState, SEV_GUEST)
|
||
|
* -machine ...,memory-encryption=sev0
|
||
|
*/
|
||
|
struct SevGuestState {
|
||
|
- ConfidentialGuestSupport parent_obj;
|
||
|
+ X86ConfidentialGuest parent_obj;
|
||
|
|
||
|
/* configuration parameters */
|
||
|
char *sev_device;
|
||
|
@@ -1372,7 +1372,7 @@ sev_guest_instance_init(Object *obj)
|
||
|
|
||
|
/* sev guest info */
|
||
|
static const TypeInfo sev_guest_info = {
|
||
|
- .parent = TYPE_CONFIDENTIAL_GUEST_SUPPORT,
|
||
|
+ .parent = TYPE_X86_CONFIDENTIAL_GUEST,
|
||
|
.name = TYPE_SEV_GUEST,
|
||
|
.instance_size = sizeof(SevGuestState),
|
||
|
.instance_finalize = sev_guest_finalize,
|
||
|
--
|
||
|
2.39.3
|
||
|
|