eabdullin
214c1e4174
- target/s390x/arch_dump: Add arch cleanup function for PV dumps - target/s390x/dump: Remove unneeded dump info function pointer init
65 lines
2.2 KiB
Diff
65 lines
2.2 KiB
Diff
From d12a91e0baafce7b1cbacff7cf9339eeb0011732 Mon Sep 17 00:00:00 2001
|
|
From: Janosch Frank <frankja@linux.ibm.com>
|
|
Date: Thu, 9 Nov 2023 12:04:43 +0000
|
|
Subject: [PATCH] target/s390x/arch_dump: Add arch cleanup function for PV
|
|
dumps
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
PV dumps block vcpu runs until dump end is reached. If there's an
|
|
error between PV dump init and PV dump end the vm will never be able
|
|
to run again. One example of such an error is insufficient disk space
|
|
for the dump file.
|
|
|
|
Let's add a cleanup function that tries to do a dump end. The dump
|
|
completion data is discarded but there's no point in writing it to a
|
|
file anyway if there's a possibility that other PV dump data is
|
|
missing.
|
|
|
|
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
|
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
|
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
|
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
Message-ID: <20231109120443.185979-4-frankja@linux.ibm.com>
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
---
|
|
target/s390x/arch_dump.c | 17 +++++++++++++++++
|
|
1 file changed, 17 insertions(+)
|
|
|
|
diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
|
|
index bdb0bfa0e76e..7e8a1b4fc080 100644
|
|
--- a/target/s390x/arch_dump.c
|
|
+++ b/target/s390x/arch_dump.c
|
|
@@ -433,6 +433,22 @@ static int arch_sections_write(DumpState *s, uint8_t *buff)
|
|
return 0;
|
|
}
|
|
|
|
+static void arch_cleanup(DumpState *s)
|
|
+{
|
|
+ g_autofree uint8_t *buff = NULL;
|
|
+ int rc;
|
|
+
|
|
+ if (!pv_dump_initialized) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ buff = g_malloc(kvm_s390_pv_dmp_get_size_completion_data());
|
|
+ rc = kvm_s390_dump_completion_data(buff);
|
|
+ if (!rc) {
|
|
+ pv_dump_initialized = false;
|
|
+ }
|
|
+}
|
|
+
|
|
int cpu_get_dump_info(ArchDumpInfo *info,
|
|
const struct GuestPhysBlockList *guest_phys_blocks)
|
|
{
|
|
@@ -448,6 +464,7 @@ int cpu_get_dump_info(ArchDumpInfo *info,
|
|
info->arch_sections_add_fn = *arch_sections_add;
|
|
info->arch_sections_write_hdr_fn = *arch_sections_write_hdr;
|
|
info->arch_sections_write_fn = *arch_sections_write;
|
|
+ info->arch_cleanup_fn = *arch_cleanup;
|
|
}
|
|
return 0;
|
|
}
|