diff mbox

[v2,2/8] dump-guest-memory: add "detach" flag for QMP/HMP interfaces.

Message ID 1448592497-2462-3-git-send-email-peterx@redhat.com
State New
Headers show

Commit Message

Peter Xu Nov. 27, 2015, 2:48 a.m. UTC
This patch only adds the interfaces, but not implements 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>
---
 dump.c           | 5 +++--
 hmp-commands.hx  | 5 +++--
 hmp.c            | 9 +++++++--
 qapi-schema.json | 8 ++++++--
 qmp-commands.hx  | 6 ++++--
 5 files changed, 23 insertions(+), 10 deletions(-)

Comments

Fam Zheng Nov. 27, 2015, 4:31 a.m. UTC | #1
On Fri, 11/27 10:48, Peter Xu wrote:
> This patch only adds the interfaces, but not implements 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>
> ---
>  dump.c           | 5 +++--
>  hmp-commands.hx  | 5 +++--
>  hmp.c            | 9 +++++++--
>  qapi-schema.json | 8 ++++++--
>  qmp-commands.hx  | 6 ++++--
>  5 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/dump.c b/dump.c
> index 445e739..d79e0ed 100644
> --- a/dump.c
> +++ b/dump.c
> @@ -1580,8 +1580,9 @@ cleanup:
>      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)
>  {
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index bb52e4d..664d794 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -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"
> diff --git a/hmp.c b/hmp.c
> index 2140605..dccb457 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -1586,8 +1586,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;
>  
> @@ -1615,11 +1617,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_try_bool(qdict, "detach", false);
> +    }
>  
>      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, has_detach, detach, has_begin, begin,
> +                          has_length, length, true, dump_format, &err);
>      hmp_handle_error(mon, &err);
>      g_free(prot);
>  }
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 8b1a423..fd81ce2 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -2115,6 +2115,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 dump to be finished (since 2.6).
> +#

Is it better to mention the related query command and events here...

>  # @begin: #optional if specified, the starting physical address.
>  #
>  # @length: #optional if specified, the memory size, in bytes. If you don't
> @@ -2131,8 +2134,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:
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 9d8b42f..bbb08e1 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -840,8 +840,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,
>      },
> @@ -857,6 +857,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 specificed, command will return immediately, without waiting
> +            for dump to be finished (json-bool)

... and here?

Fam

>  - "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
> -- 
> 2.4.3
> 
>
Peter Xu Nov. 27, 2015, 6:05 a.m. UTC | #2
On 11/27/2015 12:31 PM, Fam Zheng wrote:
> On Fri, 11/27 10:48, Peter Xu wrote:
>> This patch only adds the interfaces, but not implements 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>
>> ---
>>  dump.c           | 5 +++--
>>  hmp-commands.hx  | 5 +++--
>>  hmp.c            | 9 +++++++--
>>  qapi-schema.json | 8 ++++++--
>>  qmp-commands.hx  | 6 ++++--
>>  5 files changed, 23 insertions(+), 10 deletions(-)
>>
>> diff --git a/dump.c b/dump.c
>> index 445e739..d79e0ed 100644
>> --- a/dump.c
>> +++ b/dump.c
>> @@ -1580,8 +1580,9 @@ cleanup:
>>      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)
>>  {
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index bb52e4d..664d794 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -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"
>> diff --git a/hmp.c b/hmp.c
>> index 2140605..dccb457 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -1586,8 +1586,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;
>>  
>> @@ -1615,11 +1617,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_try_bool(qdict, "detach", false);
>> +    }
>>  
>>      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, has_detach, detach, has_begin, begin,
>> +                          has_length, length, true, dump_format, &err);
>>      hmp_handle_error(mon, &err);
>>      g_free(prot);
>>  }
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 8b1a423..fd81ce2 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -2115,6 +2115,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 dump to be finished (since 2.6).
>> +#
> 
> Is it better to mention the related query command and events here...

