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.
89 lines
3.0 KiB
89 lines
3.0 KiB
2 months ago
|
From 4d96ca893126d4c17c9fe03c76973b1d4a414f21 Mon Sep 17 00:00:00 2001
|
||
|
From: Pankaj Gupta <pankaj.gupta@amd.com>
|
||
|
Date: Thu, 30 May 2024 06:16:18 -0500
|
||
|
Subject: [PATCH 058/100] i386/sev: Move sev_launch_finish to separate class
|
||
|
method
|
||
|
|
||
|
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: [58/91] 7865710d320a6df7038ef7016d350aa9cdcea326 (bonzini/rhel-qemu-kvm)
|
||
|
|
||
|
When sev-snp-guest objects are introduced there will be a number of
|
||
|
differences in how the launch finish is handled compared to the existing
|
||
|
sev-guest object. Move sev_launch_finish() to a class method to make it
|
||
|
easier to implement SNP-specific launch update functionality later.
|
||
|
|
||
|
Signed-off-by: Pankaj Gupta <pankaj.gupta@amd.com>
|
||
|
Message-ID: <20240530111643.1091816-7-pankaj.gupta@amd.com>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit bce615a14aec07cab0488e5a242f6a91e641efcb)
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
---
|
||
|
target/i386/sev.c | 11 +++++++----
|
||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/target/i386/sev.c b/target/i386/sev.c
|
||
|
index b2aa0d6f99..28a018ed83 100644
|
||
|
--- a/target/i386/sev.c
|
||
|
+++ b/target/i386/sev.c
|
||
|
@@ -71,6 +71,7 @@ struct SevCommonStateClass {
|
||
|
|
||
|
/* public */
|
||
|
int (*launch_start)(SevCommonState *sev_common);
|
||
|
+ void (*launch_finish)(SevCommonState *sev_common);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
@@ -801,12 +802,12 @@ static Notifier sev_machine_done_notify = {
|
||
|
};
|
||
|
|
||
|
static void
|
||
|
-sev_launch_finish(SevGuestState *sev_guest)
|
||
|
+sev_launch_finish(SevCommonState *sev_common)
|
||
|
{
|
||
|
int ret, error;
|
||
|
|
||
|
trace_kvm_sev_launch_finish();
|
||
|
- ret = sev_ioctl(SEV_COMMON(sev_guest)->sev_fd, KVM_SEV_LAUNCH_FINISH, 0,
|
||
|
+ ret = sev_ioctl(sev_common->sev_fd, KVM_SEV_LAUNCH_FINISH, 0,
|
||
|
&error);
|
||
|
if (ret) {
|
||
|
error_report("%s: LAUNCH_FINISH ret=%d fw_error=%d '%s'",
|
||
|
@@ -814,7 +815,7 @@ sev_launch_finish(SevGuestState *sev_guest)
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
- sev_set_guest_state(SEV_COMMON(sev_guest), SEV_STATE_RUNNING);
|
||
|
+ sev_set_guest_state(sev_common, SEV_STATE_RUNNING);
|
||
|
|
||
|
/* add migration blocker */
|
||
|
error_setg(&sev_mig_blocker,
|
||
|
@@ -826,10 +827,11 @@ static void
|
||
|
sev_vm_state_change(void *opaque, bool running, RunState state)
|
||
|
{
|
||
|
SevCommonState *sev_common = opaque;
|
||
|
+ SevCommonStateClass *klass = SEV_COMMON_GET_CLASS(opaque);
|
||
|
|
||
|
if (running) {
|
||
|
if (!sev_check_state(sev_common, SEV_STATE_RUNNING)) {
|
||
|
- sev_launch_finish(SEV_GUEST(sev_common));
|
||
|
+ klass->launch_finish(sev_common);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
@@ -1457,6 +1459,7 @@ sev_guest_class_init(ObjectClass *oc, void *data)
|
||
|
SevCommonStateClass *klass = SEV_COMMON_CLASS(oc);
|
||
|
|
||
|
klass->launch_start = sev_launch_start;
|
||
|
+ klass->launch_finish = sev_launch_finish;
|
||
|
|
||
|
object_class_property_add_str(oc, "dh-cert-file",
|
||
|
sev_guest_get_dh_cert_file,
|
||
|
--
|
||
|
2.39.3
|
||
|
|