dump-guest-memory: add "detach" flag for QMP/HMP interfaces.
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>
This commit is contained in:
parent
e3517a5299
commit
228de9cf1d
5
dump.c
5
dump.c
@ -1609,8 +1609,9 @@ cleanup:
|
|||||||
dump_cleanup(s);
|
dump_cleanup(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin,
|
void qmp_dump_guest_memory(bool paging, const char *file,
|
||||||
int64_t begin, bool has_length,
|
bool has_detach, bool detach,
|
||||||
|
bool has_begin, int64_t begin, bool has_length,
|
||||||
int64_t length, bool has_format,
|
int64_t length, bool has_format,
|
||||||
DumpGuestMemoryFormat format, Error **errp)
|
DumpGuestMemoryFormat format, Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -1056,10 +1056,11 @@ ETEXI
|
|||||||
|
|
||||||
{
|
{
|
||||||
.name = "dump-guest-memory",
|
.name = "dump-guest-memory",
|
||||||
.args_type = "paging:-p,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?",
|
.args_type = "paging:-p,detach:-d,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?",
|
||||||
.params = "[-p] [-z|-l|-s] filename [begin length]",
|
.params = "[-p] [-d] [-z|-l|-s] filename [begin length]",
|
||||||
.help = "dump guest memory into file 'filename'.\n\t\t\t"
|
.help = "dump guest memory into file 'filename'.\n\t\t\t"
|
||||||
"-p: do paging to get guest's memory mapping.\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"
|
"-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"
|
"-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"
|
"-s: dump in kdump-compressed format, with snappy compression.\n\t\t\t"
|
||||||
|
9
hmp.c
9
hmp.c
@ -1587,8 +1587,10 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
|
|||||||
const char *file = qdict_get_str(qdict, "filename");
|
const char *file = qdict_get_str(qdict, "filename");
|
||||||
bool has_begin = qdict_haskey(qdict, "begin");
|
bool has_begin = qdict_haskey(qdict, "begin");
|
||||||
bool has_length = qdict_haskey(qdict, "length");
|
bool has_length = qdict_haskey(qdict, "length");
|
||||||
|
bool has_detach = qdict_haskey(qdict, "detach");
|
||||||
int64_t begin = 0;
|
int64_t begin = 0;
|
||||||
int64_t length = 0;
|
int64_t length = 0;
|
||||||
|
bool detach = false;
|
||||||
enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF;
|
enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF;
|
||||||
char *prot;
|
char *prot;
|
||||||
|
|
||||||
@ -1616,11 +1618,14 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
|
|||||||
if (has_length) {
|
if (has_length) {
|
||||||
length = qdict_get_int(qdict, "length");
|
length = qdict_get_int(qdict, "length");
|
||||||
}
|
}
|
||||||
|
if (has_detach) {
|
||||||
|
detach = qdict_get_bool(qdict, "detach");
|
||||||
|
}
|
||||||
|
|
||||||
prot = g_strconcat("file:", file, NULL);
|
prot = g_strconcat("file:", file, NULL);
|
||||||
|
|
||||||
qmp_dump_guest_memory(paging, prot, has_begin, begin, has_length, length,
|
qmp_dump_guest_memory(paging, prot, true, detach, has_begin, begin,
|
||||||
true, dump_format, &err);
|
has_length, length, true, dump_format, &err);
|
||||||
hmp_handle_error(mon, &err);
|
hmp_handle_error(mon, &err);
|
||||||
g_free(prot);
|
g_free(prot);
|
||||||
}
|
}
|
||||||
|
@ -2195,6 +2195,9 @@
|
|||||||
# 2. fd: the protocol starts with "fd:", and the following string
|
# 2. fd: the protocol starts with "fd:", and the following string
|
||||||
# is the fd's name.
|
# 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.
|
# @begin: #optional if specified, the starting physical address.
|
||||||
#
|
#
|
||||||
# @length: #optional if specified, the memory size, in bytes. If you don't
|
# @length: #optional if specified, the memory size, in bytes. If you don't
|
||||||
@ -2211,8 +2214,9 @@
|
|||||||
# Since: 1.2
|
# Since: 1.2
|
||||||
##
|
##
|
||||||
{ 'command': 'dump-guest-memory',
|
{ 'command': 'dump-guest-memory',
|
||||||
'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
|
'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
|
||||||
'*length': 'int', '*format': 'DumpGuestMemoryFormat' } }
|
'*begin': 'int', '*length': 'int',
|
||||||
|
'*format': 'DumpGuestMemoryFormat'} }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @DumpGuestMemoryCapability:
|
# @DumpGuestMemoryCapability:
|
||||||
|
@ -838,8 +838,8 @@ EQMP
|
|||||||
|
|
||||||
{
|
{
|
||||||
.name = "dump-guest-memory",
|
.name = "dump-guest-memory",
|
||||||
.args_type = "paging:b,protocol:s,begin:i?,end:i?,format:s?",
|
.args_type = "paging:b,protocol:s,detach:b?,begin:i?,end:i?,format:s?",
|
||||||
.params = "-p protocol [begin] [length] [format]",
|
.params = "-p protocol [-d] [begin] [length] [format]",
|
||||||
.help = "dump guest memory to file",
|
.help = "dump guest memory to file",
|
||||||
.mhandler.cmd_new = qmp_marshal_dump_guest_memory,
|
.mhandler.cmd_new = qmp_marshal_dump_guest_memory,
|
||||||
},
|
},
|
||||||
@ -855,6 +855,8 @@ Arguments:
|
|||||||
- "paging": do paging to get guest's memory mapping (json-bool)
|
- "paging": do paging to get guest's memory mapping (json-bool)
|
||||||
- "protocol": destination file(started with "file:") or destination file
|
- "protocol": destination file(started with "file:") or destination file
|
||||||
descriptor (started with "fd:") (json-string)
|
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
|
- "begin": the starting physical address. It's optional, and should be specified
|
||||||
with length together (json-int)
|
with length together (json-int)
|
||||||
- "length": the memory size, in bytes. It's optional, and should be specified
|
- "length": the memory size, in bytes. It's optional, and should be specified
|
||||||
|
Loading…
Reference in New Issue
Block a user