mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
dump-guest-memory: add "detach" support
If "detach" is provided, one thread is created to do the dump work, while main thread will return immediately. For each GuestPhysBlock, adding one more field "mr" to points to MemoryRegion that it belongs, also ref the mr before use. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-Id: <1455772616-8668-8-git-send-email-peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
63e27f28f2
commit
1fbeff72c2
4 changed files with 34 additions and 1 deletions
27
dump.c
27
dump.c
|
|
@ -1643,6 +1643,20 @@ static void dump_process(DumpState *s, Error **errp)
|
|||
dump_cleanup(s);
|
||||
}
|
||||
|
||||
static void *dump_thread(void *data)
|
||||
{
|
||||
Error *err = NULL;
|
||||
DumpState *s = (DumpState *)data;
|
||||
|
||||
dump_process(s, &err);
|
||||
|
||||
if (err) {
|
||||
/* TODO: notify user the error */
|
||||
error_free(err);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void qmp_dump_guest_memory(bool paging, const char *file,
|
||||
bool has_detach, bool detach,
|
||||
bool has_begin, int64_t begin, bool has_length,
|
||||
|
|
@ -1653,6 +1667,7 @@ void qmp_dump_guest_memory(bool paging, const char *file,
|
|||
int fd = -1;
|
||||
DumpState *s;
|
||||
Error *local_err = NULL;
|
||||
bool detach_p = false;
|
||||
|
||||
if (runstate_check(RUN_STATE_INMIGRATE)) {
|
||||
error_setg(errp, "Dump not allowed during incoming migration.");
|
||||
|
|
@ -1684,6 +1699,9 @@ void qmp_dump_guest_memory(bool paging, const char *file,
|
|||
error_setg(errp, QERR_MISSING_PARAMETER, "begin");
|
||||
return;
|
||||
}
|
||||
if (has_detach) {
|
||||
detach_p = detach;
|
||||
}
|
||||
|
||||
/* check whether lzo/snappy is supported */
|
||||
#ifndef CONFIG_LZO
|
||||
|
|
@ -1733,7 +1751,14 @@ void qmp_dump_guest_memory(bool paging, const char *file,
|
|||
return;
|
||||
}
|
||||
|
||||
dump_process(s, errp);
|
||||
if (detach_p) {
|
||||
/* detached dump */
|
||||
qemu_thread_create(&s->dump_thread, "dump_thread", dump_thread,
|
||||
s, QEMU_THREAD_DETACHED);
|
||||
} else {
|
||||
/* sync dump */
|
||||
dump_process(s, errp);
|
||||
}
|
||||
}
|
||||
|
||||
DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue