Patchwork [11/12,v3] qmp: add cpu-add qmp command

login
register
mail settings
Submitter Igor Mammedov
Date March 26, 2013, 4:47 p.m.
Message ID <1364316462-3383-1-git-send-email-imammedo@redhat.com>
Download mbox | patch
Permalink /patch/231451/
State New
Headers show

Comments

Igor Mammedov - March 26, 2013, 4:47 p.m.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
v3:
  * it appears that 'online/offline' in cpu-set are confusing people
    with what command actually does and users might have to distinguish
    if 'offline' is not implemented by parsing error message. To simplify
    things replace cpu-set with cpu-add command to show more clear what
    command does and just add cpu-del when CPU remove is implemented.

v2:
  * s/cpu_set/cpu-set/
  * qmp doc style fix
  * use bool type instead of opencodding online/offline string
     suggested-by: Eric Blake <eblake@redhat.com>
---
 include/sysemu/sysemu.h |  2 ++
 qapi-schema.json        | 11 +++++++++++
 qmp-commands.hx         | 23 +++++++++++++++++++++++
 qmp.c                   |  5 +++++
 stubs/Makefile.objs     |  1 +
 stubs/do_cpu_hot_add.c  |  7 +++++++
 6 files changed, 49 insertions(+)
 create mode 100644 stubs/do_cpu_hot_add.c
Eric Blake - March 26, 2013, 4:54 p.m.
On 03/26/2013 10:47 AM, Igor Mammedov wrote:
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> v3:
>   * it appears that 'online/offline' in cpu-set are confusing people
>     with what command actually does and users might have to distinguish
>     if 'offline' is not implemented by parsing error message. To simplify
>     things replace cpu-set with cpu-add command to show more clear what
>     command does and just add cpu-del when CPU remove is implemented.
> 
> v2:
>   * s/cpu_set/cpu-set/
>   * qmp doc style fix
>   * use bool type instead of opencodding online/offline string
>      suggested-by: Eric Blake <eblake@redhat.com>
> ---
>  include/sysemu/sysemu.h |  2 ++
>  qapi-schema.json        | 11 +++++++++++
>  qmp-commands.hx         | 23 +++++++++++++++++++++++
>  qmp.c                   |  5 +++++
>  stubs/Makefile.objs     |  1 +
>  stubs/do_cpu_hot_add.c  |  7 +++++++
>  6 files changed, 49 insertions(+)
>  create mode 100644 stubs/do_cpu_hot_add.c

Reviewed-by: Eric Blake <eblake@redhat.com>

I didn't look at the rest of your series (I guess the remaining patches
were only posted in v1?)
Igor Mammedov - March 26, 2013, 5:03 p.m.
On Tue, 26 Mar 2013 10:54:39 -0600
Eric Blake <eblake@redhat.com> wrote:

> On 03/26/2013 10:47 AM, Igor Mammedov wrote:
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > v3:
> >   * it appears that 'online/offline' in cpu-set are confusing people
> >     with what command actually does and users might have to distinguish
> >     if 'offline' is not implemented by parsing error message. To simplify
> >     things replace cpu-set with cpu-add command to show more clear what
> >     command does and just add cpu-del when CPU remove is implemented.
> > 
> > v2:
> >   * s/cpu_set/cpu-set/
> >   * qmp doc style fix
> >   * use bool type instead of opencodding online/offline string
> >      suggested-by: Eric Blake <eblake@redhat.com>
> > ---
> >  include/sysemu/sysemu.h |  2 ++
> >  qapi-schema.json        | 11 +++++++++++
> >  qmp-commands.hx         | 23 +++++++++++++++++++++++
> >  qmp.c                   |  5 +++++
> >  stubs/Makefile.objs     |  1 +
> >  stubs/do_cpu_hot_add.c  |  7 +++++++
> >  6 files changed, 49 insertions(+)
> >  create mode 100644 stubs/do_cpu_hot_add.c
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 
> I didn't look at the rest of your series (I guess the remaining patches
> were only posted in v1?)
Yes, remaining patches in RFC v1. Sorry, I've forgot to add
reference when posting this patch to stick it in related mail thread.
Also there is updated git tree
https://github.com/imammedo/qemu/tree/cpu_set.WIP with this patch.

