From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42370) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WtyoX-0001qv-0s for qemu-devel@nongnu.org; Mon, 09 Jun 2014 08:36:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WtyoR-0004J5-MN for qemu-devel@nongnu.org; Mon, 09 Jun 2014 08:36:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14073) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WtyoR-0004Ig-Eb for qemu-devel@nongnu.org; Mon, 09 Jun 2014 08:36:31 -0400 Date: Mon, 9 Jun 2014 14:36:22 +0200 From: Igor Mammedov Message-ID: <20140609143622.44fa7006@thinkpad> In-Reply-To: <66e17e32ccb10ca0ae262103fcf170b84511c3f8.1402299637.git.hutao@cn.fujitsu.com> References: <66e17e32ccb10ca0ae262103fcf170b84511c3f8.1402299637.git.hutao@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v4 28/29] qmp: add query-memdev List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Hu Tao Cc: Yasunori Goto , Paolo Bonzini , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Eduardo Habkost On Mon, 9 Jun 2014 18:25:33 +0800 Hu Tao wrote: > Add qmp command query-memdev to query for information > of memory devices >=20 > Signed-off-by: Hu Tao > --- > numa.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++ > qapi-schema.json | 34 ++++++++++++++++++++++++++ > qmp-commands.hx | 32 +++++++++++++++++++++++++ > 3 files changed, 138 insertions(+) >=20 > diff --git a/numa.c b/numa.c > index 1a83733..4e2fdc4 100644 > --- a/numa.c > +++ b/numa.c > @@ -31,9 +31,14 @@ > #include "qapi-visit.h" > #include "qapi/opts-visitor.h" > #include "qapi/dealloc-visitor.h" > +#include "qapi/qmp-output-visitor.h" > +#include "qapi/qmp-input-visitor.h" > +#include "qapi/string-output-visitor.h" > +#include "qapi/string-input-visitor.h" > #include "qapi/qmp/qerror.h" > #include "hw/boards.h" > #include "sysemu/hostmem.h" > +#include "qmp-commands.h" > =20 > QemuOptsList qemu_numa_opts =3D { > .name =3D "numa", > @@ -280,3 +285,70 @@ void memory_region_allocate_system_memory(MemoryRegi= on *mr, Object *owner, > addr +=3D size; > } > } > + > +MemdevList *qmp_query_memdev(Error **errp) > +{ > + MemdevList *list =3D NULL, *m; > + HostMemoryBackend *backend; > + Error *err =3D NULL; > + int i; > + > + for (i =3D 0; i < nb_numa_nodes; i++) { > + backend =3D numa_info[i].node_memdev; > + > + m =3D g_malloc0(sizeof(*m)); > + m->value =3D g_malloc0(sizeof(*m->value)); > + m->value->size =3D object_property_get_int(OBJECT(backend), "siz= e", > + &err); > + if (err) { > + goto error; > + } > + > + m->value->merge =3D object_property_get_bool(OBJECT(backend), "m= erge", > + &err); > + if (err) { > + goto error; > + } > + > + m->value->dump =3D object_property_get_bool(OBJECT(backend), "du= mp", > + &err); > + if (err) { > + goto error; > + } > + > + m->value->prealloc =3D object_property_get_bool(OBJECT(backend), > + "prealloc", &err); > + if (err) { > + goto error; > + } > + > + m->value->policy =3D object_property_get_enum(OBJECT(backend), > + "policy", > + HostMemPolicy_lookup, > + &err); > + if (err) { > + goto error; > + } > + > + object_property_get_uint16List(OBJECT(backend), "host-nodes", > + &m->value->host_nodes, &err); > + if (err) { > + goto error; > + } > + > + m->next =3D list; > + list =3D m; > + } > + > + return list; > + > +error: > + while (list) { > + m =3D list; > + list =3D list->next; > + g_free(m->value); > + g_free(m); > + } > + qerror_report_err(err); > + return NULL; > +} > diff --git a/qapi-schema.json b/qapi-schema.json > index 0898c00..f23c3f1 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -4779,3 +4779,37 @@ > ## > { 'enum': 'HostMemPolicy', > 'data': [ 'default', 'preferred', 'bind', 'interleave' ] } > + > +## > +# @Memdev: > +# > +# Information of memory device > +# > +# @size: memory device size > +# > +# @host-nodes: host nodes for its memory policy > +# > +# @policy: memory policy of memory device > +# > +# Since: 2.1 > +## > + > +{ 'type': 'Memdev', > + 'data': { > + 'size': 'size', > + 'merge': 'bool', > + 'dump': 'bool', > + 'prealloc': 'bool', > + 'host-nodes': ['uint16'], > + 'policy': 'HostMemPolicy' }} > + > +## > +# @query-memdev: > +# > +# Returns information for all memory devices. > +# > +# Returns: a list of @Memdev. > +# > +# Since: 2.1 > +## > +{ 'command': 'query-memdev', 'returns': ['Memdev'] } Could we make it union, that returns MemdevRam + MemdevFile MemdevFile will have additional file-only specific properties. > diff --git a/qmp-commands.hx b/qmp-commands.hx > index d8aa4ed..ea8958f 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -3572,3 +3572,35 @@ Example: > } }=A0] } > =20 > EQMP > + > + { > + .name =3D "query-memdev", > + .args_type =3D "", > + .mhandler.cmd_new =3D qmp_marshal_input_query_memdev, > + }, > + > +SQMP > +query-memdev > +------------ > + > +Show memory devices information. > + > + > +Example (1): > + > +-> { "execute": "query-memdev" } > +<- { "return": [ > + { > + "size": 536870912, > + "host-nodes": [0, 1], > + "policy": "bind" > + }, > + { > + "size": 536870912, > + "host-nodes": [2, 3], > + "policy": "preferred" > + } > + ] > + } > + > +EQMP > --=20 > 1.9.3 >=20 --=20 Regards, Igor