[RFC PATCH v1 17/17] hw/core/machine-qmp-cmds: shut down a CoVE guest on reset

Baolong Duan <[email protected]>
Newsgroups gmane.comp.emulators.qemu
Message-ID <[email protected]>
A TEE VM cannot be reset: the TSM destroys it and the host cannot
recreate it with the same measurement, so treat system_reset as a
shutdown request.

Changing the meaning of a QMP command like this is not acceptable as is.
QEMU already has a generic mechanism for guests that cannot be rebuilt,
qemu_system_reset_request() checks cpus_are_resettable() together with
confidential_guest_can_rebuild_state(), and using it would require CoVE
to provide a ConfidentialGuestSupport object.  This patch is included to
document the limitation and to ask whether that is the direction to
take.

Signed-off-by: Baolong Duan <[email protected]>
---
 hw/core/machine-qmp-cmds.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index e62cb4ec88..74a9274ab3 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -12,6 +12,7 @@
 #include "hw/core/boards.h"
 #include "hw/intc/intc.h"
 #include "hw/mem/memory-device.h"
+#include "hw/riscv/cove.h"
 #include "qapi/error.h"
 #include "qapi/qapi-builtin-visit.h"
 #include "qapi/qapi-commands-accelerator.h"
@@ -302,6 +303,15 @@ UuidInfo *qmp_query_uuid(Error **errp)
 
 void qmp_system_reset(Error **errp)
 {
+    /*
+     * Resetting a CoVE guest destroys the TVM, which cannot be recreated
+     * from the host, so shut the guest down instead.
+     */
+    if (riscv_cove_vm_active()) {
+        qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET);
+        return;
+    }
+
     qemu_system_reset_request(SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET);
 }
 
-- 
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.