> 
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>
Luiz Capitulino - March 27, 2013, 12:58 p.m.
On Tue, 26 Mar 2013 17:47:42 +0100
Igor Mammedov <imammedo@redhat.com> wrote:

> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> v3:
>   * it appears that 'online/offline' in cpu-set are confusing people
>     with what command actually does and users might have to distinguish
>     if 'offline' is not implemented by parsing error message. To simplify
>     things replace cpu-set with cpu-add command to show more clear what
>     command does and just add cpu-del when CPU remove is implemented.
> 
> v2:
>   * s/cpu_set/cpu-set/
>   * qmp doc style fix
>   * use bool type instead of opencodding online/offline string
>      suggested-by: Eric Blake <eblake@redhat.com>
> ---
>  include/sysemu/sysemu.h |  2 ++
>  qapi-schema.json        | 11 +++++++++++
>  qmp-commands.hx         | 23 +++++++++++++++++++++++
>  qmp.c                   |  5 +++++
>  stubs/Makefile.objs     |  1 +
>  stubs/do_cpu_hot_add.c  |  7 +++++++
>  6 files changed, 49 insertions(+)
>  create mode 100644 stubs/do_cpu_hot_add.c

Personally, I'd prefer this patch squashed into the next one, but anyway:

Acked-by: Luiz Capitulino <lcapitulino@redhat.com>

