From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39368) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b9nAm-0005hd-Jc for qemu-devel@nongnu.org; Mon, 06 Jun 2016 01:34:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b9nAj-0003u7-RL for qemu-devel@nongnu.org; Mon, 06 Jun 2016 01:33:59 -0400 Date: Mon, 6 Jun 2016 15:28:09 +1000 From: David Gibson Message-ID: <20160606052808.GI9226@voom.fritz.box> References: <1463024905-28401-1-git-send-email-bharata@linux.vnet.ibm.com> <1463024905-28401-14-git-send-email-bharata@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="G3juXO9GfR42w+sw" Content-Disposition: inline In-Reply-To: <1463024905-28401-14-git-send-email-bharata@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [for-2.7 PATCH v3 13/15] QMP: Add query-hotpluggable-cpus List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bharata B Rao Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, afaerber@suse.de, imammedo@redhat.com, armbru@redhat.com, thuth@redhat.com, aik@ozlabs.ru, agraf@suse.de, pbonzini@redhat.com, ehabkost@redhat.com, pkrempa@redhat.com, mdroth@linux.vnet.ibm.com, eblake@redhat.com, mjrosato@linux.vnet.ibm.com, borntraeger@de.ibm.com --G3juXO9GfR42w+sw Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, May 12, 2016 at 09:18:23AM +0530, Bharata B Rao wrote: > From: Igor Mammedov >=20 > 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. >=20 > 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) >=20 > 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] >=20 > 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. >=20 > Signed-off-by: Igor Mammedov > Signed-off-by: Bharata B Rao Reviewed-by: David Gibson Igor, if you're ready for this to go ahead, I'll take it through my tree. > --- > include/hw/boards.h | 5 +++++ > monitor.c | 13 +++++++++++++ > qapi-schema.json | 55 +++++++++++++++++++++++++++++++++++++++++++++++= ++++++ > qmp-commands.hx | 23 ++++++++++++++++++++++ > 4 files changed, 96 insertions(+) >=20 > diff --git a/include/hw/boards.h b/include/hw/boards.h > index 8d4fe56..0db0c1e 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -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 *machin= e); > }; > =20 > /** > diff --git a/monitor.c b/monitor.c > index d1c1930..b469225 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -4267,3 +4267,16 @@ GICCapabilityList *qmp_query_gic_capabilities(Erro= r **errp) > return NULL; > } > #endif > + > +HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp) > +{ > + MachineState *ms =3D MACHINE(qdev_get_machine()); > + MachineClass *mc =3D 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); > +} > diff --git a/qapi-schema.json b/qapi-schema.json > index 54634c4..137e532 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -4178,3 +4178,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'] } > diff --git a/qmp-commands.hx b/qmp-commands.hx > index de896a5..5640147 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -4880,3 +4880,26 @@ Example: > { "version": 3, "emulated": false, "kernel": true } ] } > =20 > EQMP > + > + { > + .name =3D "query-hotpluggable-cpus", > + .args_type =3D "", > + .mhandler.cmd_new =3D qmp_marshal_query_hotpluggable_cpus, > + }, > + > +SQMP > +Show existing/possible CPUs > +--------------------------- > + > +Arguments: None. > + > +Example for pseries machine type started with > +-smp 2,cores=3D2,maxcpus=3D4 -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]"} > + ]}' --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --G3juXO9GfR42w+sw Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIbBAEBAgAGBQJXVQnoAAoJEGw4ysog2bOSFigP93B+YK/ssTQy0WulwWwKp8E9 S4c9VCb/Jj/ENUdx717XxUuVvzlD5oqW2r/+2TY5uyBWpgRw+XE4kTOE0XZ/Iybt CjysHUC6T5lw6BXR6kHFubiotYven6Ct6gNQ7dHSP2PFe5E3dXX9hn7UKQnswKTz B+cTkA6bWQe/Q3YcRn0AGq9AQLJL/5nm5WtuCX3RfkTlOjBDtDHDF1tAKVgYzNvA tpUHE+U9Vh07oHqzUvKNOAu1X57fxCEGOo8Z116wHu42yOHckt6Han+wAe4xoy7m O721xLwc0sj1rcMKaetfK3ATz64Fh484DkLjBqBzyR1D0Ag5UL3oGX8NYitr+pD0 loKPgckGxOmCETkC9ivxuRVvWcF2ZUdZ8zXJv9e3wt7qLZ0rc78AU28WvDD6KUja 7EE39mWyKsIQ2ybMtGCup8OgQU4mWwYnhG/y638nO2MQESCzdS+0lrsf/DR7OObd 6CDCJm9KG+vV6DRWfomfLA2AJhz1iglKfLX0h04Fg+6QjtzaCz8D50bCYgT996bD 21sQp16sPKrtvYVmjPNrJzG2E3caxFGMsbiAlCS5ILb3KvSia2ZHmcWP+TgsPsSK OD4cZ4syyLBIAuf+z3yyqNDCCvtY3wD6ByT37lxuLRsSQ4I/EaFAS7uCR6v6FSTs rAWFm80CtUSrDiQ1tjE= =4TtN -----END PGP SIGNATURE----- --G3juXO9GfR42w+sw--