mirror of https://github.com/xemu-project/xemu.git
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>
This commit is contained in:
parent
6f4b5c3ec5
commit
d4633541ee
|
@ -81,6 +81,10 @@ typedef struct {
|
|||
* Returns an array of @CPUArchId architecture-dependent CPU IDs
|
||||
* which includes CPU IDs for present and possible to hotplug CPUs.
|
||||
* 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 {
|
||||
/*< private >*/
|
||||
|
@ -124,6 +128,7 @@ struct MachineClass {
|
|||
DeviceState *dev);
|
||||
unsigned (*cpu_index_to_socket_id)(unsigned cpu_index);
|
||||
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;
|
||||
}
|
||||
#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
|
||||
##
|
||||
{ '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 } ] }
|
||||
|
||||
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