> 
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 4b8f721..8bcaf26 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -156,6 +156,8 @@ void drive_hot_add(Monitor *mon, const QDict *qdict);
>  void qemu_register_cpu_add_notifier(Notifier *notifier);
>  void qemu_system_cpu_hotplug_request(uint32_t id);
>  
> +void do_cpu_hot_add(const int64_t id, Error **errp);
> +
>  /* pcie aer error injection */
>  void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
>  int do_pcie_aer_inject_error(Monitor *mon,
> diff --git a/qapi-schema.json b/qapi-schema.json
> index af499bd..3a2f273 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -1385,6 +1385,17 @@
>  { 'command': 'cpu', 'data': {'index': 'int'} }
>  
>  ##
> +# @cpu-add
> +#
> +# Adds CPU with specified id
> +#
> +# @id: cpu id of CPU to be created
> +#
> +# Returns: Nothing on success
> +##
> +{ 'command': 'cpu-add', 'data': {'id': 'int'} }
> +
> +##
>  # @memsave:
>  #
>  # Save a portion of guest memory to a file.
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 2051fcb..4876393 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -407,6 +407,29 @@ Example:
>  EQMP
>  
>      {
> +        .name       = "cpu-add",
> +        .args_type  = "id:i",
> +        .mhandler.cmd_new = qmp_marshal_input_cpu_add,
> +    },
> +
> +SQMP
> +cpu-add
> +-------
> +
> +Adds virtual cpu
> +
> +Arguments:
> +
> +- "id": cpu id (json-int)
> +
> +Example:
> +
> +-> { "execute": "cpu-add", "arguments": { "id": 2 } }
> +<- { "return": {} }
> +
> +EQMP
> +
> +    {
>          .name       = "memsave",
>          .args_type  = "val:l,size:i,filename:s,cpu:i?",
>          .mhandler.cmd_new = qmp_marshal_input_memsave,
> diff --git a/qmp.c b/qmp.c
> index 55b056b..978d956 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -108,6 +108,11 @@ void qmp_cpu(int64_t index, Error **errp)
>      /* Just do nothing */
>  }
>  
> +void qmp_cpu_add(int64_t id, Error **errp)
> +{
> +    do_cpu_hot_add(id, errp);
> +}
> +
>  #ifndef CONFIG_VNC
>  /* If VNC support is enabled, the "true" query-vnc command is
>     defined in the VNC subsystem */
> diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
> index 6a492f5..4154a2b 100644
> --- a/stubs/Makefile.objs
> +++ b/stubs/Makefile.objs
> @@ -26,3 +26,4 @@ stub-obj-$(CONFIG_WIN32) += fd-register.o
>  stub-obj-y += resume_vcpu.o
>  stub-obj-y += get_icc_bus.o
>  stub-obj-y += qemu_system_cpu_hotplug_request.o
> +stub-obj-y += do_cpu_hot_add.o
> diff --git a/stubs/do_cpu_hot_add.c b/stubs/do_cpu_hot_add.c
> new file mode 100644
> index 0000000..1f6d7a6
> --- /dev/null
> +++ b/stubs/do_cpu_hot_add.c
> @@ -0,0 +1,7 @@
> +#include "qapi/error.h"
> +#include "sysemu/sysemu.h"
> +
> +void do_cpu_hot_add(const int64_t id, Error **errp)
> +{
> +    error_setg(errp, "Not implemented");
> +}

Patch

diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 4b8f721..8bcaf26 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -156,6 +156,8 @@  void drive_hot_add(Monitor *mon, const QDict *qdict);
 void qemu_register_cpu_add_notifier(Notifier *notifier);
 void qemu_system_cpu_hotplug_request(uint32_t id);
 
+void do_cpu_hot_add(const int64_t id, Error **errp);
+
 /* pcie aer error injection */
 void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
 int do_pcie_aer_inject_error(Monitor *mon,
diff --git a/qapi-schema.json b/qapi-schema.json
index af499bd..3a2f273 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1385,6 +1385,17 @@ 
 { 'command': 'cpu', 'data': {'index': 'int'} }
 
 ##
+# @cpu-add
+#
+# Adds CPU with specified id
+#
+# @id: cpu id of CPU to be created
+#
+# Returns: Nothing on success
+##
+{ 'command': 'cpu-add', 'data': {'id': 'int'} }
+
+##
 # @memsave:
 #
 # Save a portion of guest memory to a file.
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 2051fcb..4876393 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -407,6 +407,29 @@  Example:
 EQMP
 
     {
+        .name       = "cpu-add",
+        .args_type  = "id:i",
+        .mhandler.cmd_new = qmp_marshal_input_cpu_add,
+    },
+
+SQMP
+cpu-add
+-------
+
+Adds virtual cpu
+
+Arguments:
+
+- "id": cpu id (json-int)
+
+Example:
+
+-> { "execute": "cpu-add", "arguments": { "id": 2 } }
+<- { "return": {} }
+
+EQMP
+
+    {
         .name       = "memsave",
         .args_type  = "val:l,size:i,filename:s,cpu:i?",
         .mhandler.cmd_new = qmp_marshal_input_memsave,
diff --git a/qmp.c b/qmp.c
index 55b056b..978d956 100644
--- a/qmp.c
+++ b/qmp.c
@@ -108,6 +108,11 @@  void qmp_cpu(int64_t index, Error **errp)
     /* Just do nothing */
 }
 
+void qmp_cpu_add(int64_t id, Error **errp)
+{
+    do_cpu_hot_add(id, errp);
+}
+
 #ifndef CONFIG_VNC
 /* If VNC support is enabled, the "true" query-vnc command is
    defined in the VNC subsystem */
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 6a492f5..4154a2b 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -26,3 +26,4 @@  stub-obj-$(CONFIG_WIN32) += fd-register.o
 stub-obj-y += resume_vcpu.o
 stub-obj-y += get_icc_bus.o
 stub-obj-y += qemu_system_cpu_hotplug_request.o
+stub-obj-y += do_cpu_hot_add.o
diff --git a/stubs/do_cpu_hot_add.c b/stubs/do_cpu_hot_add.c
new file mode 100644
index 0000000..1f6d7a6
--- /dev/null
+++ b/stubs/do_cpu_hot_add.c
@@ -0,0 +1,7 @@ 
+#include "qapi/error.h"
+#include "sysemu/sysemu.h"
+
+void do_cpu_hot_add(const int64_t id, Error **errp)
+{
+    error_setg(errp, "Not implemented");
+}