[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 17/26] migration: Stop VM after loading confidential RAM
From: |
Dov Murik |
Subject: |
[RFC PATCH 17/26] migration: Stop VM after loading confidential RAM |
Date: |
Tue, 2 Mar 2021 15:48:13 -0500 |
Register a dummy device state (EndOfConfidentialRAMState) with high
priority so it is the first device which is loaded in the target. The
post_load handler of this device stops the VM, which makes things easier
when loading devices' states which expect the VM not to be running at
the same time.
Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
---
migration/confidential-ram.h | 2 ++
migration/confidential-ram.c | 31 +++++++++++++++++++++++++++++++
softmmu/runstate.c | 1 +
target/i386/sev.c | 2 ++
4 files changed, 36 insertions(+)
diff --git a/migration/confidential-ram.h b/migration/confidential-ram.h
index 9a1027bdaf..2822c5ee3d 100644
--- a/migration/confidential-ram.h
+++ b/migration/confidential-ram.h
@@ -18,4 +18,6 @@ int cgs_mh_save_encrypted_page(QEMUFile *f, ram_addr_t
src_gpa, uint32_t size,
int cgs_mh_load_encrypted_page(QEMUFile *f, ram_addr_t dest_gpa);
+void register_end_of_confidential_ram(void);
+
#endif
diff --git a/migration/confidential-ram.c b/migration/confidential-ram.c
index 0b821af774..982cf9b874 100644
--- a/migration/confidential-ram.c
+++ b/migration/confidential-ram.c
@@ -8,6 +8,8 @@
#include "io/channel.h"
#include "qapi/error.h"
#include "exec/memory.h"
+#include "migration/vmstate.h"
+#include "sysemu/runstate.h"
#include "trace.h"
#include "confidential-ram.h"
@@ -225,3 +227,32 @@ int cgs_mh_load_encrypted_page(QEMUFile *f, ram_addr_t
dest_gpa)
}
return ret;
}
+
+typedef struct {
+ bool dummy;
+} EndOfConfidentialRAMState;
+
+static EndOfConfidentialRAMState end_of_confidential_ram_state = { .dummy =
false };
+
+static int end_of_confidential_ram_post_load(void *opaque, int version_id)
+{
+ vm_stop(RUN_STATE_INMIGRATE);
+ return 0;
+}
+
+static const VMStateDescription vmstate_end_of_confidential_ram = {
+ .name = "end-of-confidential-ram",
+ .priority = MIG_PRI_GICV3, /* TODO define new (higher) priority level */
+ .version_id = 1,
+ .post_load = end_of_confidential_ram_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_BOOL(dummy, EndOfConfidentialRAMState),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
+void register_end_of_confidential_ram(void)
+{
+ vmstate_register(NULL, 0, &vmstate_end_of_confidential_ram,
+ &end_of_confidential_ram_state);
+}
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index 2874417b61..193413246d 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -131,6 +131,7 @@ static const RunStateTransition runstate_transitions_def[]
= {
{ RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
{ RUN_STATE_RUNNING, RUN_STATE_IO_ERROR },
{ RUN_STATE_RUNNING, RUN_STATE_PAUSED },
+ { RUN_STATE_RUNNING, RUN_STATE_INMIGRATE },
{ RUN_STATE_RUNNING, RUN_STATE_FINISH_MIGRATE },
{ RUN_STATE_RUNNING, RUN_STATE_RESTORE_VM },
{ RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
diff --git a/target/i386/sev.c b/target/i386/sev.c
index 0f414df02f..da2d0cc699 100644
--- a/target/i386/sev.c
+++ b/target/i386/sev.c
@@ -33,6 +33,7 @@
#include "exec/address-spaces.h"
#include "monitor/monitor.h"
#include "exec/confidential-guest-support.h"
+#include "migration/confidential-ram.h"
#include "hw/i386/pc.h"
#define TYPE_SEV_GUEST "sev-guest"
@@ -1011,6 +1012,7 @@ static void
sev_register_types(void)
{
type_register_static(&sev_guest_info);
+ register_end_of_confidential_ram();
}
type_init(sev_register_types);
--
2.20.1
- [RFC PATCH 08/26] hw/i386: Set CPUState.aux=true for auxiliary vcpus, (continued)
- [RFC PATCH 08/26] hw/i386: Set CPUState.aux=true for auxiliary vcpus, Dov Murik, 2021/03/02
- [RFC PATCH 14/26] migration: Introduce gpa_inside_migration_helper_shared_area, Dov Murik, 2021/03/02
- [RFC PATCH 18/26] migration: Stop non-aux vcpus before copying the last pages, Dov Murik, 2021/03/02
- [RFC PATCH 25/26] target/i386: SEV: Allow migration unless there are no aux vcpus, Dov Murik, 2021/03/02
- [RFC PATCH 24/26] migration: Add start-migrate-incoming QMP command, Dov Murik, 2021/03/02
- [RFC PATCH 15/26] migration: Save confidential guest RAM using migration helper, Dov Murik, 2021/03/02
- [RFC PATCH 26/26] docs: Add confidential guest live migration documentation, Dov Murik, 2021/03/02
- [RFC PATCH 20/26] migration: When starting target, don't sync auxiliary vcpus, Dov Murik, 2021/03/02
- [RFC PATCH 05/26] hw/i386: Mark auxiliary vcpus in possible_cpus, Dov Murik, 2021/03/02
- [RFC PATCH 10/26] softmmu: Add cpu_synchronize_without_aux_post_init, Dov Murik, 2021/03/02
- [RFC PATCH 17/26] migration: Stop VM after loading confidential RAM,
Dov Murik <=
- [RFC PATCH 22/26] hw/isa/lpc_ich9: Allow updating an already-running VM, Dov Murik, 2021/03/02
- [RFC PATCH 21/26] migration: Call migration handler cleanup routines, Dov Murik, 2021/03/02
- Re: [RFC PATCH 00/26] Confidential guest live migration, no-reply, 2021/03/02
- Re: [RFC PATCH 00/26] Confidential guest live migration, Paolo Bonzini, 2021/03/04