On 01/04/14 15:25, Christian Borntraeger wrote: > On 01/04/14 10:33, Qiao Nuohan wrote: >> Dumping guest memory is available to specify the dump format now. This patch >> adds options '-z|-l|-s' to HMP command dump-guest-memory to specify dumping >> in >> kdump-compression format, with zlib/lzo/snappy compression. And without these >> options ELF format will be used. >> >> The discussion about this feature is here: >> >> http://lists.nongnu.org/archive/html/qemu-devel/2014-03/msg04235.html >> >> Signed-off-by: Qiao Nuohan <qiaonuo...@cn.fujitsu.com> >> Suggested-by: Christian Borntraeger <borntrae...@de.ibm.com> > > Looks good. I was able to take a zlib dump on s390.
In other words: Acked-by: Christian Borntraeger <borntrae...@de.ibm.com> > > >> --- >> hmp-commands.hx | 11 +++++++---- >> hmp.c | 25 ++++++++++++++++++++++++- >> 2 files changed, 31 insertions(+), 5 deletions(-) >> >> diff --git a/hmp-commands.hx b/hmp-commands.hx >> index f3fc514..4b9989f 100644 >> --- a/hmp-commands.hx >> +++ b/hmp-commands.hx >> @@ -998,8 +998,8 @@ ETEXI >> >> { >> .name = "dump-guest-memory", >> - .args_type = "paging:-p,filename:F,begin:i?,length:i?", >> - .params = "[-p] filename [begin] [length]", >> + .args_type = >> "paging:-p,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?", >> + .params = "[-p] [-z|-l|-s] filename [begin] [length]", >> .help = "dump guest memory to file" >> "\n\t\t\t begin(optional): the starting physical >> address" >> "\n\t\t\t length(optional): the memory size, in >> bytes", >> @@ -1008,12 +1008,15 @@ ETEXI >> >> >> STEXI >> -@item dump-guest-memory [-p] @var{protocol} @var{begin} @var{length} >> +@item dump-guest-memory [-p] [-z|-l|-s] @var{protocol} @var{begin} >> @var{length} >> @findex dump-guest-memory >> Dump guest memory to @var{protocol}. The file can be processed with crash or >> -gdb. >> +gdb. Without -z|-l|-s, the dump format is ELF. >> filename: dump file name >> paging: do paging to get guest's memory mapping >> + zlib: dump in kdump-compressed format, with zlib compression >> + lzo: dump in kdump-compressed format, with lzo compression >> + snappy: dump in kdump-compressed format, with snappy compression >> begin: the starting physical address. It's optional, and should be >> specified with length together. >> length: the memory size, in bytes. It's optional, and should be >> specified >> diff --git a/hmp.c b/hmp.c >> index 2f279c4..37c3961 100644 >> --- a/hmp.c >> +++ b/hmp.c >> @@ -1308,16 +1308,39 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict >> *qdict) >> { >> Error *errp = NULL; >> int paging = qdict_get_try_bool(qdict, "paging", 0); >> + int zlib = qdict_get_try_bool(qdict, "zlib", 0); >> + int lzo = qdict_get_try_bool(qdict, "lzo", 0); >> + int snappy = qdict_get_try_bool(qdict, "snappy", 0); >> const char *file = qdict_get_str(qdict, "filename"); >> bool has_begin = qdict_haskey(qdict, "begin"); >> bool has_length = qdict_haskey(qdict, "length"); >> - /* kdump-compressed format is not supported for HMP */ >> bool has_format = false; >> int64_t begin = 0; >> int64_t length = 0; >> enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF; >> char *prot; >> >> + if ((zlib + lzo + snappy) > 1) { >> + error_setg(&errp, "only one of '-z|-l|-s' can be set"); >> + hmp_handle_error(mon, &errp); >> + return; >> + } >> + >> + if (zlib) { >> + has_format = true; >> + dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB; >> + } >> + >> + if (lzo) { >> + has_format = true; >> + dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO; >> + } >> + >> + if (snappy) { >> + has_format = true; >> + dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY; >> + } >> + >> if (has_begin) { >> begin = qdict_get_int(qdict, "begin"); >> } >> > >