Skip to content

Commit

Permalink
dump-guest-memory: add "detach" flag for QMP/HMP interfaces.
Browse files Browse the repository at this point in the history
This patch only adds the interfaces, but does not implement them.
"detach" parameter is made optional, to make sure that all the old
dump-guest-memory requests will still be able to work.

Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-Id: <1455772616-8668-3-git-send-email-peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
xzpeter authored and bonzini committed Feb 22, 2016
1 parent e3517a5 commit 228de9c
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 10 deletions.
5 changes: 3 additions & 2 deletions dump.c
Expand Up @@ -1609,8 +1609,9 @@ static void dump_init(DumpState *s, int fd, bool has_format,
dump_cleanup(s);
}

void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin,
int64_t begin, bool has_length,
void qmp_dump_guest_memory(bool paging, const char *file,
bool has_detach, bool detach,
bool has_begin, int64_t begin, bool has_length,
int64_t length, bool has_format,
DumpGuestMemoryFormat format, Error **errp)
{
Expand Down
5 changes: 3 additions & 2 deletions hmp-commands.hx
Expand Up @@ -1056,10 +1056,11 @@ ETEXI

{
.name = "dump-guest-memory",
.args_type = "paging:-p,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?",
.params = "[-p] [-z|-l|-s] filename [begin length]",
.args_type = "paging:-p,detach:-d,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?",
.params = "[-p] [-d] [-z|-l|-s] filename [begin length]",
.help = "dump guest memory into file 'filename'.\n\t\t\t"
"-p: do paging to get guest's memory mapping.\n\t\t\t"
"-d: return immediately (do not wait for completion).\n\t\t\t"
"-z: dump in kdump-compressed format, with zlib compression.\n\t\t\t"
"-l: dump in kdump-compressed format, with lzo compression.\n\t\t\t"
"-s: dump in kdump-compressed format, with snappy compression.\n\t\t\t"
Expand Down
9 changes: 7 additions & 2 deletions hmp.c
Expand Up @@ -1587,8 +1587,10 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
const char *file = qdict_get_str(qdict, "filename");
bool has_begin = qdict_haskey(qdict, "begin");
bool has_length = qdict_haskey(qdict, "length");
bool has_detach = qdict_haskey(qdict, "detach");
int64_t begin = 0;
int64_t length = 0;
bool detach = false;
enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF;
char *prot;

Expand Down Expand Up @@ -1616,11 +1618,14 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
if (has_length) {
length = qdict_get_int(qdict, "length");
}
if (has_detach) {
detach = qdict_get_bool(qdict, "detach");
}

prot = g_strconcat("file:", file, NULL);

qmp_dump_guest_memory(paging, prot, has_begin, begin, has_length, length,
true, dump_format, &err);
qmp_dump_guest_memory(paging, prot, true, detach, has_begin, begin,
has_length, length, true, dump_format, &err);
hmp_handle_error(mon, &err);
g_free(prot);
}
Expand Down
8 changes: 6 additions & 2 deletions qapi-schema.json
Expand Up @@ -2195,6 +2195,9 @@
# 2. fd: the protocol starts with "fd:", and the following string
# is the fd's name.
#
# @detach: #optional if true, QMP will return immediately rather than
# waiting for the dump to finish. (since 2.6).
#
# @begin: #optional if specified, the starting physical address.
#
# @length: #optional if specified, the memory size, in bytes. If you don't
Expand All @@ -2211,8 +2214,9 @@
# Since: 1.2
##
{ 'command': 'dump-guest-memory',
'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
'*length': 'int', '*format': 'DumpGuestMemoryFormat' } }
'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
'*begin': 'int', '*length': 'int',
'*format': 'DumpGuestMemoryFormat'} }

##
# @DumpGuestMemoryCapability:
Expand Down
6 changes: 4 additions & 2 deletions qmp-commands.hx
Expand Up @@ -838,8 +838,8 @@ EQMP

{
.name = "dump-guest-memory",
.args_type = "paging:b,protocol:s,begin:i?,end:i?,format:s?",
.params = "-p protocol [begin] [length] [format]",
.args_type = "paging:b,protocol:s,detach:b?,begin:i?,end:i?,format:s?",
.params = "-p protocol [-d] [begin] [length] [format]",
.help = "dump guest memory to file",
.mhandler.cmd_new = qmp_marshal_dump_guest_memory,
},
Expand All @@ -855,6 +855,8 @@ Arguments:
- "paging": do paging to get guest's memory mapping (json-bool)
- "protocol": destination file(started with "file:") or destination file
descriptor (started with "fd:") (json-string)
- "detach": if specified, command will return immediately, without waiting
for the dump to finish (json-bool)
- "begin": the starting physical address. It's optional, and should be specified
with length together (json-int)
- "length": the memory size, in bytes. It's optional, and should be specified
Expand Down

0 comments on commit 228de9c

Please sign in to comment.