mirror of https://github.com/xqemu/xqemu.git
dump-guest-memory: using static DumpState, add DumpStatus
Instead of malloc/free each time for DumpState, make it static. Added DumpStatus to show status for dump. This is to be used for detached dump. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-Id: <1455772616-8668-4-git-send-email-peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
228de9cf1d
commit
baf28f57e2
21
dump.c
21
dump.c
|
@ -1442,6 +1442,14 @@ static void get_max_mapnr(DumpState *s)
|
||||||
s->max_mapnr = dump_paddr_to_pfn(s, last_block->target_end);
|
s->max_mapnr = dump_paddr_to_pfn(s, last_block->target_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DumpState dump_state_global = { .status = DUMP_STATUS_NONE };
|
||||||
|
|
||||||
|
static void dump_state_prepare(DumpState *s)
|
||||||
|
{
|
||||||
|
/* zero the struct, setting status to active */
|
||||||
|
*s = (DumpState) { .status = DUMP_STATUS_ACTIVE };
|
||||||
|
}
|
||||||
|
|
||||||
static void dump_init(DumpState *s, int fd, bool has_format,
|
static void dump_init(DumpState *s, int fd, bool has_format,
|
||||||
DumpGuestMemoryFormat format, bool paging, bool has_filter,
|
DumpGuestMemoryFormat format, bool paging, bool has_filter,
|
||||||
int64_t begin, int64_t length, Error **errp)
|
int64_t begin, int64_t length, Error **errp)
|
||||||
|
@ -1676,24 +1684,27 @@ void qmp_dump_guest_memory(bool paging, const char *file,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = g_malloc0(sizeof(DumpState));
|
s = &dump_state_global;
|
||||||
|
dump_state_prepare(s);
|
||||||
|
|
||||||
dump_init(s, fd, has_format, format, paging, has_begin,
|
dump_init(s, fd, has_format, format, paging, has_begin,
|
||||||
begin, length, &local_err);
|
begin, length, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
g_free(s);
|
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
|
s->status = DUMP_STATUS_FAILED;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) {
|
if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) {
|
||||||
create_kdump_vmcore(s, errp);
|
create_kdump_vmcore(s, &local_err);
|
||||||
} else {
|
} else {
|
||||||
create_vmcore(s, errp);
|
create_vmcore(s, &local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->status = (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED);
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
|
||||||
dump_cleanup(s);
|
dump_cleanup(s);
|
||||||
g_free(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp)
|
DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp)
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
|
|
||||||
#include "sysemu/dump-arch.h"
|
#include "sysemu/dump-arch.h"
|
||||||
#include "sysemu/memory_mapping.h"
|
#include "sysemu/memory_mapping.h"
|
||||||
|
#include "qapi-types.h"
|
||||||
|
|
||||||
typedef struct QEMU_PACKED MakedumpfileHeader {
|
typedef struct QEMU_PACKED MakedumpfileHeader {
|
||||||
char signature[16]; /* = "makedumpfile" */
|
char signature[16]; /* = "makedumpfile" */
|
||||||
|
@ -176,6 +177,7 @@ typedef struct DumpState {
|
||||||
off_t offset_page; /* offset of page part in vmcore */
|
off_t offset_page; /* offset of page part in vmcore */
|
||||||
size_t num_dumpable; /* number of page that can be dumped */
|
size_t num_dumpable; /* number of page that can be dumped */
|
||||||
uint32_t flag_compress; /* indicate the compression format */
|
uint32_t flag_compress; /* indicate the compression format */
|
||||||
|
DumpStatus status; /* current dump status */
|
||||||
} DumpState;
|
} DumpState;
|
||||||
|
|
||||||
uint16_t cpu_to_dump16(DumpState *s, uint16_t val);
|
uint16_t cpu_to_dump16(DumpState *s, uint16_t val);
|
||||||
|
|
|
@ -2218,6 +2218,24 @@
|
||||||
'*begin': 'int', '*length': 'int',
|
'*begin': 'int', '*length': 'int',
|
||||||
'*format': 'DumpGuestMemoryFormat'} }
|
'*format': 'DumpGuestMemoryFormat'} }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @DumpStatus
|
||||||
|
#
|
||||||
|
# Describe the status of a long-running background guest memory dump.
|
||||||
|
#
|
||||||
|
# @none: no dump-guest-memory has started yet.
|
||||||
|
#
|
||||||
|
# @active: there is one dump running in background.
|
||||||
|
#
|
||||||
|
# @completed: the last dump has finished successfully.
|
||||||
|
#
|
||||||
|
# @failed: the last dump has failed.
|
||||||
|
#
|
||||||
|
# Since 2.6
|
||||||
|
##
|
||||||
|
{ 'enum': 'DumpStatus',
|
||||||
|
'data': [ 'none', 'active', 'completed', 'failed' ] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @DumpGuestMemoryCapability:
|
# @DumpGuestMemoryCapability:
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue