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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Igor Mammedov
						Igor Mammedov