diff mbox

[v5,3/6] BitmapLog: get the information about the parameters

Message ID 1406862751-24008-4-git-send-email-sanidhya.iiith@gmail.com
State New
Headers show

Commit Message

Sanidhya Kashyap Aug. 1, 2014, 3:12 a.m. UTC
No functional change except the variable name.

Signed-off-by: Sanidhya Kashyap <sanidhya.iiith@gmail.com>
---
 hmp-commands.hx  |  2 ++
 hmp.c            | 19 +++++++++++++++++++
 hmp.h            |  1 +
 monitor.c        |  7 +++++++
 qapi-schema.json | 28 ++++++++++++++++++++++++++++
 qmp-commands.hx  | 25 +++++++++++++++++++++++++
 savevm.c         | 17 +++++++++++++++++
 7 files changed, 99 insertions(+)

Comments

Dr. David Alan Gilbert Aug. 12, 2014, 11:20 a.m. UTC | #1
* Sanidhya Kashyap (sanidhya.iiith@gmail.com) wrote:
> No functional change except the variable name.
> 
> Signed-off-by: Sanidhya Kashyap <sanidhya.iiith@gmail.com>
> ---
>  hmp-commands.hx  |  2 ++
>  hmp.c            | 19 +++++++++++++++++++
>  hmp.h            |  1 +
>  monitor.c        |  7 +++++++
>  qapi-schema.json | 28 ++++++++++++++++++++++++++++
>  qmp-commands.hx  | 25 +++++++++++++++++++++++++
>  savevm.c         | 17 +++++++++++++++++
>  7 files changed, 99 insertions(+)
> 
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 30b553e..dca65bc 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1780,6 +1780,8 @@ show qdev device model list
>  show roms
>  @item info tpm
>  show the TPM device
> +@item info log_dirty_bitmap
> +show the current parameters values
>  @end table
>  ETEXI
>  
> diff --git a/hmp.c b/hmp.c
> index d067420..0a8831b 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -1732,3 +1732,22 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
>  
>      monitor_printf(mon, "\n");
>  }
> +
> +void hmp_info_log_dirty_bitmap(Monitor *mon, const QDict *qdict)
> +{
> +    Error *err = NULL;
> +    BitmapLogStateInfo *info = qmp_query_log_dirty_bitmap(&err);
> +
> +    if (info) {
> +        monitor_printf(mon, "current iteration: %ld\n",
> +                       info->current_iteration);
> +        monitor_printf(mon, "total iterations: %ld\n", info->iterations);
> +        monitor_printf(mon, "current period value: %ld\n", info->period);

I think you need to use the PRId64 macros there rather than %ld; because long
is not always 64bits (there are some other uses in hmp.c)

> +    }
> +
> +    if (err) {
> +        hmp_handle_error(mon, &err);
> +    }
> +
> +    qapi_free_BitmapLogStateInfo(info);
> +}
> diff --git a/hmp.h b/hmp.h
> index 0895182..02e8ee4 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -38,6 +38,7 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict);
>  void hmp_info_pci(Monitor *mon, const QDict *qdict);
>  void hmp_info_block_jobs(Monitor *mon, const QDict *qdict);
>  void hmp_info_tpm(Monitor *mon, const QDict *qdict);
> +void hmp_info_log_dirty_bitmap(Monitor *mon, const QDict *qdict);
>  void hmp_quit(Monitor *mon, const QDict *qdict);
>  void hmp_stop(Monitor *mon, const QDict *qdict);
>  void hmp_system_reset(Monitor *mon, const QDict *qdict);
> diff --git a/monitor.c b/monitor.c
> index 5bc70a6..5f20f72 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2918,6 +2918,13 @@ static mon_cmd_t info_cmds[] = {
>          .mhandler.cmd = hmp_info_memdev,
>      },
>      {
> +        .name       = "log_dirty_bitmap",
> +        .args_type  = "",
> +        .params     = "",
> +        .help       = "show the current parameters values",
> +        .mhandler.cmd = hmp_info_log_dirty_bitmap,
> +    },
> +    {
>          .name       = NULL,
>      },
>  };
> diff --git a/qapi-schema.json b/qapi-schema.json
> index dced3c2..6aac367 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -3515,3 +3515,31 @@
>    'data'    : { 'filename'      : 'str',
>                  '*iterations'   : 'int',
>                  '*period'       : 'int' } }
> +##
> +# @BitmapLogStateInfo
> +#
> +# Provides information for the bitmap logging process
> +#
> +# @current-iteration: stores current iteration value
> +#
> +# @iterations: total iterations value
> +#
> +# @period: the time difference in milliseconds between each iteration
> +#
> +# Since 2.2
> +##
> +{ 'type': 'BitmapLogStateInfo',
> +  'data': { 'current-iteration' : 'int',
> +            'iterations'        : 'int',
> +            'period'            : 'int' } }
> +
> +##
> +# @query-log-dirty-bitmap
> +#
> +# Get the current values of the parameters involved in bitmap logging process
> +#
> +# This command returns the BitmapLogStateInfo
> +#
> +# Since 2.2
> +##
> +{ 'command': 'query-log-dirty-bitmap', 'returns': 'BitmapLogStateInfo' }
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 2ead2ca..e79ed6a 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -3789,3 +3789,28 @@ Examples:
>  Note: The iterations, and period parameters are optional. iterations default
>  value is 3 while that of period is 10.
>  EQMP
> +
> +    {
> +        .name       = "query-log-dirty-bitmap",
> +        .args_type  = "",
> +        .mhandler.cmd_new = qmp_marshal_input_query_log_dirty_bitmap,
> +    },
> +
> +SQMP
> +query-log-dirty-bitmap
> +----------------------
> +
> +Get the parameters information
> +
> +- "current-iteration": stores current iteration value
> +- "iterations": total iterations value
> +- "period": the time difference in milliseconds between each iteration
> +
> +Example:
> +
> +-> { "execute": "query-log-dirty-bitmap" }
> +<- { "return": {
> +            "current-iteration": 3
> +            "iterations": 10
> +            "period": 100 } }
> +EQMP
> diff --git a/savevm.c b/savevm.c
> index 125e5ed..22e84fe 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -1515,6 +1515,23 @@ void qmp_log_dirty_bitmap(const char *filename, bool has_iterations,
>      return;
>  }
>  
> +BitmapLogStateInfo *qmp_query_log_dirty_bitmap(Error **errp)
> +{
> +    BitmapLogState *b = log_bitmap_get_current_state();
> +    BitmapLogStateInfo *info = NULL;
> +
> +    if (b->state != LOG_BITMAP_STATE_ACTIVE) {
> +        return info;
> +    }
> +
> +    info = g_malloc0(sizeof(BitmapLogStateInfo));
> +    info->current_iteration = b->current_iteration;
> +    info->iterations = b->iterations;
> +    info->period = b->current_period;
> +
> +    return info;
> +}
> +
>  void qmp_xen_save_devices_state(const char *filename, Error **errp)
>  {
>      QEMUFile *f;
> -- 
> 1.9.3
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Eric Blake Aug. 12, 2014, 1:53 p.m. UTC | #2
On 07/31/2014 09:12 PM, Sanidhya Kashyap wrote:
> No functional change except the variable name.

This comment feels more like it is a changelog of what is different from
v4.  If so, it belongs...

> 
> Signed-off-by: Sanidhya Kashyap <sanidhya.iiith@gmail.com>
> ---

...here, after the --- separator.  It makes no sense in isolation in
qemu.git (where v1 through v4 do not appear), but is there only to aid
reviewers on list (who DO see prior versions, and want to see if you
took into account earlier review comments).


> +    if (info) {
> +        monitor_printf(mon, "current iteration: %ld\n",
> +                       info->current_iteration);

Won't compile on 32-bit.  Per patch 2/6, info->current_iteration is
int64_t, but %ld might be 32-bit.  Furthermore, patch 2/6 had an
(arbitrary?) limit of 100,000 as the maximum iteration request, which
fits in a 32-bit value to begin with, so using int64_t to hold the value
is overkill.


> +Example:
> +
> +-> { "execute": "query-log-dirty-bitmap" }
> +<- { "return": {
> +            "current-iteration": 3
> +            "iterations": 10
> +            "period": 100 } }

That's not valid JSON.  You are missing two commas.  It's best to paste
an actual QMP result, rather than trying to write it by hand.
diff mbox

Patch

diff --git a/hmp-commands.hx b/hmp-commands.hx
index 30b553e..dca65bc 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1780,6 +1780,8 @@  show qdev device model list
 show roms
 @item info tpm
 show the TPM device
+@item info log_dirty_bitmap
+show the current parameters values
 @end table
 ETEXI
 
diff --git a/hmp.c b/hmp.c
index d067420..0a8831b 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1732,3 +1732,22 @@  void hmp_info_memdev(Monitor *mon, const QDict *qdict)
 
     monitor_printf(mon, "\n");
 }
+
+void hmp_info_log_dirty_bitmap(Monitor *mon, const QDict *qdict)
+{
+    Error *err = NULL;
+    BitmapLogStateInfo *info = qmp_query_log_dirty_bitmap(&err);
+
+    if (info) {
+        monitor_printf(mon, "current iteration: %ld\n",
+                       info->current_iteration);
+        monitor_printf(mon, "total iterations: %ld\n", info->iterations);
+        monitor_printf(mon, "current period value: %ld\n", info->period);
+    }
+
+    if (err) {
+        hmp_handle_error(mon, &err);
+    }
+
+    qapi_free_BitmapLogStateInfo(info);
+}
diff --git a/hmp.h b/hmp.h
index 0895182..02e8ee4 100644
--- a/hmp.h
+++ b/hmp.h
@@ -38,6 +38,7 @@  void hmp_info_balloon(Monitor *mon, const QDict *qdict);
 void hmp_info_pci(Monitor *mon, const QDict *qdict);
 void hmp_info_block_jobs(Monitor *mon, const QDict *qdict);
 void hmp_info_tpm(Monitor *mon, const QDict *qdict);
+void hmp_info_log_dirty_bitmap(Monitor *mon, const QDict *qdict);
 void hmp_quit(Monitor *mon, const QDict *qdict);
 void hmp_stop(Monitor *mon, const QDict *qdict);
 void hmp_system_reset(Monitor *mon, const QDict *qdict);
diff --git a/monitor.c b/monitor.c
index 5bc70a6..5f20f72 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2918,6 +2918,13 @@  static mon_cmd_t info_cmds[] = {
         .mhandler.cmd = hmp_info_memdev,
     },
     {
+        .name       = "log_dirty_bitmap",
+        .args_type  = "",
+        .params     = "",
+        .help       = "show the current parameters values",
+        .mhandler.cmd = hmp_info_log_dirty_bitmap,
+    },
+    {
         .name       = NULL,
     },
 };
