Skip to content

Commit

Permalink
target/s390x/arch_dump: Add arch cleanup function for PV dumps
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
frankjaa authored and huth committed Nov 14, 2023
1 parent e72629e commit d12a91e
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions target/s390x/arch_dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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;
}
Expand Down

0 comments on commit d12a91e

Please sign in to comment.