mirror of https://github.com/proxmox/mirror_qemu
QMP: Add query-hotpluggable-cpus
It will allow mgmt to query present and hotpluggable CPU objects, it is required from a target platform that wishes to support command to implement and set MachineClass.query_hotpluggable_cpus callback, which will return a list of possible CPU objects with options that would be needed for hotplugging possible CPU objects. There are: 'type': 'str' - QOM CPU object type for usage with device_add 'vcpus-count': 'int' - number of logical VCPU threads per CPU object (mgmt needs to know) and a set of optional fields that are to used for hotplugging a CPU objects and would allows mgmt tools to know what/where it could be hotplugged; [node],[socket],[core],[thread] For present CPUs there is a 'qom-path' field which would allow mgmt to inspect whatever object/abstraction the target platform considers as CPU object. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>master
parent
6f4b5c3ec5
commit
d4633541ee
|
@ -81,6 +81,10 @@ typedef struct {
|
||||||
* Returns an array of @CPUArchId architecture-dependent CPU IDs
|
* Returns an array of @CPUArchId architecture-dependent CPU IDs
|
||||||
* which includes CPU IDs for present and possible to hotplug CPUs.
|
* which includes CPU IDs for present and possible to hotplug CPUs.
|
||||||
* Caller is responsible for freeing returned list.
|
* Caller is responsible for freeing returned list.
|
||||||
|
* @query_hotpluggable_cpus:
|
||||||
|
* Returns a @HotpluggableCPUList, which describes CPUs objects which
|
||||||
|
* could be added with -device/device_add.
|
||||||
|
* Caller is responsible for freeing returned list.
|
||||||
*/
|
*/
|
||||||
struct MachineClass {
|
struct MachineClass {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
|
@ -124,6 +128,7 @@ struct MachineClass {
|
||||||
DeviceState *dev);
|
DeviceState *dev);
|
||||||
unsigned (*cpu_index_to_socket_id)(unsigned cpu_index);
|
unsigned (*cpu_index_to_socket_id)(unsigned cpu_index);
|
||||||
CPUArchIdList *(*possible_cpu_arch_ids)(MachineState *machine);
|
CPUArchIdList *(*possible_cpu_arch_ids)(MachineState *machine);
|
||||||
|
HotpluggableCPUList *(*query_hotpluggable_cpus)(MachineState *machine);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
13
monitor.c
13
monitor.c
|
@ -4273,3 +4273,16 @@ GICCapabilityList *qmp_query_gic_capabilities(Error **errp)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
|
||||||
|
{
|
||||||
|
MachineState *ms = MACHINE(qdev_get_machine());
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||||
|
|
||||||
|
if (!mc->query_hotpluggable_cpus) {
|
||||||
|
error_setg(errp, QERR_FEATURE_DISABLED, "query-hotpluggable-cpus");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mc->query_hotpluggable_cpus(ms);
|
||||||
|
}
|
||||||
|
|
|
@ -4253,3 +4253,58 @@
|
||||||
# Since: 2.6
|
# Since: 2.6
|
||||||
##
|
##
|
||||||
{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'] }
|
{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'] }
|
||||||
|
|
||||||
|
##
|
||||||
|
# CpuInstanceProperties
|
||||||
|
#
|
||||||
|
# List of properties to be used for hotplugging a CPU instance,
|
||||||
|
# it should be passed by management with device_add command when
|
||||||
|
# a CPU is being hotplugged.
|
||||||
|
#
|
||||||
|
# Note: currently there are 4 properties that could be present
|
||||||
|
# but management should be prepared to pass through other
|
||||||
|
# properties with device_add command to allow for future
|
||||||
|
# interface extension.
|
||||||
|
#
|
||||||
|
# @node: #optional NUMA node ID the CPU belongs to
|
||||||
|
# @socket: #optional socket number within node/board the CPU belongs to
|
||||||
|
# @core: #optional core number within socket the CPU belongs to
|
||||||
|
# @thread: #optional thread number within core the CPU belongs to
|
||||||
|
#
|
||||||
|
# Since: 2.7
|
||||||
|
##
|
||||||
|
{ 'struct': 'CpuInstanceProperties',
|
||||||
|
'data': { '*node': 'int',
|
||||||
|
'*socket': 'int',
|
||||||
|
'*core': 'int',
|
||||||
|
'*thread': 'int'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# @HotpluggableCPU
|
||||||
|
#
|
||||||
|
# @type: CPU object type for usage with device_add command
|
||||||
|
# @props: list of properties to be used for hotplugging CPU
|
||||||
|
# @vcpus-count: number of logical VCPU threads @HotpluggableCPU provides
|
||||||
|
# @qom-path: #optional link to existing CPU object if CPU is present or
|
||||||
|
# omitted if CPU is not present.
|
||||||
|
#
|
||||||
|
# Since: 2.7
|
||||||
|
##
|
||||||
|
{ 'struct': 'HotpluggableCPU',
|
||||||
|
'data': { 'type': 'str',
|
||||||
|
'vcpus-count': 'int',
|
||||||
|
'props': 'CpuInstanceProperties',
|
||||||
|
'*qom-path': 'str'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# @query-hotpluggable-cpus
|
||||||
|
#
|
||||||
|
# Returns: a list of HotpluggableCPU objects.
|
||||||
|
#
|
||||||
|
# Since: 2.7
|
||||||
|
##
|
||||||
|
{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'] }
|
||||||
|
|
|
@ -4960,3 +4960,26 @@ Example:
|
||||||
{ "version": 3, "emulated": false, "kernel": true } ] }
|
{ "version": 3, "emulated": false, "kernel": true } ] }
|
||||||
|
|
||||||
EQMP
|
EQMP
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "query-hotpluggable-cpus",
|
||||||
|
.args_type = "",
|
||||||
|
.mhandler.cmd_new = qmp_marshal_query_hotpluggable_cpus,
|
||||||
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
Show existing/possible CPUs
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Example for pseries machine type started with
|
||||||
|
-smp 2,cores=2,maxcpus=4 -cpu POWER8:
|
||||||
|
|
||||||
|
-> { "execute": "query-hotpluggable-cpus" }
|
||||||
|
<- {"return": [
|
||||||
|
{ "props": { "core": 8 }, "type": "POWER8-spapr-cpu-core",
|
||||||
|
"vcpus-count": 1 },
|
||||||
|
{ "props": { "core": 0 }, "type": "POWER8-spapr-cpu-core",
|
||||||
|
"vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
|
||||||
|
]}'
|
||||||
|
|
Loading…
Reference in New Issue