Signed-off-by: Igor Mammedov<address@hidden>
---
qapi-schema.json | 9 +++++++++
qmp-commands.hx | 26 ++++++++++++++++++++++++++
qmp.c | 15 +++++++++++++++
3 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/qapi-schema.json b/qapi-schema.json
index 44cf764..05cc582 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -903,6 +903,15 @@
{ 'command': 'cpu', 'data': {'index': 'int'} }
##
+# @cpu_set
+#
+# Sets specified cpu to online/ofline mode
+#
+# Notes: semantics is : cpu_set x online|offline
+##
+{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} }
+
+##
# @memsave:
#
# Save a portion of guest memory to a file.
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 7e3f4b9..ef1ac1e 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus'
command.
EQMP
{
+ .name = "cpu_set",
+ .args_type = "cpu_index:i,status:s",
+ .mhandler.cmd_new = qmp_marshal_input_cpu_set,
+ },
+
+SQMP
+cpu_set
+-------
+
+Sets virtual cpu to online/ofline state
+
+Arguments:
+
+- "cpu_index": virtual cpu index (json-int)
+- "status": desired state of cpu, online/offline (json-string)
+
+Example:
+
+-> { "execute": "cpu_set",
+ "arguments": { "cpu_index": 2,
+ "status": "online" } }
+<- { "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 c74dde6..e2b268d 100644
--- a/qmp.c
+++ b/qmp.c
@@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp)
/* Just do nothing */
}
+void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp)
+{
+ int state;
+
+ if (!strcmp(status, "online")) {
+ state = 1;
+ } else if (!strcmp(status, "offline")) {
+ state = 0;
+ } else {
+ error_set(errp, QERR_INVALID_PARAMETER, status);
+ return;
+ }
+ qemu_system_cpu_hot_add(cpu_index, state);
+}
+
#ifndef CONFIG_VNC
/* If VNC support is enabled, the "true" query-vnc command is
defined in the VNC subsystem */