Yes, will add more documents in v3.

> 
>>  # @begin: #optional if specified, the starting physical address.
>>  #
>>  # @length: #optional if specified, the memory size, in bytes. If you don't
>> @@ -2131,8 +2134,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:
>> diff --git a/qmp-commands.hx b/qmp-commands.hx
>> index 9d8b42f..bbb08e1 100644
>> --- a/qmp-commands.hx
>> +++ b/qmp-commands.hx
>> @@ -840,8 +840,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,
>>      },
>> @@ -857,6 +857,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 specificed, command will return immediately, without waiting
>> +            for dump to be finished (json-bool)
> 
> ... and here?

Here too. :)

Thanks.
Peter

> 
> Fam
> 
>>  - "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
>> -- 
>> 2.4.3
>>
>>
Eric Blake Nov. 30, 2015, 6:21 p.m. UTC | #3
On 11/26/2015 07:48 PM, Peter Xu wrote:
> This patch only adds the interfaces, but not implements them.

s/not implements/does not implement/

> "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>
> ---

In addition to Fam's comments,

> +++ b/qapi-schema.json
> @@ -2115,6 +2115,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 dump to be finished (since 2.6).

s/waiting/waiting for the/
s/be finished/finish/

> +++ b/qmp-commands.hx
> @@ -840,8 +840,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,
>      },
> @@ -857,6 +857,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 specificed, command will return immediately, without waiting

s/specificed/specified/

> +            for dump to be finished (json-bool)

s/dump to be finished/the dump to finish/

>  - "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
>
Peter Xu Dec. 1, 2015, 1:28 a.m. UTC | #4
On Mon, Nov 30, 2015 at 11:21:23AM -0700, Eric Blake wrote:
> On 11/26/2015 07:48 PM, Peter Xu wrote:
> > This patch only adds the interfaces, but not implements them.
> 
> s/not implements/does not implement/
> 
> > "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>
> > ---
> 
> In addition to Fam's comments,
> 
> > +++ b/qapi-schema.json
> > @@ -2115,6 +2115,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 dump to be finished (since 2.6).
> 
> s/waiting/waiting for the/
> s/be finished/finish/
> 
> > +++ b/qmp-commands.hx
> > @@ -840,8 +840,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,
> >      },
> > @@ -857,6 +857,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 specificed, command will return immediately, without waiting
> 
> s/specificed/specified/
> 
> > +            for dump to be finished (json-bool)
> 
> s/dump to be finished/the dump to finish/

Thanks for the corrections. These errors exist in v3 too. Will fix
them in v4.

Peter

> 
> >  - "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
> > 
> 
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>
diff mbox

Patch

diff --git a/dump.c b/dump.c
index 445e739..d79e0ed 100644
--- a/dump.c
+++ b/dump.c
@@ -1580,8 +1580,9 @@  cleanup:
     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)
 {
diff --git a/hmp-commands.hx b/hmp-commands.hx
index bb52e4d..664d794 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -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"
diff --git a/hmp.c b/hmp.c
index 2140605..dccb457 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1586,8 +1586,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;
 
@@ -1615,11 +1617,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_try_bool(qdict, "detach", false);
+    }
 
     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, has_detach, detach, has_begin, begin,
+                          has_length, length, true, dump_format, &err);
     hmp_handle_error(mon, &err);
     g_free(prot);
 }
diff --git a/qapi-schema.json b/qapi-schema.json
index 8b1a423..fd81ce2 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2115,6 +2115,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 dump to be finished (since 2.6).
+#
 # @begin: #optional if specified, the starting physical address.
 #
 # @length: #optional if specified, the memory size, in bytes. If you don't
@@ -2131,8 +2134,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:
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 9d8b42f..bbb08e1 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -840,8 +840,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,
     },
@@ -857,6 +857,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 specificed, command will return immediately, without waiting
+            for dump to be finished (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