diff --git a/qapi-schema.json b/qapi-schema.json
index dced3c2..6aac367 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3515,3 +3515,31 @@ 
   'data'    : { 'filename'      : 'str',
                 '*iterations'   : 'int',
                 '*period'       : 'int' } }
+##
+# @BitmapLogStateInfo
+#
+# Provides information for the bitmap logging process
+#
+# @current-iteration: stores current iteration value
+#
+# @iterations: total iterations value
+#
+# @period: the time difference in milliseconds between each iteration
+#
+# Since 2.2
+##
+{ 'type': 'BitmapLogStateInfo',
+  'data': { 'current-iteration' : 'int',
+            'iterations'        : 'int',
+            'period'            : 'int' } }
+
+##
+# @query-log-dirty-bitmap
+#
+# Get the current values of the parameters involved in bitmap logging process
+#
+# This command returns the BitmapLogStateInfo
+#
+# Since 2.2
+##
+{ 'command': 'query-log-dirty-bitmap', 'returns': 'BitmapLogStateInfo' }
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 2ead2ca..e79ed6a 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3789,3 +3789,28 @@  Examples:
 Note: The iterations, and period parameters are optional. iterations default
 value is 3 while that of period is 10.
 EQMP
+
+    {
+        .name       = "query-log-dirty-bitmap",
+        .args_type  = "",
+        .mhandler.cmd_new = qmp_marshal_input_query_log_dirty_bitmap,
+    },
+
+SQMP
+query-log-dirty-bitmap
+----------------------
+
+Get the parameters information
+
+- "current-iteration": stores current iteration value
+- "iterations": total iterations value
+- "period": the time difference in milliseconds between each iteration
+
+Example:
+
+-> { "execute": "query-log-dirty-bitmap" }
+<- { "return": {
+            "current-iteration": 3
+            "iterations": 10
+            "period": 100 } }
+EQMP
diff --git a/savevm.c b/savevm.c
index 125e5ed..22e84fe 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1515,6 +1515,23 @@  void qmp_log_dirty_bitmap(const char *filename, bool has_iterations,
     return;
 }
 
+BitmapLogStateInfo *qmp_query_log_dirty_bitmap(Error **errp)
+{
+    BitmapLogState *b = log_bitmap_get_current_state();
+    BitmapLogStateInfo *info = NULL;
+
+    if (b->state != LOG_BITMAP_STATE_ACTIVE) {
+        return info;
+    }
+
+    info = g_malloc0(sizeof(BitmapLogStateInfo));
+    info->current_iteration = b->current_iteration;
+    info->iterations = b->iterations;
+    info->period = b->current_period;
+
+    return info;
+}
+
 void qmp_xen_save_devices_state(const char *filename, Error **errp)
 {
     QEMUFile *f;